Loading bp2build/cc_library_conversion_test.go +59 −0 Original line number Diff line number Diff line Loading @@ -5178,6 +5178,7 @@ ndk_library { ExpectedBazelTargets: []string{ MakeBazelTarget("cc_stub_suite", "libfoo.ndk_stub_libs", AttrNameToString{ "api_surface": `"publicapi"`, "included_in_ndk": `True`, "soname": `"libfoo.so"`, "source_library_label": `"//:libfoo"`, "symbol_file": `"libfoo.map.txt"`, Loading Loading @@ -5305,3 +5306,61 @@ cc_library_static { }, }) } func TestPropertiesIfStubLibraryIsInNdk(t *testing.T) { tc := Bp2buildTestCase{ Description: "If an equivalent ndk_library exists, set included_in_ndk=true for module-libapi stubs", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` // libfoo is an ndk library and contributes to module-libapi cc_library { name: "libfoo", stubs: {symbol_file: "libfoo.map.txt"}, } ndk_library { name: "libfoo", first_version: "29", symbol_file: "libfoo.map.txt", } // libbar is not an ndk library, but contributes to module-libapi cc_library { name: "libbar", stubs: {symbol_file: "libbar.map.txt"}, } `, StubbedBuildDefinitions: []string{"libfoo.ndk"}, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "libfoo_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "libfoo", AttrNameToString{ "local_includes": `["."]`, "stubs_symbol_file": `"libfoo.map.txt"`, }), MakeBazelTarget("cc_stub_suite", "libfoo_stub_libs", AttrNameToString{ "api_surface": `"module-libapi"`, "soname": `"libfoo.so"`, "source_library_label": `"//:libfoo"`, "symbol_file": `"libfoo.map.txt"`, "versions": `["current"]`, "included_in_ndk": `True`, }), MakeBazelTarget("cc_library_static", "libbar_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "libbar", AttrNameToString{ "local_includes": `["."]`, "stubs_symbol_file": `"libbar.map.txt"`, }), MakeBazelTarget("cc_stub_suite", "libbar_stub_libs", AttrNameToString{ "api_surface": `"module-libapi"`, "soname": `"libbar.so"`, "source_library_label": `"//:libbar"`, "symbol_file": `"libbar.map.txt"`, "versions": `["current"]`, }), }, } runCcLibraryTestCase(t, tc) } bp2build/conversion.go +0 −11 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ import ( rust_config "android/soong/rust/config" "android/soong/starlark_fmt" "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) Loading @@ -34,19 +33,9 @@ func createSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) ( files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. files = append(files, newFile("android", "constants.bzl", android.BazelCcToolchainVars(cfg))) // Visit all modules to determine the list of ndk libraries // This list will be used to add additional flags for cc stub generation ndkLibsStringFormatted := []string{} ctx.Context().VisitAllModules(func(m blueprint.Module) { if ctx.Context().ModuleType(m) == "ndk_library" { ndkLibsStringFormatted = append(ndkLibsStringFormatted, fmt.Sprintf(`"%s"`, m.Name())) // name will be `"libc.ndk"` } }) files = append(files, newFile("cc_toolchain", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. files = append(files, newFile("cc_toolchain", "config_constants.bzl", cc_config.BazelCcToolchainVars(cfg))) files = append(files, newFile("cc_toolchain", "sanitizer_constants.bzl", cc.BazelCcSanitizerToolchainVars(cfg))) files = append(files, newFile("cc_toolchain", "ndk_libs.bzl", fmt.Sprintf("ndk_libs = [%v]", strings.Join(ndkLibsStringFormatted, ", ")))) files = append(files, newFile("java_toolchain", GeneratedBuildFileName, "")) // Creates a //java_toolchain package. files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) Loading bp2build/conversion_test.go +0 −4 Original line number Diff line number Diff line Loading @@ -105,10 +105,6 @@ func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { dir: "cc_toolchain", basename: "config_constants.bzl", }, { dir: "cc_toolchain", basename: "ndk_libs.bzl", }, { dir: "cc_toolchain", basename: "sanitizer_constants.bzl", Loading cc/library.go +11 −0 Original line number Diff line number Diff line Loading @@ -500,6 +500,10 @@ func createStubsBazelTargetIfNeeded(ctx android.Bp2buildMutatorContext, m *Modul Deps: baseAttributes.deps, Api_surface: proptools.StringPtr("module-libapi"), } if _, isNdk := ctx.ModuleFromName(m.Name() + ".ndk"); isNdk { stubSuitesAttrs.Included_in_ndk = proptools.BoolPtr(true) } ctx.CreateBazelTargetModule(stubSuitesProps, android.CommonAttributes{ Name: m.Name() + "_stub_libs", // TODO: b/303307456 - Remove this when data is properly supported in cc rules. Loading Loading @@ -3023,6 +3027,13 @@ type bazelCcStubSuiteAttributes struct { Soname *string Deps bazel.LabelListAttribute Api_surface *string // Unless the library is in the NDK, module-libapi stubs should *not* include the public symbols // Soong uses a global variable to determine if the library is in the NDK // Since Bazel does not have global analysis, create an explicit property // This property is only relevant if `api_surface = module-libapi` // https://cs.android.com/android/_/android/platform/build/soong/+/main:cc/library.go;l=1214-1219;drc=7123cc5370a38983ee6325b5f5f6df19f4e4f10b;bpv=1;bpt=0 Included_in_ndk *bool } type bazelCcHeaderAbiCheckerAttributes struct { Loading cc/ndk_library.go +4 −3 Original line number Diff line number Diff line Loading @@ -597,6 +597,7 @@ func ndkLibraryBp2build(ctx android.Bp2buildMutatorContext, c *Module) { Symbol_file: proptools.StringPtr(symbolFileLabel.Label), Soname: proptools.StringPtr(sourceLibraryName + ".so"), Api_surface: proptools.StringPtr(android.PublicApi.String()), Included_in_ndk: proptools.BoolPtr(true), } if sourceLibrary, exists := ctx.ModuleFromName(sourceLibraryName); exists { // the source library might not exist in minimal/unbuildable branches like kernel-build-tools. Loading Loading
bp2build/cc_library_conversion_test.go +59 −0 Original line number Diff line number Diff line Loading @@ -5178,6 +5178,7 @@ ndk_library { ExpectedBazelTargets: []string{ MakeBazelTarget("cc_stub_suite", "libfoo.ndk_stub_libs", AttrNameToString{ "api_surface": `"publicapi"`, "included_in_ndk": `True`, "soname": `"libfoo.so"`, "source_library_label": `"//:libfoo"`, "symbol_file": `"libfoo.map.txt"`, Loading Loading @@ -5305,3 +5306,61 @@ cc_library_static { }, }) } func TestPropertiesIfStubLibraryIsInNdk(t *testing.T) { tc := Bp2buildTestCase{ Description: "If an equivalent ndk_library exists, set included_in_ndk=true for module-libapi stubs", ModuleTypeUnderTest: "cc_library", ModuleTypeUnderTestFactory: cc.LibraryFactory, Blueprint: ` // libfoo is an ndk library and contributes to module-libapi cc_library { name: "libfoo", stubs: {symbol_file: "libfoo.map.txt"}, } ndk_library { name: "libfoo", first_version: "29", symbol_file: "libfoo.map.txt", } // libbar is not an ndk library, but contributes to module-libapi cc_library { name: "libbar", stubs: {symbol_file: "libbar.map.txt"}, } `, StubbedBuildDefinitions: []string{"libfoo.ndk"}, ExpectedBazelTargets: []string{ MakeBazelTarget("cc_library_static", "libfoo_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "libfoo", AttrNameToString{ "local_includes": `["."]`, "stubs_symbol_file": `"libfoo.map.txt"`, }), MakeBazelTarget("cc_stub_suite", "libfoo_stub_libs", AttrNameToString{ "api_surface": `"module-libapi"`, "soname": `"libfoo.so"`, "source_library_label": `"//:libfoo"`, "symbol_file": `"libfoo.map.txt"`, "versions": `["current"]`, "included_in_ndk": `True`, }), MakeBazelTarget("cc_library_static", "libbar_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, }), MakeBazelTarget("cc_library_shared", "libbar", AttrNameToString{ "local_includes": `["."]`, "stubs_symbol_file": `"libbar.map.txt"`, }), MakeBazelTarget("cc_stub_suite", "libbar_stub_libs", AttrNameToString{ "api_surface": `"module-libapi"`, "soname": `"libbar.so"`, "source_library_label": `"//:libbar"`, "symbol_file": `"libbar.map.txt"`, "versions": `["current"]`, }), }, } runCcLibraryTestCase(t, tc) }
bp2build/conversion.go +0 −11 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ import ( rust_config "android/soong/rust/config" "android/soong/starlark_fmt" "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) Loading @@ -34,19 +33,9 @@ func createSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) ( files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. files = append(files, newFile("android", "constants.bzl", android.BazelCcToolchainVars(cfg))) // Visit all modules to determine the list of ndk libraries // This list will be used to add additional flags for cc stub generation ndkLibsStringFormatted := []string{} ctx.Context().VisitAllModules(func(m blueprint.Module) { if ctx.Context().ModuleType(m) == "ndk_library" { ndkLibsStringFormatted = append(ndkLibsStringFormatted, fmt.Sprintf(`"%s"`, m.Name())) // name will be `"libc.ndk"` } }) files = append(files, newFile("cc_toolchain", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. files = append(files, newFile("cc_toolchain", "config_constants.bzl", cc_config.BazelCcToolchainVars(cfg))) files = append(files, newFile("cc_toolchain", "sanitizer_constants.bzl", cc.BazelCcSanitizerToolchainVars(cfg))) files = append(files, newFile("cc_toolchain", "ndk_libs.bzl", fmt.Sprintf("ndk_libs = [%v]", strings.Join(ndkLibsStringFormatted, ", ")))) files = append(files, newFile("java_toolchain", GeneratedBuildFileName, "")) // Creates a //java_toolchain package. files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) Loading
bp2build/conversion_test.go +0 −4 Original line number Diff line number Diff line Loading @@ -105,10 +105,6 @@ func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { dir: "cc_toolchain", basename: "config_constants.bzl", }, { dir: "cc_toolchain", basename: "ndk_libs.bzl", }, { dir: "cc_toolchain", basename: "sanitizer_constants.bzl", Loading
cc/library.go +11 −0 Original line number Diff line number Diff line Loading @@ -500,6 +500,10 @@ func createStubsBazelTargetIfNeeded(ctx android.Bp2buildMutatorContext, m *Modul Deps: baseAttributes.deps, Api_surface: proptools.StringPtr("module-libapi"), } if _, isNdk := ctx.ModuleFromName(m.Name() + ".ndk"); isNdk { stubSuitesAttrs.Included_in_ndk = proptools.BoolPtr(true) } ctx.CreateBazelTargetModule(stubSuitesProps, android.CommonAttributes{ Name: m.Name() + "_stub_libs", // TODO: b/303307456 - Remove this when data is properly supported in cc rules. Loading Loading @@ -3023,6 +3027,13 @@ type bazelCcStubSuiteAttributes struct { Soname *string Deps bazel.LabelListAttribute Api_surface *string // Unless the library is in the NDK, module-libapi stubs should *not* include the public symbols // Soong uses a global variable to determine if the library is in the NDK // Since Bazel does not have global analysis, create an explicit property // This property is only relevant if `api_surface = module-libapi` // https://cs.android.com/android/_/android/platform/build/soong/+/main:cc/library.go;l=1214-1219;drc=7123cc5370a38983ee6325b5f5f6df19f4e4f10b;bpv=1;bpt=0 Included_in_ndk *bool } type bazelCcHeaderAbiCheckerAttributes struct { Loading
cc/ndk_library.go +4 −3 Original line number Diff line number Diff line Loading @@ -597,6 +597,7 @@ func ndkLibraryBp2build(ctx android.Bp2buildMutatorContext, c *Module) { Symbol_file: proptools.StringPtr(symbolFileLabel.Label), Soname: proptools.StringPtr(sourceLibraryName + ".so"), Api_surface: proptools.StringPtr(android.PublicApi.String()), Included_in_ndk: proptools.BoolPtr(true), } if sourceLibrary, exists := ctx.ModuleFromName(sourceLibraryName); exists { // the source library might not exist in minimal/unbuildable branches like kernel-build-tools. Loading