diff --git a/apex/apex.go b/apex/apex.go index 44aab605b..fa71ffa5c 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1860,44 +1860,6 @@ func (a *apexBundle) checkUpdatable(ctx android.ModuleContext) { } } -// Ensures that a lib providing stub isn't statically linked -func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext) { - // Practically, we only care about regular APEXes on the device. - if ctx.Host() || a.testApex || a.vndkApex { - return - } - - a.walkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool { - if ccm, ok := to.(*cc.Module); ok { - apexName := ctx.ModuleName() - fromName := ctx.OtherModuleName(from) - toName := ctx.OtherModuleName(to) - - // If `to` is not actually in the same APEX as `from` then it does not need apex_available and neither - // do any of its dependencies. - if am, ok := from.(android.DepIsInSameApex); ok && !am.DepIsInSameApex(ctx, to) { - // As soon as the dependency graph crosses the APEX boundary, don't go further. - return false - } - - // The dynamic linker and crash_dump tool in the runtime APEX is the only exception to this rule. - // It can't make the static dependencies dynamic because it can't - // do the dynamic linking for itself. - if apexName == "com.android.runtime" && (fromName == "linker" || fromName == "crash_dump") { - return false - } - - isStubLibraryFromOtherApex := ccm.HasStubsVariants() && !android.DirectlyInApex(apexName, toName) - if isStubLibraryFromOtherApex && !externalDep { - ctx.ModuleErrorf("%q required by %q is a native library providing stub. "+ - "It shouldn't be included in this APEX via static linking. Dependency path: %s", to.String(), fromName, ctx.GetPathString(false)) - } - - } - return true - }) -} - func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { buildFlattenedAsDefault := ctx.Config().FlattenApex() && !ctx.Config().UnbundledBuild() switch a.properties.ApexType { @@ -1935,7 +1897,6 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.checkApexAvailability(ctx) a.checkUpdatable(ctx) - a.checkStaticLinkingToStubLibraries(ctx) handleSpecialLibs := !android.Bool(a.properties.Ignore_system_library_special_case) diff --git a/apex/apex_test.go b/apex/apex_test.go index 81df02a05..dc6986244 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -4774,42 +4774,6 @@ func TestTestFor(t *testing.T) { ensureNotContains(t, ldFlags, "mylib/android_arm64_armv8-a_shared_1/mylib.so") } -func TestNoStaticLinkingToStubsLib(t *testing.T) { - testApexError(t, `.*required by "mylib" is a native library providing stub.*`, ` - apex { - name: "myapex", - key: "myapex.key", - native_shared_libs: ["mylib"], - } - - apex_key { - name: "myapex.key", - public_key: "testkey.avbpubkey", - private_key: "testkey.pem", - } - - cc_library { - name: "mylib", - srcs: ["mylib.cpp"], - static_libs: ["otherlib"], - system_shared_libs: [], - stl: "none", - apex_available: [ "myapex" ], - } - - cc_library { - name: "otherlib", - srcs: ["mylib.cpp"], - system_shared_libs: [], - stl: "none", - stubs: { - versions: ["1", "2", "3"], - }, - apex_available: [ "myapex" ], - } - `) -} - func TestMain(m *testing.M) { run := func() int { setUp() diff --git a/cc/cc.go b/cc/cc.go index 4128fa7c0..02c487902 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -2862,9 +2862,6 @@ func (c *Module) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Modu return false } } - } else if ctx.OtherModuleDependencyTag(dep) == llndkImplDep { - // We don't track beyond LLNDK - return false } return true }