From 5402bbd8d74ced048dbff9717aee7779336a2fbb Mon Sep 17 00:00:00 2001 From: Jihoon Kang Date: Wed, 31 Jul 2024 18:37:49 +0000 Subject: [PATCH] Convert imageMutator to TransitionMutator Replace android.imageMutator with a TransitionMutator Test: diff out/soong/Android-.mk Bug: 319288033 Change-Id: Id6a50a2aacb32ecfadf7e45ada4956e85b55fef2 --- android/image.go | 46 +++++++++++++++++++++++++++++----------------- android/mutator.go | 2 +- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/android/image.go b/android/image.go index 0f0310701..6e5a551df 100644 --- a/android/image.go +++ b/android/image.go @@ -14,7 +14,7 @@ package android -// ImageInterface is implemented by modules that need to be split by the imageMutator. +// 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) @@ -81,18 +81,16 @@ const ( DebugRamdiskVariation string = "debug_ramdisk" ) -// imageMutator creates variants for modules that implement the ImageInterface that +// imageTransitionMutator 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 - } +type imageTransitionMutator struct{} - if m, ok := ctx.Module().(ImageInterface); ok { +func (imageTransitionMutator) Split(ctx BaseModuleContext) []string { + var variations []string + + if m, ok := ctx.Module().(ImageInterface); ctx.Os() == Android && ok { m.ImageMutatorBegin(ctx) - var variations []string - if m.CoreVariantNeeded(ctx) { variations = append(variations, CoreVariation) } @@ -117,15 +115,29 @@ func imageMutator(ctx BottomUpMutatorContext) { extraVariations := m.ExtraImageVariations(ctx) variations = append(variations, extraVariations...) + } - if len(variations) == 0 { - return - } + if len(variations) == 0 { + variations = append(variations, "") + } - mod := ctx.CreateVariations(variations...) - for i, v := range variations { - mod[i].base().setImageVariation(v) - mod[i].(ImageInterface).SetImageVariation(ctx, v) - } + 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) } } diff --git a/android/mutator.go b/android/mutator.go index b81dd124a..38fb857dd 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -149,7 +149,7 @@ var preArch = []RegisterMutatorFunc{ func registerArchMutator(ctx RegisterMutatorsContext) { ctx.BottomUpBlueprint("os", osMutator).Parallel() - ctx.BottomUp("image", imageMutator).Parallel() + ctx.Transition("image", &imageTransitionMutator{}) ctx.BottomUpBlueprint("arch", archMutator).Parallel() }