diff options
author | 2020-06-11 10:37:51 -0700 | |
---|---|---|
committer | 2020-06-11 16:01:30 -0700 | |
commit | fb25a64fdd00d9c2c77ed38840894c291b7a5e94 (patch) | |
tree | e45b2f7ddb45efdfa3e28ab4cce1cf99f6f4f168 /android/override_module.go | |
parent | 9e90e61ffdbf1831efb5019d2e9151b45aa001ec (diff) |
Make override modules compatible with prebuilts.
Prebuilt's prefer flag doesn't work against override modules because
override modules are sort of virtual modules that delegate all the work
to their base modules. Therefore, even if a prebuilt module suppresses
installation of its src-counterpart override module, the actual build
actions are still performed in the base module.
This change fixes it by filtering out override modules that are being
replaced by prebuilts.
Test: prebuilt_test.go
Bug: 152155285
Change-Id: I859b35c0629b2b6258dd1ec5e020ba2c77ff9612
Diffstat (limited to 'android/override_module.go')
-rw-r--r-- | android/override_module.go | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/android/override_module.go b/android/override_module.go index 9f5127dc3..7e58890d7 100644 --- a/android/override_module.go +++ b/android/override_module.go @@ -208,7 +208,21 @@ var overrideBaseDepTag overrideBaseDependencyTag // next phase. func overrideModuleDepsMutator(ctx BottomUpMutatorContext) { if module, ok := ctx.Module().(OverrideModule); ok { - ctx.AddDependency(ctx.Module(), overrideBaseDepTag, *module.getOverrideModuleProperties().Base) + // Skip this overriding module if there's a prebuilt module that overrides it with prefer flag. + overriddenByPrebuilt := false + ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(dep Module) { + prebuilt, ok := dep.(PrebuiltInterface) + if !ok { + panic("PrebuiltDepTag leads to a non-prebuilt module " + dep.Name()) + } + if prebuilt.Prebuilt().UsePrebuilt() { + overriddenByPrebuilt = true + return + } + }) + if !overriddenByPrebuilt { + ctx.AddDependency(ctx.Module(), overrideBaseDepTag, *module.getOverrideModuleProperties().Base) + } } } |