Stub/Impl selection for sdk variants

If a dependency has ndk stubs, then the sdk variant of the library
should link against the ndk stub variant and not the impl/apex_stubs variant

Unlike module-libapi, the depdendency does not go through an
@api_surfaces external repo indirection. This indirection was created to
support Multi-tree, and will likely  be removed in the future

Test: Added a unit test
Bug: 298085502
Change-Id: Ie081e153fa586b6c22db0b8e42f91149fd8e5d9b
This commit is contained in:
Spandan Das
2023-09-15 01:08:23 +00:00
parent 63acae9af1
commit 1f65f9e9bd
3 changed files with 89 additions and 0 deletions

View File

@@ -32,6 +32,7 @@ func registerCcLibrarySharedModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
ctx.RegisterModuleType("ndk_library", cc.NdkLibraryFactory)
}
func runCcLibrarySharedTestCase(t *testing.T, tc Bp2buildTestCase) {
@@ -1593,3 +1594,62 @@ cc_library_shared{
]`,
})}})
}
func TestCcLibrarySdkVariantUsesStubs(t *testing.T) {
runCcLibrarySharedTestCase(t, Bp2buildTestCase{
Description: "cc_library_shared stubs",
ModuleTypeUnderTest: "cc_library_shared",
ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared {
name: "libUsesSdk",
sdk_version: "current",
shared_libs: [
"libNoStubs",
"libHasApexStubs",
"libHasApexAndNdkStubs",
]
}
cc_library_shared {
name: "libNoStubs",
bazel_module: { bp2build_available: false },
}
cc_library_shared {
name: "libHasApexStubs",
stubs: { symbol_file: "a.map.txt", versions: ["28", "29", "current"] },
bazel_module: { bp2build_available: false },
apex_available: ["apex_a"],
}
cc_library_shared {
name: "libHasApexAndNdkStubs",
stubs: { symbol_file: "b.map.txt", versions: ["28", "29", "current"] },
bazel_module: { bp2build_available: false },
apex_available: ["apex_b"],
}
ndk_library {
name: "libHasApexAndNdkStubs",
bazel_module: { bp2build_available: false },
}
`,
ExpectedBazelTargets: []string{
MakeBazelTarget("cc_library_shared", "libUsesSdk", AttrNameToString{
"implementation_dynamic_deps": `[":libNoStubs"] + select({
"//build/bazel/rules/apex:system": [
"@api_surfaces//module-libapi/current:libHasApexStubs",
"@api_surfaces//module-libapi/current:libHasApexAndNdkStubs",
],
"//build/bazel/rules/apex:unbundled_app": [
":libHasApexStubs",
"//.:libHasApexAndNdkStubs.ndk_stub_libs",
],
"//conditions:default": [
":libHasApexStubs",
":libHasApexAndNdkStubs",
],
})`,
"local_includes": `["."]`,
"sdk_version": `"current"`,
}),
},
})
}