Change how override_modules work with prebuilts. am: 433ea2321a

Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/11971898

Change-Id: Ifea0bd541d41ad54bae6ab54a0cc21f3a5673cc9
This commit is contained in:
Jaewoong Jung 2020-06-23 22:24:49 +00:00 committed by Automerger Merge Worker
commit 4ccb1d2012
1 changed files with 23 additions and 6 deletions

View File

@ -42,6 +42,11 @@ type OverrideModule interface {
setOverridingProperties(properties []interface{})
getOverrideModuleProperties() *OverrideModuleProperties
// Internal funcs to handle interoperability between override modules and prebuilts.
// i.e. cases where an overriding module, too, is overridden by a prebuilt module.
setOverriddenByPrebuilt(overridden bool)
getOverriddenByPrebuilt() bool
}
// Base module struct for override module types
@ -49,6 +54,8 @@ type OverrideModuleBase struct {
moduleProperties OverrideModuleProperties
overridingProperties []interface{}
overriddenByPrebuilt bool
}
type OverrideModuleProperties struct {
@ -74,6 +81,14 @@ func (o *OverrideModuleBase) GetOverriddenModuleName() string {
return proptools.String(o.moduleProperties.Base)
}
func (o *OverrideModuleBase) setOverriddenByPrebuilt(overridden bool) {
o.overriddenByPrebuilt = overridden
}
func (o *OverrideModuleBase) getOverriddenByPrebuilt() bool {
return o.overriddenByPrebuilt
}
func InitOverrideModule(m OverrideModule) {
m.setOverridingProperties(m.GetProperties())
@ -208,21 +223,19 @@ var overrideBaseDepTag overrideBaseDependencyTag
// next phase.
func overrideModuleDepsMutator(ctx BottomUpMutatorContext) {
if module, ok := ctx.Module().(OverrideModule); ok {
// Skip this overriding module if there's a prebuilt module that overrides it with prefer flag.
overriddenByPrebuilt := false
// See if there's a prebuilt module that overrides this override module with prefer flag,
// in which case we call SkipInstall on the corresponding variant later.
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
module.setOverriddenByPrebuilt(true)
return
}
})
if !overriddenByPrebuilt {
ctx.AddDependency(ctx.Module(), overrideBaseDepTag, *module.getOverrideModuleProperties().Base)
}
ctx.AddDependency(ctx.Module(), overrideBaseDepTag, *module.getOverrideModuleProperties().Base)
}
}
@ -258,6 +271,10 @@ func performOverrideMutator(ctx BottomUpMutatorContext) {
ctx.AliasVariation(variants[0])
for i, o := range overrides {
mods[i+1].(OverridableModule).override(ctx, o)
if o.getOverriddenByPrebuilt() {
// The overriding module itself, too, is overridden by a prebuilt. Skip its installation.
mods[i+1].SkipInstall()
}
}
} else if o, ok := ctx.Module().(OverrideModule); ok {
// Create a variant of the overriding module with its own name. This matches the above local