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
diff --git a/bp2build/cc_library_shared_conversion_test.go b/bp2build/cc_library_shared_conversion_test.go
index 921e6e3..b3dd6b1 100644
--- a/bp2build/cc_library_shared_conversion_test.go
+++ b/bp2build/cc_library_shared_conversion_test.go
@@ -32,6 +32,7 @@
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 @@
]`,
})}})
}
+
+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"`,
+ }),
+ },
+ })
+}