Merge "Implement bp2build for linker_config"
This commit is contained in:
commit
2f384a7432
4 changed files with 90 additions and 4 deletions
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
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"
|
||||
|
||||
"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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue