Implement bp2build for linker_config
Pair: agespino Bug: 211666695 Test: TODO Change-Id: I479bcd7c53b1c57563fb4277ec39ad70b16030b8
This commit is contained in:
@@ -363,6 +363,7 @@ var (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Bp2buildModuleTypeAlwaysConvertList = []string{
|
Bp2buildModuleTypeAlwaysConvertList = []string{
|
||||||
|
"linker_config",
|
||||||
"java_import",
|
"java_import",
|
||||||
"java_import_host",
|
"java_import_host",
|
||||||
}
|
}
|
||||||
@@ -437,7 +438,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
|
||||||
|
@@ -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",
|
||||||
],
|
],
|
||||||
@@ -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",
|
||||||
|
59
bp2build/linker_config_conversion_test.go
Normal file
59
bp2build/linker_config_conversion_test.go
Normal 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"),
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
@@ -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"
|
||||||
)
|
)
|
||||||
@@ -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 {
|
||||||
@@ -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
|
||||||
@@ -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) {
|
||||||
|
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user