Merge changes from topic "prebuilt-cc-shared-always" into main

* changes:
  Implement bp2build for java_sdk_library_import
  Always convert prebuilt libraries
  Always convert prebuilt cc library headers
This commit is contained in:
Liz Kammer 2023-09-20 13:13:51 +00:00 committed by Gerrit Code Review
commit 9e12c78637
6 changed files with 178 additions and 50 deletions

View file

@ -922,11 +922,16 @@ var (
"aconfig_values", "aconfig_values",
"aidl_interface_headers", "aidl_interface_headers",
"bpf", "bpf",
"cc_prebuilt_library",
"cc_prebuilt_library_headers",
"cc_prebuilt_library_shared",
"cc_prebuilt_library_static",
"combined_apis", "combined_apis",
"droiddoc_exported_dir", "droiddoc_exported_dir",
"java_import", "java_import",
"java_import_host", "java_import_host",
"java_sdk_library", "java_sdk_library",
"java_sdk_library_import",
"license", "license",
"linker_config", "linker_config",
"sysprop_library", "sysprop_library",

View file

@ -74,6 +74,8 @@ 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",
"java_sdk_library_conversion_test.go",
"java_sdk_library_import_conversion_test.go",
"license_conversion_test.go", "license_conversion_test.go",
"license_kind_conversion_test.go", "license_kind_conversion_test.go",
"linker_config_conversion_test.go", "linker_config_conversion_test.go",

View file

@ -57,6 +57,7 @@ func TestCcLibraryHeadersLoadStatement(t *testing.T) {
func registerCcLibraryHeadersModuleTypes(ctx android.RegistrationContext) { func registerCcLibraryHeadersModuleTypes(ctx android.RegistrationContext) {
cc.RegisterCCBuildComponents(ctx) cc.RegisterCCBuildComponents(ctx)
cc.RegisterLibraryHeadersBuildComponents(ctx)
} }
func runCcLibraryHeadersTestCase(t *testing.T, tc Bp2buildTestCase) { func runCcLibraryHeadersTestCase(t *testing.T, tc Bp2buildTestCase) {
@ -66,9 +67,7 @@ func runCcLibraryHeadersTestCase(t *testing.T, tc Bp2buildTestCase) {
func TestCcLibraryHeadersSimple(t *testing.T) { func TestCcLibraryHeadersSimple(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers test", Description: "cc_library_headers test",
ModuleTypeUnderTest: "cc_library_headers",
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
Filesystem: map[string]string{ Filesystem: map[string]string{
"lib-1/lib1a.h": "", "lib-1/lib1a.h": "",
"lib-1/lib1b.h": "", "lib-1/lib1b.h": "",
@ -127,10 +126,8 @@ cc_library_headers {
// variant info(select) should go before general info. // variant info(select) should go before general info.
func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) { func TestCcLibraryHeadersOsSpecificHeader(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers test with os-specific header_libs props", Description: "cc_library_headers test with os-specific header_libs props",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
Filesystem: map[string]string{},
StubbedBuildDefinitions: []string{"android-lib", "base-lib", "darwin-lib", StubbedBuildDefinitions: []string{"android-lib", "base-lib", "darwin-lib",
"linux-lib", "linux_bionic-lib", "windows-lib"}, "linux-lib", "linux_bionic-lib", "windows-lib"},
Blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
@ -197,11 +194,9 @@ cc_library_headers {
func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) { func TestCcLibraryHeadersOsSpecficHeaderLibsExportHeaderLibHeaders(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props", Description: "cc_library_headers test with os-specific header_libs and export_header_lib_headers props",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory, StubbedBuildDefinitions: []string{"android-lib", "exported-lib"},
Filesystem: map[string]string{},
StubbedBuildDefinitions: []string{"android-lib", "exported-lib"},
Blueprint: soongCcLibraryPreamble + ` Blueprint: soongCcLibraryPreamble + `
cc_library_headers { cc_library_headers {
name: "android-lib", name: "android-lib",
@ -232,10 +227,8 @@ cc_library_headers {
func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) { func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props", Description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
Filesystem: map[string]string{},
Blueprint: soongCcLibraryPreamble + `cc_library_headers { Blueprint: soongCcLibraryPreamble + `cc_library_headers {
name: "foo_headers", name: "foo_headers",
export_system_include_dirs: [ export_system_include_dirs: [
@ -291,9 +284,7 @@ func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) {
func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) { func TestCcLibraryHeadersNoCrtIgnored(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers test", Description: "cc_library_headers test",
ModuleTypeUnderTest: "cc_library_headers",
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory,
Filesystem: map[string]string{ Filesystem: map[string]string{
"lib-1/lib1a.h": "", "lib-1/lib1a.h": "",
"lib-1/lib1b.h": "", "lib-1/lib1b.h": "",
@ -324,11 +315,9 @@ cc_library_headers {
func TestCcLibraryHeadersExportedStaticLibHeadersReexported(t *testing.T) { func TestCcLibraryHeadersExportedStaticLibHeadersReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers exported_static_lib_headers is reexported", Description: "cc_library_headers exported_static_lib_headers is reexported",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory, StubbedBuildDefinitions: []string{"foo_export"},
Filesystem: map[string]string{},
StubbedBuildDefinitions: []string{"foo_export"},
Blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
@ -347,11 +336,9 @@ cc_library_headers {
func TestCcLibraryHeadersExportedSharedLibHeadersReexported(t *testing.T) { func TestCcLibraryHeadersExportedSharedLibHeadersReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers exported_shared_lib_headers is reexported", Description: "cc_library_headers exported_shared_lib_headers is reexported",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory, StubbedBuildDefinitions: []string{"foo_export"},
Filesystem: map[string]string{},
StubbedBuildDefinitions: []string{"foo_export"},
Blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
@ -370,11 +357,9 @@ cc_library_headers {
func TestCcLibraryHeadersExportedHeaderLibHeadersReexported(t *testing.T) { func TestCcLibraryHeadersExportedHeaderLibHeadersReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers exported_header_lib_headers is reexported", Description: "cc_library_headers exported_header_lib_headers is reexported",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory, StubbedBuildDefinitions: []string{"foo_export"},
Filesystem: map[string]string{},
StubbedBuildDefinitions: []string{"foo_export"},
Blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
@ -393,11 +378,9 @@ cc_library_headers {
func TestCcLibraryHeadersWholeStaticLibsReexported(t *testing.T) { func TestCcLibraryHeadersWholeStaticLibsReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{ runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers whole_static_libs is reexported", Description: "cc_library_headers whole_static_libs is reexported",
ModuleTypeUnderTest: "cc_library_headers", Filesystem: map[string]string{},
ModuleTypeUnderTestFactory: cc.LibraryHeaderFactory, StubbedBuildDefinitions: []string{"foo_export"},
Filesystem: map[string]string{},
StubbedBuildDefinitions: []string{"foo_export"},
Blueprint: soongCcLibraryHeadersPreamble + ` Blueprint: soongCcLibraryHeadersPreamble + `
cc_library_headers { cc_library_headers {
name: "foo_headers", name: "foo_headers",
@ -412,3 +395,25 @@ cc_library_headers {
}, },
}) })
} }
func TestPrebuiltCcLibraryHeadersWholeStaticLibsReexported(t *testing.T) {
runCcLibraryHeadersTestCase(t, Bp2buildTestCase{
Description: "cc_library_headers whole_static_libs is reexported",
Filesystem: map[string]string{
"foo/bar/Android.bp": simpleModule("cc_library_headers", "foo_headers"),
},
StubbedBuildDefinitions: []string{"foo_export"},
Blueprint: soongCcLibraryHeadersPreamble + `
cc_prebuilt_library_headers {
name: "foo_headers",
whole_static_libs: ["foo_export"],
bazel_module: { bp2build_available: true },
}
` + simpleModule("cc_library_headers", "foo_export"),
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{
"deps": `[":foo_export"]`,
}),
},
})
}

View file

@ -0,0 +1,84 @@
// Copyright 2023 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 (
"testing"
"android/soong/java"
)
func runJavaSdkLibraryImportTestCase(t *testing.T, tc Bp2buildTestCase) {
t.Helper()
RunBp2BuildTestCase(t, java.RegisterSdkLibraryBuildComponents, tc)
}
func TestJavaSdkLibraryImport(t *testing.T) {
runJavaSdkLibraryImportTestCase(t, Bp2buildTestCase{
Blueprint: `
java_sdk_library_import {
name : "foo",
public: {
current_api: "foo_current.txt",
},
system: {
current_api: "system_foo_current.txt",
},
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_sdk_library", "foo", AttrNameToString{
"public": `"foo_current.txt"`,
"system": `"system_foo_current.txt"`,
}),
},
})
}
func TestJavaSdkLibraryImportPrebuiltPrefixRemoved(t *testing.T) {
runJavaSdkLibraryImportTestCase(t, Bp2buildTestCase{
Filesystem: map[string]string{
"foobar/Android.bp": `
java_sdk_library {
name: "foo",
srcs: ["**/*.java"],
}
`,
"foobar/api/current.txt": "",
"foobar/api/system-current.txt": "",
"foobar/api/test-current.txt": "",
"foobar/api/removed.txt": "",
"foobar/api/system-removed.txt": "",
"foobar/api/test-removed.txt": "",
},
Blueprint: `
java_sdk_library_import {
name : "foo",
public: {
current_api: "foo_current.txt",
},
system: {
current_api: "system_foo_current.txt",
},
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("java_sdk_library", "foo", AttrNameToString{
"public": `"foo_current.txt"`,
"system": `"system_foo_current.txt"`,
}),
},
})
}

View file

@ -153,8 +153,13 @@ func libraryHeadersBp2Build(ctx android.TopDownMutatorContext, module *Module) {
tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module) tags := android.ApexAvailableTagsWithoutTestApexes(ctx, module)
name := module.Name()
if module.IsPrebuilt() {
name = android.RemoveOptionalPrebuiltPrefix(name)
}
ctx.CreateBazelTargetModule(props, android.CommonAttributes{ ctx.CreateBazelTargetModule(props, android.CommonAttributes{
Name: module.Name(), Name: name,
Tags: tags, Tags: tags,
}, attrs) }, attrs)
} }

View file

@ -2276,11 +2276,11 @@ func SdkLibraryFactory() android.Module {
} }
type bazelSdkLibraryAttributes struct { type bazelSdkLibraryAttributes struct {
Public bazel.StringAttribute Public *bazel.Label
System bazel.StringAttribute System *bazel.Label
Test bazel.StringAttribute Test *bazel.Label
Module_lib bazel.StringAttribute Module_lib *bazel.Label
System_server bazel.StringAttribute System_server *bazel.Label
} }
// java_sdk_library bp2build converter // java_sdk_library bp2build converter
@ -2290,13 +2290,11 @@ func (module *SdkLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext)
return return
} }
nameToAttr := make(map[string]bazel.StringAttribute) nameToAttr := make(map[string]*bazel.Label)
for _, scope := range module.getGeneratedApiScopes(ctx) { for _, scope := range module.getGeneratedApiScopes(ctx) {
apiSurfaceFile := path.Join(module.getApiDir(), scope.apiFilePrefix+"current.txt") apiSurfaceFile := android.BazelLabelForModuleSrcSingle(ctx, path.Join(module.getApiDir(), scope.apiFilePrefix+"current.txt"))
var scopeStringAttribute bazel.StringAttribute nameToAttr[scope.name] = &apiSurfaceFile
scopeStringAttribute.SetValue(apiSurfaceFile)
nameToAttr[scope.name] = scopeStringAttribute
} }
attrs := bazelSdkLibraryAttributes{ attrs := bazelSdkLibraryAttributes{
@ -2355,6 +2353,7 @@ type sdkLibraryImportProperties struct {
type SdkLibraryImport struct { type SdkLibraryImport struct {
android.ModuleBase android.ModuleBase
android.DefaultableModuleBase android.DefaultableModuleBase
android.BazelModuleBase
prebuilt android.Prebuilt prebuilt android.Prebuilt
android.ApexModuleBase android.ApexModuleBase
@ -2438,6 +2437,7 @@ func sdkLibraryImportFactory() android.Module {
android.InitPrebuiltModule(module, &[]string{""}) android.InitPrebuiltModule(module, &[]string{""})
android.InitApexModule(module) android.InitApexModule(module)
android.InitBazelModule(module)
InitJavaModule(module, android.HostAndDeviceSupported) InitJavaModule(module, android.HostAndDeviceSupported)
module.SetDefaultableHook(func(mctx android.DefaultableHookContext) { module.SetDefaultableHook(func(mctx android.DefaultableHookContext) {
@ -2448,6 +2448,33 @@ func sdkLibraryImportFactory() android.Module {
return module return module
} }
// java_sdk_library bp2build converter
func (i *SdkLibraryImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
nameToAttr := make(map[string]*bazel.Label)
for scope, props := range i.scopeProperties {
if api := proptools.String(props.Current_api); api != "" {
apiSurfaceFile := android.BazelLabelForModuleSrcSingle(ctx, api)
nameToAttr[scope.name] = &apiSurfaceFile
}
}
attrs := bazelSdkLibraryAttributes{
Public: nameToAttr["public"],
System: nameToAttr["system"],
Test: nameToAttr["test"],
Module_lib: nameToAttr["module-lib"],
System_server: nameToAttr["system-server"],
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "java_sdk_library",
Bzl_load_location: "//build/bazel/rules/java:sdk_library.bzl",
}
name := android.RemoveOptionalPrebuiltPrefix(i.Name())
ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name}, &attrs)
}
var _ PermittedPackagesForUpdatableBootJars = (*SdkLibraryImport)(nil) var _ PermittedPackagesForUpdatableBootJars = (*SdkLibraryImport)(nil)
func (module *SdkLibraryImport) PermittedPackagesForUpdatableBootJars() []string { func (module *SdkLibraryImport) PermittedPackagesForUpdatableBootJars() []string {