Loading android/allowlists/allowlists.go +1 −1 Original line number Original line Diff line number Diff line Loading @@ -366,6 +366,7 @@ var ( } } Bp2buildModuleTypeAlwaysConvertList = []string{ Bp2buildModuleTypeAlwaysConvertList = []string{ "linker_config", "java_import", "java_import", "java_import_host", "java_import_host", } } Loading Loading @@ -440,7 +441,6 @@ var ( "art-script", // depends on unconverted modules: dalvikvm, dex2oat "art-script", // depends on unconverted modules: dalvikvm, dex2oat "bin2c_fastdeployagent", // depends on unconverted modules: deployagent "bin2c_fastdeployagent", // depends on unconverted modules: deployagent "com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig "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 "currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9 "dex2oat-script", // depends on unconverted modules: dex2oat "dex2oat-script", // depends on unconverted modules: dex2oat "generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip "generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip Loading bp2build/Android.bp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -20,15 +20,16 @@ bootstrap_go_package { "soong-android", "soong-android", "soong-android-allowlists", "soong-android-allowlists", "soong-android-soongconfig", "soong-android-soongconfig", "soong-shared", "soong-apex", "soong-apex", "soong-bazel", "soong-bazel", "soong-cc", "soong-cc", "soong-cc-config", "soong-cc-config", "soong-etc", "soong-etc", "soong-genrule", "soong-genrule", "soong-linkerconfig", "soong-python", "soong-python", "soong-sh", "soong-sh", "soong-shared", "soong-starlark-format", "soong-starlark-format", "soong-ui-metrics", "soong-ui-metrics", ], ], Loading Loading @@ -58,6 +59,7 @@ bootstrap_go_package { "java_library_host_conversion_test.go", "java_library_host_conversion_test.go", "java_plugin_conversion_test.go", "java_plugin_conversion_test.go", "java_proto_conversion_test.go", "java_proto_conversion_test.go", "linker_config_conversion_test.go", "performance_test.go", "performance_test.go", "prebuilt_etc_conversion_test.go", "prebuilt_etc_conversion_test.go", "python_binary_conversion_test.go", "python_binary_conversion_test.go", Loading bp2build/linker_config_conversion_test.go 0 → 100644 +59 −0 Original line number Original line Diff line number Diff line // 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"), }) } linkerconfig/linkerconfig.go +27 −2 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools" "android/soong/android" "android/soong/android" "android/soong/bazel" "android/soong/cc" "android/soong/cc" "android/soong/etc" "android/soong/etc" ) ) Loading @@ -36,7 +37,7 @@ func init() { } } func registerLinkerConfigBuildComponent(ctx android.RegistrationContext) { func registerLinkerConfigBuildComponent(ctx android.RegistrationContext) { ctx.RegisterModuleType("linker_config", linkerConfigFactory) ctx.RegisterModuleType("linker_config", LinkerConfigFactory) } } type linkerConfigProperties struct { type linkerConfigProperties struct { Loading @@ -52,6 +53,7 @@ type linkerConfigProperties struct { type linkerConfig struct { type linkerConfig struct { android.ModuleBase android.ModuleBase android.BazelModuleBase properties linkerConfigProperties properties linkerConfigProperties outputFilePath android.OutputPath outputFilePath android.OutputPath Loading Loading @@ -100,6 +102,28 @@ func (l *linkerConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.InstallFile(l.installDirPath, l.outputFilePath.Base(), l.outputFilePath) 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, func BuildLinkerConfig(ctx android.ModuleContext, builder *android.RuleBuilder, input android.Path, otherModules []android.Module, output android.OutputPath) { input android.Path, otherModules []android.Module, output android.OutputPath) { Loading Loading @@ -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 // 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 // linkerconfig while generating ld.config.txt. Format of this file can be found from // https://android.googlesource.com/platform/system/linkerconfig/+/master/README.md // https://android.googlesource.com/platform/system/linkerconfig/+/master/README.md func linkerConfigFactory() android.Module { func LinkerConfigFactory() android.Module { m := &linkerConfig{} m := &linkerConfig{} m.AddProperties(&m.properties) m.AddProperties(&m.properties) android.InitAndroidArchModule(m, android.HostAndDeviceSupported, android.MultilibFirst) android.InitAndroidArchModule(m, android.HostAndDeviceSupported, android.MultilibFirst) android.InitBazelModule(m) return m return m } } Loading Loading
android/allowlists/allowlists.go +1 −1 Original line number Original line Diff line number Diff line Loading @@ -366,6 +366,7 @@ var ( } } Bp2buildModuleTypeAlwaysConvertList = []string{ Bp2buildModuleTypeAlwaysConvertList = []string{ "linker_config", "java_import", "java_import", "java_import_host", "java_import_host", } } Loading Loading @@ -440,7 +441,6 @@ var ( "art-script", // depends on unconverted modules: dalvikvm, dex2oat "art-script", // depends on unconverted modules: dalvikvm, dex2oat "bin2c_fastdeployagent", // depends on unconverted modules: deployagent "bin2c_fastdeployagent", // depends on unconverted modules: deployagent "com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig "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 "currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9 "dex2oat-script", // depends on unconverted modules: dex2oat "dex2oat-script", // depends on unconverted modules: dex2oat "generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip "generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip Loading
bp2build/Android.bp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -20,15 +20,16 @@ bootstrap_go_package { "soong-android", "soong-android", "soong-android-allowlists", "soong-android-allowlists", "soong-android-soongconfig", "soong-android-soongconfig", "soong-shared", "soong-apex", "soong-apex", "soong-bazel", "soong-bazel", "soong-cc", "soong-cc", "soong-cc-config", "soong-cc-config", "soong-etc", "soong-etc", "soong-genrule", "soong-genrule", "soong-linkerconfig", "soong-python", "soong-python", "soong-sh", "soong-sh", "soong-shared", "soong-starlark-format", "soong-starlark-format", "soong-ui-metrics", "soong-ui-metrics", ], ], Loading Loading @@ -58,6 +59,7 @@ bootstrap_go_package { "java_library_host_conversion_test.go", "java_library_host_conversion_test.go", "java_plugin_conversion_test.go", "java_plugin_conversion_test.go", "java_proto_conversion_test.go", "java_proto_conversion_test.go", "linker_config_conversion_test.go", "performance_test.go", "performance_test.go", "prebuilt_etc_conversion_test.go", "prebuilt_etc_conversion_test.go", "python_binary_conversion_test.go", "python_binary_conversion_test.go", Loading
bp2build/linker_config_conversion_test.go 0 → 100644 +59 −0 Original line number Original line Diff line number Diff line // 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"), }) }
linkerconfig/linkerconfig.go +27 −2 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools" "android/soong/android" "android/soong/android" "android/soong/bazel" "android/soong/cc" "android/soong/cc" "android/soong/etc" "android/soong/etc" ) ) Loading @@ -36,7 +37,7 @@ func init() { } } func registerLinkerConfigBuildComponent(ctx android.RegistrationContext) { func registerLinkerConfigBuildComponent(ctx android.RegistrationContext) { ctx.RegisterModuleType("linker_config", linkerConfigFactory) ctx.RegisterModuleType("linker_config", LinkerConfigFactory) } } type linkerConfigProperties struct { type linkerConfigProperties struct { Loading @@ -52,6 +53,7 @@ type linkerConfigProperties struct { type linkerConfig struct { type linkerConfig struct { android.ModuleBase android.ModuleBase android.BazelModuleBase properties linkerConfigProperties properties linkerConfigProperties outputFilePath android.OutputPath outputFilePath android.OutputPath Loading Loading @@ -100,6 +102,28 @@ func (l *linkerConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.InstallFile(l.installDirPath, l.outputFilePath.Base(), l.outputFilePath) 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, func BuildLinkerConfig(ctx android.ModuleContext, builder *android.RuleBuilder, input android.Path, otherModules []android.Module, output android.OutputPath) { input android.Path, otherModules []android.Module, output android.OutputPath) { Loading Loading @@ -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 // 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 // linkerconfig while generating ld.config.txt. Format of this file can be found from // https://android.googlesource.com/platform/system/linkerconfig/+/master/README.md // https://android.googlesource.com/platform/system/linkerconfig/+/master/README.md func linkerConfigFactory() android.Module { func LinkerConfigFactory() android.Module { m := &linkerConfig{} m := &linkerConfig{} m.AddProperties(&m.properties) m.AddProperties(&m.properties) android.InitAndroidArchModule(m, android.HostAndDeviceSupported, android.MultilibFirst) android.InitAndroidArchModule(m, android.HostAndDeviceSupported, android.MultilibFirst) android.InitBazelModule(m) return m return m } } Loading