Merge "Implement bp2build for linker_config"

This commit is contained in:
Alix Espino 2022-07-29 18:19:00 +00:00 committed by Gerrit Code Review
commit 2f384a7432
4 changed files with 90 additions and 4 deletions

View file

@ -366,6 +366,7 @@ var (
}
Bp2buildModuleTypeAlwaysConvertList = []string{
"linker_config",
"java_import",
"java_import_host",
}
@ -440,7 +441,6 @@ var (
"art-script", // depends on unconverted modules: dalvikvm, dex2oat
"bin2c_fastdeployagent", // depends on unconverted modules: deployagent
"com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig
"conv_linker_config", // depends on unconverted modules: linker_config_proto
"currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9
"dex2oat-script", // depends on unconverted modules: dex2oat
"generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip

View file

@ -20,15 +20,16 @@ bootstrap_go_package {
"soong-android",
"soong-android-allowlists",
"soong-android-soongconfig",
"soong-shared",
"soong-apex",
"soong-bazel",
"soong-cc",
"soong-cc-config",
"soong-etc",
"soong-genrule",
"soong-linkerconfig",
"soong-python",
"soong-sh",
"soong-shared",
"soong-starlark-format",
"soong-ui-metrics",
],
@ -58,6 +59,7 @@ bootstrap_go_package {
"java_library_host_conversion_test.go",
"java_plugin_conversion_test.go",
"java_proto_conversion_test.go",
"linker_config_conversion_test.go",
"performance_test.go",
"prebuilt_etc_conversion_test.go",
"python_binary_conversion_test.go",

View file

@ -0,0 +1,59 @@
// Copyright 2022 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package bp2build
import (
"fmt"
"testing"
"android/soong/linkerconfig"
)
func runLinkerConfigTestCase(t *testing.T, tc bp2buildTestCase) {
t.Helper()
(&tc).moduleTypeUnderTest = "linker_config"
(&tc).moduleTypeUnderTestFactory = linkerconfig.LinkerConfigFactory
runBp2BuildTestCaseSimple(t, tc)
}
func TestLinkerConfigConvertsSrc(t *testing.T) {
runLinkerConfigTestCase(t,
bp2buildTestCase{
blueprint: `
linker_config {
name: "foo",
src: "a.json",
}
`,
expectedBazelTargets: []string{makeBazelTarget("linker_config", "foo", attrNameToString{
"src": `"a.json"`,
})},
})
}
func TestLinkerConfigNoSrc(t *testing.T) {
runLinkerConfigTestCase(t,
bp2buildTestCase{
blueprint: `
linker_config {
name: "foo",
}
`,
expectedBazelTargets: []string{},
expectedErr: fmt.Errorf("Android.bp:2:1: module \"foo\": src: empty src is not supported"),
})
}

View file

@ -22,6 +22,7 @@ import (
"github.com/google/blueprint/proptools"
"android/soong/android"
"android/soong/bazel"
"android/soong/cc"
"android/soong/etc"
)
@ -36,7 +37,7 @@ func init() {
}
func registerLinkerConfigBuildComponent(ctx android.RegistrationContext) {
ctx.RegisterModuleType("linker_config", linkerConfigFactory)
ctx.RegisterModuleType("linker_config", LinkerConfigFactory)
}
type linkerConfigProperties struct {
@ -52,6 +53,7 @@ type linkerConfigProperties struct {
type linkerConfig struct {
android.ModuleBase
android.BazelModuleBase
properties linkerConfigProperties
outputFilePath android.OutputPath
@ -100,6 +102,28 @@ func (l *linkerConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) {
ctx.InstallFile(l.installDirPath, l.outputFilePath.Base(), l.outputFilePath)
}
type linkerConfigAttributes struct {
Src bazel.LabelAttribute
}
func (l *linkerConfig) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
if l.properties.Src == nil {
ctx.PropertyErrorf("src", "empty src is not supported")
return
}
src := android.BazelLabelForModuleSrcSingle(ctx, *l.properties.Src)
targetModuleProperties := bazel.BazelTargetModuleProperties{
Rule_class: "linker_config",
Bzl_load_location: "//build/bazel/rules:linker_config.bzl",
}
ctx.CreateBazelTargetModule(
targetModuleProperties,
android.CommonAttributes{Name: l.Name()},
&linkerConfigAttributes{
Src: bazel.LabelAttribute{Value: &src},
})
}
func BuildLinkerConfig(ctx android.ModuleContext, builder *android.RuleBuilder,
input android.Path, otherModules []android.Module, output android.OutputPath) {
@ -141,10 +165,11 @@ func BuildLinkerConfig(ctx android.ModuleContext, builder *android.RuleBuilder,
// linker_config generates protobuf file from json file. This protobuf file will be used from
// linkerconfig while generating ld.config.txt. Format of this file can be found from
// https://android.googlesource.com/platform/system/linkerconfig/+/master/README.md
func linkerConfigFactory() android.Module {
func LinkerConfigFactory() android.Module {
m := &linkerConfig{}
m.AddProperties(&m.properties)
android.InitAndroidArchModule(m, android.HostAndDeviceSupported, android.MultilibFirst)
android.InitBazelModule(m)
return m
}