Loading android/override_module.go +15 −1 Original line number Diff line number Diff line Loading @@ -208,9 +208,23 @@ 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 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) } } } // Visits the base module added as a dependency above, checks the module type, and registers the // overriding module. Loading android/prebuilt_test.go +70 −8 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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 { Loading Loading @@ -257,11 +297,15 @@ func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) { } } type sourceModule struct { ModuleBase properties struct { type sourceModuleProperties struct { Deps []string `android:"path"` } type sourceModule struct { ModuleBase OverridableModuleBase properties sourceModuleProperties dependsOnSourceModule, dependsOnPrebuiltModule bool deps Paths src Path Loading @@ -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 } Loading @@ -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 } Loading
android/override_module.go +15 −1 Original line number Diff line number Diff line Loading @@ -208,9 +208,23 @@ 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 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) } } } // Visits the base module added as a dependency above, checks the module type, and registers the // overriding module. Loading
android/prebuilt_test.go +70 −8 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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 { Loading Loading @@ -257,11 +297,15 @@ func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) { } } type sourceModule struct { ModuleBase properties struct { type sourceModuleProperties struct { Deps []string `android:"path"` } type sourceModule struct { ModuleBase OverridableModuleBase properties sourceModuleProperties dependsOnSourceModule, dependsOnPrebuiltModule bool deps Paths src Path Loading @@ -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 } Loading @@ -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 }