Add recovery_available to cc_genrule
recovery_available property is required in cc_genrule. Specifically,
we will mark libminijail as recovery_available:true as part of building
adbd and other stuffs for recovery. Some source code of libminijail is
created via cc_genrule, so we need recovery_available in the module
type.
Bug: 79146551
Test: m -j
Change-Id: I0cf0d9b1004dda055373573e5c5a7debd112685f
diff --git a/cc/cc.go b/cc/cc.go
index a885c91..e261d40 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1554,16 +1554,35 @@
}
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 51c0d16..a672992 100644
--- a/cc/genrule.go
+++ b/cc/genrule.go
@@ -23,13 +23,18 @@
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)