123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- // Copyright 2019 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 android
- // ImageInterface is implemented by modules that need to be split by the imageMutator.
- type ImageInterface interface {
- // ImageMutatorBegin is called before any other method in the ImageInterface.
- ImageMutatorBegin(ctx BaseModuleContext)
- // CoreVariantNeeded should return true if the module needs a core variant (installed on the system image).
- CoreVariantNeeded(ctx BaseModuleContext) bool
- // RamdiskVariantNeeded should return true if the module needs a ramdisk variant (installed on the
- // ramdisk partition).
- RamdiskVariantNeeded(ctx BaseModuleContext) bool
- // VendorRamdiskVariantNeeded should return true if the module needs a vendor ramdisk variant (installed on the
- // vendor ramdisk partition).
- VendorRamdiskVariantNeeded(ctx BaseModuleContext) bool
- // DebugRamdiskVariantNeeded should return true if the module needs a debug ramdisk variant (installed on the
- // debug ramdisk partition: $(PRODUCT_OUT)/debug_ramdisk).
- DebugRamdiskVariantNeeded(ctx BaseModuleContext) bool
- // RecoveryVariantNeeded should return true if the module needs a recovery variant (installed on the
- // recovery partition).
- RecoveryVariantNeeded(ctx BaseModuleContext) bool
- // ExtraImageVariations should return a list of the additional variations needed for the module. After the
- // variants are created the SetImageVariation method will be called on each newly created variant with the
- // its variation.
- ExtraImageVariations(ctx BaseModuleContext) []string
- // SetImageVariation is called for each newly created image variant. The receiver is the original
- // module, "variation" is the name of the newly created variant and "module" is the newly created
- // variant itself.
- SetImageVariation(ctx BaseModuleContext, variation string, module Module)
- }
- const (
- // CoreVariation is the variant used for framework-private libraries, or
- // SDK libraries. (which framework-private libraries can use), which
- // will be installed to the system image.
- CoreVariation string = ""
- // RecoveryVariation means a module to be installed to recovery image.
- RecoveryVariation string = "recovery"
- // RamdiskVariation means a module to be installed to ramdisk image.
- RamdiskVariation string = "ramdisk"
- // VendorRamdiskVariation means a module to be installed to vendor ramdisk image.
- VendorRamdiskVariation string = "vendor_ramdisk"
- // DebugRamdiskVariation means a module to be installed to debug ramdisk image.
- DebugRamdiskVariation string = "debug_ramdisk"
- )
- // imageMutator creates variants for modules that implement the ImageInterface that
- // allow them to build differently for each partition (recovery, core, vendor, etc.).
- func imageMutator(ctx BottomUpMutatorContext) {
- if ctx.Os() != Android {
- return
- }
- if m, ok := ctx.Module().(ImageInterface); ok {
- m.ImageMutatorBegin(ctx)
- var variations []string
- if m.CoreVariantNeeded(ctx) {
- variations = append(variations, CoreVariation)
- }
- if m.RamdiskVariantNeeded(ctx) {
- variations = append(variations, RamdiskVariation)
- }
- if m.VendorRamdiskVariantNeeded(ctx) {
- variations = append(variations, VendorRamdiskVariation)
- }
- if m.DebugRamdiskVariantNeeded(ctx) {
- variations = append(variations, DebugRamdiskVariation)
- }
- if m.RecoveryVariantNeeded(ctx) {
- variations = append(variations, RecoveryVariation)
- }
- extraVariations := m.ExtraImageVariations(ctx)
- variations = append(variations, extraVariations...)
- if len(variations) == 0 {
- return
- }
- mod := ctx.CreateVariations(variations...)
- for i, v := range variations {
- mod[i].base().setImageVariation(v)
- m.SetImageVariation(ctx, v, mod[i])
- }
- }
- }
|