summaryrefslogtreecommitdiff
path: root/apex/apex.go
diff options
context:
space:
mode:
author Yu Liu <yudiliu@google.com> 2024-12-06 19:40:49 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2024-12-06 19:40:49 +0000
commitec8d5f2dce7351a340231e02fc19c586cf4059a7 (patch)
tree75c472d20a2f1f4bb7acfa07ee3e35e2c1398a27 /apex/apex.go
parent012958b69fff4317dc5e505fa88ad2593a2bea62 (diff)
parent495661b97b2679cf7fe2287c2b1c4a155d656db6 (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.go45
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
})