From 3f736c9661b0a3a739e6050decf705f0a1cfab37 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Thu, 24 May 2018 13:36:56 +0900 Subject: [PATCH] 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 --- cc/cc.go | 29 ++++++++++++++++++++++++----- cc/genrule.go | 7 ++++++- 2 files changed, 30 insertions(+), 6 deletions(-) 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)