Merge "Make override modules compatible with prebuilts." am: 3d14ab7b2b

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

Change-Id: I1a88cfc4807bc75d527d9b17541040fbad25094b
This commit is contained in:
Jaewoong Jung 2020-06-12 01:27:05 +00:00 committed by Automerger Merge Worker
commit 3bec2b0468
2 changed files with 81 additions and 5 deletions

View file

@ -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)
}
}
}

View file

@ -155,6 +155,44 @@ var prebuiltsTests = []struct {
}`,
prebuilt: []OsClass{Host},
},
{
name: "prebuilt override not preferred",
modules: `
source {
name: "baz",
}
override_source {
name: "bar",
base: "baz",
}
prebuilt {
name: "bar",
prefer: false,
srcs: ["prebuilt_file"],
}`,
prebuilt: nil,
},
{
name: "prebuilt override preferred",
modules: `
source {
name: "baz",
}
override_source {
name: "bar",
base: "baz",
}
prebuilt {
name: "bar",
prefer: true,
srcs: ["prebuilt_file"],
}`,
prebuilt: []OsClass{Device, Host},
},
}
func TestPrebuilts(t *testing.T) {
@ -256,8 +294,10 @@ func TestPrebuilts(t *testing.T) {
func registerTestPrebuiltBuildComponents(ctx RegistrationContext) {
ctx.RegisterModuleType("prebuilt", newPrebuiltModule)
ctx.RegisterModuleType("source", newSourceModule)
ctx.RegisterModuleType("override_source", newOverrideSourceModule)
RegisterPrebuiltMutators(ctx)
ctx.PostDepsMutators(RegisterOverridePostDepsMutators)
}
type prebuiltModule struct {
@ -300,11 +340,15 @@ func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) {
}
}
type sourceModuleProperties struct {
Deps []string `android:"path,arch_variant"`
}
type sourceModule struct {
ModuleBase
properties struct {
Deps []string `android:"path,arch_variant"`
}
OverridableModuleBase
properties sourceModuleProperties
dependsOnSourceModule, dependsOnPrebuiltModule bool
deps Paths
src Path
@ -314,10 +358,11 @@ func newSourceModule() Module {
m := &sourceModule{}
m.AddProperties(&m.properties)
InitAndroidArchModule(m, HostAndDeviceDefault, MultilibCommon)
InitOverridableModule(m, nil)
return m
}
func (s *sourceModule) DepsMutator(ctx BottomUpMutatorContext) {
func (s *sourceModule) OverridablePropertiesDepsMutator(ctx BottomUpMutatorContext) {
// s.properties.Deps are annotated with android:path, so they are
// automatically added to the dependency by pathDeps mutator
}
@ -330,3 +375,20 @@ func (s *sourceModule) GenerateAndroidBuildActions(ctx ModuleContext) {
func (s *sourceModule) Srcs() Paths {
return Paths{s.src}
}
type overrideSourceModule struct {
ModuleBase
OverrideModuleBase
}
func (o *overrideSourceModule) GenerateAndroidBuildActions(_ ModuleContext) {
}
func newOverrideSourceModule() Module {
m := &overrideSourceModule{}
m.AddProperties(&sourceModuleProperties{})
InitAndroidArchModule(m, HostAndDeviceDefault, MultilibCommon)
InitOverrideModule(m)
return m
}