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 +66 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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 { Loading Loading @@ -300,11 +340,15 @@ func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) { } } type sourceModule struct { ModuleBase properties struct { type sourceModuleProperties struct { Deps []string `android:"path,arch_variant"` } type sourceModule struct { ModuleBase OverridableModuleBase properties sourceModuleProperties dependsOnSourceModule, dependsOnPrebuiltModule bool deps Paths src Path Loading @@ -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 } Loading @@ -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 } 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 +66 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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 { Loading Loading @@ -300,11 +340,15 @@ func (p *prebuiltModule) OutputFiles(tag string) (Paths, error) { } } type sourceModule struct { ModuleBase properties struct { type sourceModuleProperties struct { Deps []string `android:"path,arch_variant"` } type sourceModule struct { ModuleBase OverridableModuleBase properties sourceModuleProperties dependsOnSourceModule, dependsOnPrebuiltModule bool deps Paths src Path Loading @@ -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 } Loading @@ -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 }