summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-06-12 03:44:53 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-06-12 03:44:53 +0000
commitddac56e375f642bc1d5f72dde9be7f056928dfcd (patch)
tree8da96ffc695e1e9334718e7bb1193fa56979f4cd
parent8321caa129aa59a231f7916f3d983d80875d7d68 (diff)
parente50fe61accf04dfd4aa431ca7256d67c423e7378 (diff)
Merge "Make override modules compatible with prebuilts." into rvc-dev
-rw-r--r--android/override_module.go16
-rw-r--r--android/prebuilt_test.go78
2 files changed, 85 insertions, 9 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)
+ }
}
}
diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go
index 8ff5c4034..e8c5121f0 100644
--- a/android/prebuilt_test.go
+++ b/android/prebuilt_test.go
@@ -60,7 +60,7 @@ var prebuiltsTests = []struct {
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: false,
@@ -74,7 +74,7 @@ var prebuiltsTests = []struct {
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: true,
@@ -88,7 +88,7 @@ var prebuiltsTests = []struct {
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: false,
@@ -101,7 +101,7 @@ var prebuiltsTests = []struct {
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: true,
@@ -122,6 +122,44 @@ var prebuiltsTests = []struct {
}`,
prebuilt: true,
},
+ {
+ name: "prebuilt override not preferred",
+ modules: `
+ source {
+ name: "baz",
+ }
+
+ override_source {
+ name: "bar",
+ base: "baz",
+ }
+
+ prebuilt {
+ name: "bar",
+ prefer: false,
+ srcs: ["prebuilt_file"],
+ }`,
+ prebuilt: false,
+ },
+ {
+ name: "prebuilt override preferred",
+ modules: `
+ source {
+ name: "baz",
+ }
+
+ override_source {
+ name: "bar",
+ base: "baz",
+ }
+
+ prebuilt {
+ name: "bar",
+ prefer: true,
+ srcs: ["prebuilt_file"],
+ }`,
+ prebuilt: true,
+ },
}
func TestPrebuilts(t *testing.T) {
@@ -213,8 +251,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 {
@@ -257,11 +297,15 @@ func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) {
}
}
+type sourceModuleProperties struct {
+ Deps []string `android:"path"`
+}
+
type sourceModule struct {
ModuleBase
- properties struct {
- Deps []string `android:"path"`
- }
+ OverridableModuleBase
+
+ properties sourceModuleProperties
dependsOnSourceModule, dependsOnPrebuiltModule bool
deps Paths
src Path
@@ -271,10 +315,11 @@ func newSourceModule() Module {
m := &sourceModule{}
m.AddProperties(&m.properties)
InitAndroidModule(m)
+ 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
}
@@ -287,3 +332,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{})
+
+ InitAndroidModule(m)
+ InitOverrideModule(m)
+ return m
+}