Replace android.imageMutator with a TransitionMutator Test: diff out/soong/Android-<product>.mk Bug: 319288033 Change-Id: Id6a50a2aacb32ecfadf7e45ada4956e85b55fef2
144 lines
5.5 KiB
Go
144 lines
5.5 KiB
Go
// 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 imageTransitionMutator.
|
|
type ImageInterface interface {
|
|
// ImageMutatorBegin is called before any other method in the ImageInterface.
|
|
ImageMutatorBegin(ctx BaseModuleContext)
|
|
|
|
// VendorVariantNeeded should return true if the module needs a vendor variant (installed on the vendor image).
|
|
VendorVariantNeeded(ctx BaseModuleContext) bool
|
|
|
|
// ProductVariantNeeded should return true if the module needs a product variant (installed on the product image).
|
|
ProductVariantNeeded(ctx BaseModuleContext) bool
|
|
|
|
// 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. "variation" is set on the receiver.
|
|
SetImageVariation(ctx BaseModuleContext, variation string)
|
|
}
|
|
|
|
const (
|
|
// VendorVariation is the variant name used for /vendor code that does not
|
|
// compile against the VNDK.
|
|
VendorVariation string = "vendor"
|
|
|
|
// ProductVariation is the variant name used for /product code that does not
|
|
// compile against the VNDK.
|
|
ProductVariation string = "product"
|
|
|
|
// 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"
|
|
)
|
|
|
|
// imageTransitionMutator creates variants for modules that implement the ImageInterface that
|
|
// allow them to build differently for each partition (recovery, core, vendor, etc.).
|
|
type imageTransitionMutator struct{}
|
|
|
|
func (imageTransitionMutator) Split(ctx BaseModuleContext) []string {
|
|
var variations []string
|
|
|
|
if m, ok := ctx.Module().(ImageInterface); ctx.Os() == Android && ok {
|
|
m.ImageMutatorBegin(ctx)
|
|
|
|
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)
|
|
}
|
|
if m.VendorVariantNeeded(ctx) {
|
|
variations = append(variations, VendorVariation)
|
|
}
|
|
if m.ProductVariantNeeded(ctx) {
|
|
variations = append(variations, ProductVariation)
|
|
}
|
|
|
|
extraVariations := m.ExtraImageVariations(ctx)
|
|
variations = append(variations, extraVariations...)
|
|
}
|
|
|
|
if len(variations) == 0 {
|
|
variations = append(variations, "")
|
|
}
|
|
|
|
return variations
|
|
}
|
|
|
|
func (imageTransitionMutator) OutgoingTransition(ctx OutgoingTransitionContext, sourceVariation string) string {
|
|
return sourceVariation
|
|
}
|
|
|
|
func (imageTransitionMutator) IncomingTransition(ctx IncomingTransitionContext, incomingVariation string) string {
|
|
if _, ok := ctx.Module().(ImageInterface); ctx.Os() != Android || !ok {
|
|
return CoreVariation
|
|
}
|
|
return incomingVariation
|
|
}
|
|
|
|
func (imageTransitionMutator) Mutate(ctx BottomUpMutatorContext, variation string) {
|
|
ctx.Module().base().setImageVariation(variation)
|
|
if m, ok := ctx.Module().(ImageInterface); ok {
|
|
m.SetImageVariation(ctx, variation)
|
|
}
|
|
}
|