Merge "Don't magically use implementations for modules in the same apex" into main
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 17cea5e..d0494d6 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -929,7 +929,7 @@
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
- shared_libs: ["mylib2", "mylib3", "my_prebuilt_platform_lib", "my_prebuilt_platform_stub_only_lib"],
+ shared_libs: ["mylib2", "mylib3#impl", "my_prebuilt_platform_lib", "my_prebuilt_platform_stub_only_lib"],
system_shared_libs: [],
stl: "none",
apex_available: [ "myapex" ],
@@ -1025,7 +1025,7 @@
// ... and not linking to the non-stub (impl) variant of mylib2
ensureNotContains(t, mylibLdFlags, "mylib2/android_arm64_armv8-a_shared/mylib2.so")
- // Ensure that mylib is linking with the non-stub (impl) of mylib3 (because mylib3 is in the same apex)
+ // Ensure that mylib is linking with the non-stub (impl) of mylib3 (because the dependency is added with mylib3#impl)
ensureContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_apex10000/mylib3.so")
// .. and not linking to the stubs variant of mylib3
ensureNotContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_12/mylib3.so")
@@ -1201,7 +1201,7 @@
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
- shared_libs: ["mylib2", "mylib3"],
+ shared_libs: ["mylib2", "mylib3#impl"],
system_shared_libs: [],
stl: "none",
apex_available: [ "myapex" ],
@@ -1264,7 +1264,7 @@
// ... and not linking to the non-stub (impl) variant of mylib2
ensureNotContains(t, mylibLdFlags, "mylib2/android_arm64_armv8-a_shared/mylib2.so")
- // Ensure that mylib is linking with the non-stub (impl) of mylib3 (because mylib3 is in the same apex)
+ // Ensure that mylib is linking with the non-stub (impl) of mylib3 (because the dependency is added with mylib3#impl)
ensureContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_apex29/mylib3.so")
// .. and not linking to the stubs variant of mylib3
ensureNotContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_29/mylib3.so")
@@ -1797,8 +1797,8 @@
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
- system_shared_libs: ["libc", "libm"],
- shared_libs: ["libdl#27"],
+ system_shared_libs: ["libc"],
+ shared_libs: ["libdl#27", "libm#impl"],
stl: "none",
apex_available: [ "myapex" ],
}
@@ -2962,8 +2962,7 @@
private_key: "testkey.pem",
}
- // mylib in myapex will link to mylib2#current
- // mylib in otherapex will link to mylib2(non-stub) in otherapex as well
+ // mylib will link to mylib2#current
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
@@ -2997,7 +2996,7 @@
ensureContains(t, libFlags, "android_arm64_armv8-a_"+to_variant+"/"+to+".so")
}
expectLink("mylib", "shared_apex29", "mylib2", "shared_current")
- expectLink("mylib", "shared_apex30", "mylib2", "shared_apex30")
+ expectLink("mylib", "shared_apex30", "mylib2", "shared_current")
}
func TestApexMinSdkVersion_WorksWithSdkCodename(t *testing.T) {
diff --git a/cc/cc.go b/cc/cc.go
index 08a93cb9..2b011d6 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -3353,8 +3353,6 @@
}
func ShouldUseStubForApex(ctx android.ModuleContext, dep android.Module) bool {
- depName := ctx.OtherModuleName(dep)
-
inVendorOrProduct := false
bootstrap := false
if linkable, ok := ctx.Module().(LinkableInterface); !ok {
@@ -3384,9 +3382,8 @@
useStubs = isNotInPlatform && !bootstrap
} else {
- // If building for APEX, use stubs when the parent is in any APEX that
- // the child is not in.
- useStubs = !android.DirectlyInAllApexes(apexInfo, depName)
+ // If building for APEX, always use stubs (can be bypassed by depending on <dep>#impl)
+ useStubs = true
}
return useStubs