Merge "Make override modules compatible with prebuilts." into rvc-dev
diff --git a/android/override_module.go b/android/override_module.go
index 9f5127d..7e58890 100644
--- a/android/override_module.go
+++ b/android/override_module.go
@@ -208,7 +208,21 @@
// 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 8ff5c40..e8c5121 100644
--- a/android/prebuilt_test.go
+++ b/android/prebuilt_test.go
@@ -60,7 +60,7 @@
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: false,
@@ -74,7 +74,7 @@
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: true,
@@ -88,7 +88,7 @@
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: false,
@@ -101,7 +101,7 @@
source {
name: "bar",
}
-
+
prebuilt {
name: "bar",
prefer: true,
@@ -122,6 +122,44 @@
}`,
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 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 @@
}
}
+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 @@
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) 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
+}