diff options
author | 2024-12-06 19:40:49 +0000 | |
---|---|---|
committer | 2024-12-06 19:40:49 +0000 | |
commit | ec8d5f2dce7351a340231e02fc19c586cf4059a7 (patch) | |
tree | 75c472d20a2f1f4bb7acfa07ee3e35e2c1398a27 /apex/apex.go | |
parent | 012958b69fff4317dc5e505fa88ad2593a2bea62 (diff) | |
parent | 495661b97b2679cf7fe2287c2b1c4a155d656db6 (diff) |
Merge "Convert checkStaticLinkingToStubLibraries to use module proxy." into main am: 495661b97b
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/3356482
Change-Id: Iec67b50ae0fbc6c3e091b9abf8d571030efe68f8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'apex/apex.go')
-rw-r--r-- | apex/apex.go | 45 |
1 files changed, 34 insertions, 11 deletions
diff --git a/apex/apex.go b/apex/apex.go index b4c583ff4..9fdb2a2a5 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1671,6 +1671,32 @@ func (a *apexBundle) WalkPayloadDeps(ctx android.BaseModuleContext, do android.P }) } +func (a *apexBundle) WalkPayloadDepsProxy(ctx android.BaseModuleContext, + do func(ctx android.BaseModuleContext, from, to android.ModuleProxy, externalDep bool) bool) { + ctx.WalkDepsProxy(func(child, parent android.ModuleProxy) bool { + if !android.OtherModuleProviderOrDefault(ctx, child, android.CommonModuleInfoKey).CanHaveApexVariants { + return false + } + // Filter-out unwanted depedendencies + depTag := ctx.OtherModuleDependencyTag(child) + if _, ok := depTag.(android.ExcludeFromApexContentsTag); ok { + return false + } + if dt, ok := depTag.(*dependencyTag); ok && !dt.payload { + return false + } + if depTag == android.RequiredDepTag { + return false + } + + ai, _ := android.OtherModuleProvider(ctx, child, android.ApexInfoProvider) + externalDep := !android.InList(ctx.ModuleName(), ai.InApexVariants) + + // Visit actually + return do(ctx, parent, child, externalDep) + }) +} + // filesystem type of the apex_payload.img inside the APEX. Currently, ext4 and f2fs are supported. type fsType int @@ -2564,21 +2590,19 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext librariesDirectlyInApex[ctx.OtherModuleName(dep)] = true }) - a.WalkPayloadDeps(ctx, func(ctx android.BaseModuleContext, 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) - + a.WalkPayloadDepsProxy(ctx, func(ctx android.BaseModuleContext, from, to android.ModuleProxy, externalDep bool) bool { + if ccInfo, ok := android.OtherModuleProvider(ctx, to, cc.CcInfoProvider); ok { // 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. - // - // It is ok to call DepIsInSameApex() directly from within WalkPayloadDeps(). - if am, ok := from.(android.DepIsInSameApex); ok && !am.DepIsInSameApex(ctx, to) { + if externalDep { // As soon as the dependency graph crosses the APEX boundary, don't go further. return false } + apexName := ctx.ModuleName() + fromName := ctx.OtherModuleName(from) + toName := ctx.OtherModuleName(to) + // 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. @@ -2588,12 +2612,11 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext return false } - isStubLibraryFromOtherApex := ccm.HasStubsVariants() && !librariesDirectlyInApex[toName] + isStubLibraryFromOtherApex := ccInfo.HasStubsVariants && !librariesDirectlyInApex[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 }) |