// Copyright 2017 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cc import ( "android/soong/android" "android/soong/genrule" ) 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() extra := &GenruleExtraProperties{} module.Extra = extra module.ImageInterface = extra module.AddProperties(module.Extra) android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibBoth) android.InitApexModule(module) return module } var _ android.ImageInterface = (*GenruleExtraProperties)(nil) func (g *GenruleExtraProperties) ImageMutatorBegin(ctx android.BaseModuleContext) {} func (g *GenruleExtraProperties) CoreVariantNeeded(ctx android.BaseModuleContext) bool { if ctx.DeviceConfig().VndkVersion() == "" { return true } return Bool(g.Vendor_available) || !(ctx.SocSpecific() || ctx.DeviceSpecific()) } func (g *GenruleExtraProperties) RecoveryVariantNeeded(ctx android.BaseModuleContext) bool { if Bool(g.Recovery_available) { primaryArch := ctx.Config().DevicePrimaryArchType() moduleArch := ctx.Target().Arch.ArchType return moduleArch == primaryArch } return false } func (g *GenruleExtraProperties) ExtraImageVariations(ctx android.BaseModuleContext) []string { if ctx.DeviceConfig().VndkVersion() == "" { return nil } if Bool(g.Vendor_available) || ctx.SocSpecific() || ctx.DeviceSpecific() { var variants []string variants = append(variants, VendorVariationPrefix+ctx.DeviceConfig().PlatformVndkVersion()) if vndkVersion := ctx.DeviceConfig().VndkVersion(); vndkVersion != "current" { variants = append(variants, VendorVariationPrefix+vndkVersion) } return variants } return nil } func (g *GenruleExtraProperties) SetImageVariation(ctx android.BaseModuleContext, variation string, module android.Module) { }