diff --git a/cc/cc.go b/cc/cc.go index a885c91b2..e261d40e3 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -1554,16 +1554,35 @@ func imageMutator(mctx android.BottomUpMutatorContext) { } if genrule, ok := mctx.Module().(*genrule.Module); ok { - if props, ok := genrule.Extra.(*VendorProperties); ok { + if props, ok := genrule.Extra.(*GenruleExtraProperties); ok { + var coreVariantNeeded bool = false + var vendorVariantNeeded bool = false + var recoveryVariantNeeded bool = false if mctx.DeviceConfig().VndkVersion() == "" { - mctx.CreateVariations(coreMode) + coreVariantNeeded = true } else if Bool(props.Vendor_available) { - mctx.CreateVariations(coreMode, vendorMode) + coreVariantNeeded = true + vendorVariantNeeded = true } else if mctx.SocSpecific() || mctx.DeviceSpecific() { - mctx.CreateVariations(vendorMode) + vendorVariantNeeded = true } else { - mctx.CreateVariations(coreMode) + coreVariantNeeded = true } + if Bool(props.Recovery_available) { + recoveryVariantNeeded = true + } + + var variants []string + if coreVariantNeeded { + variants = append(variants, coreMode) + } + if vendorVariantNeeded { + variants = append(variants, vendorMode) + } + if recoveryVariantNeeded { + variants = append(variants, recoveryMode) + } + mctx.CreateVariations(variants...) } } diff --git a/cc/genrule.go b/cc/genrule.go index 51c0d1628..a67299271 100644 --- a/cc/genrule.go +++ b/cc/genrule.go @@ -23,13 +23,18 @@ func init() { android.RegisterModuleType("cc_genrule", genRuleFactory) } +type GenruleExtraProperties struct { + Vendor_available *bool + Recovery_available *bool +} + // cc_genrule is a genrule that can depend on other cc_* objects. // The cmd may be run multiple times, once for each of the different arch/etc // variations. func genRuleFactory() android.Module { module := genrule.NewGenRule() - module.Extra = &VendorProperties{} + module.Extra = &GenruleExtraProperties{} module.AddProperties(module.Extra) android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibBoth)