Ensure that DepIsInSameApex is not called for ExcludeFromApexContentsTag
The ExcludeFromApexContentsTag marker interface was added to avoid every implementation of DepIsInSameApex() from having to deal with the special tags, like PrebuiltDepTag. Unfortunately, when adding that not all calls to DepIsInSameApex() were protected which meant that the BootImageModule, which panics if it doesn't recognize a tag, was causing failures. This change documents the need and improves the consistency. A follow up change will add a test for this. Bug: 182992071 Test: m nothing Change-Id: If0bf9a7447ebf7a0bb0c88e91951a7220d4af45c
This commit is contained in:
22
apex/apex.go
22
apex/apex.go
@@ -854,12 +854,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) {
|
||||
if required, ok := depTag.(android.AlwaysRequireApexVariantTag); ok && required.AlwaysRequireApexVariant() {
|
||||
return true
|
||||
}
|
||||
if _, ok := depTag.(android.ExcludeFromApexContentsTag); ok {
|
||||
// The tag defines a dependency that never requires the child module to be part of the same
|
||||
// apex as the parent so it does not need an apex variant created.
|
||||
return false
|
||||
}
|
||||
if !parent.(android.DepIsInSameApex).DepIsInSameApex(mctx, child) {
|
||||
if !android.IsDepInSameApex(mctx, parent, child) {
|
||||
return false
|
||||
}
|
||||
if excludeVndkLibs {
|
||||
@@ -1003,11 +998,7 @@ func markPlatformAvailability(mctx android.BottomUpMutatorContext) {
|
||||
// If any of the dep is not available to platform, this module is also considered as being
|
||||
// not available to platform even if it has "//apex_available:platform"
|
||||
mctx.VisitDirectDeps(func(child android.Module) {
|
||||
depTag := mctx.OtherModuleDependencyTag(child)
|
||||
if _, ok := depTag.(android.ExcludeFromApexContentsTag); ok {
|
||||
return
|
||||
}
|
||||
if !am.DepIsInSameApex(mctx, child) {
|
||||
if !android.IsDepInSameApex(mctx, am, child) {
|
||||
// if the dependency crosses apex boundary, don't consider it
|
||||
return
|
||||
}
|
||||
@@ -1872,7 +1863,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
// like to record requiredNativeLibs even when
|
||||
// DepIsInSameAPex is false. We also shouldn't do
|
||||
// this for host.
|
||||
if !am.DepIsInSameApex(ctx, am) {
|
||||
//
|
||||
// TODO(jiyong): explain why the same module is passed in twice.
|
||||
// Switching the first am to parent breaks lots of tests.
|
||||
if !android.IsDepInSameApex(ctx, am, am) {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -2195,6 +2189,8 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext
|
||||
|
||||
// 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) {
|
||||
// As soon as the dependency graph crosses the APEX boundary, don't go further.
|
||||
return false
|
||||
@@ -2278,6 +2274,8 @@ func (a *apexBundle) checkApexAvailability(ctx android.ModuleContext) {
|
||||
|
||||
// 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) {
|
||||
// As soon as the dependency graph crosses the APEX boundary, don't go
|
||||
// further.
|
||||
|
Reference in New Issue
Block a user