Implement the 1-variant fallback in the image mutator
Some of the modules that deal with different image variants are not
straightforward to replace with equivalent properties. Just reimplement
the 1-variant fallback in the image mutator so that we don't have
to worry about it for the moment.
Having only the image mutator and not the arch/os mutators implement
this should prevent the "more fallbacks than before" issues that I saw
when converting all 3 of them to have this behavior.
Bug: 372091092
Test: m nothing
Change-Id: I9588e0bb9436ac5ddad750c1e70d883d5fe07630
diff --git a/android/image.go b/android/image.go
index 012267a..e8b6352 100644
--- a/android/image.go
+++ b/android/image.go
@@ -98,16 +98,47 @@
DebugRamdiskVariation string = "debug_ramdisk"
)
+type imageInterfaceContextAdapter struct {
+ IncomingTransitionContext
+ kind moduleKind
+}
+
+var _ ImageInterfaceContext = (*imageInterfaceContextAdapter)(nil)
+
+func (e *imageInterfaceContextAdapter) Platform() bool {
+ return e.kind == platformModule
+}
+
+func (e *imageInterfaceContextAdapter) DeviceSpecific() bool {
+ return e.kind == deviceSpecificModule
+}
+
+func (e *imageInterfaceContextAdapter) SocSpecific() bool {
+ return e.kind == socSpecificModule
+}
+
+func (e *imageInterfaceContextAdapter) ProductSpecific() bool {
+ return e.kind == productSpecificModule
+}
+
+func (e *imageInterfaceContextAdapter) SystemExtSpecific() bool {
+ return e.kind == systemExtSpecificModule
+}
+
+func imageMutatorBeginMutator(ctx BottomUpMutatorContext) {
+ if m, ok := ctx.Module().(ImageInterface); ok && ctx.Os() == Android {
+ m.ImageMutatorBegin(ctx)
+ }
+}
+
// 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 {
+func getImageVariations(ctx ImageInterfaceContext) []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)
}
@@ -141,6 +172,10 @@
return variations
}
+func (imageTransitionMutator) Split(ctx BaseModuleContext) []string {
+ return getImageVariations(ctx)
+}
+
func (imageTransitionMutator) OutgoingTransition(ctx OutgoingTransitionContext, sourceVariation string) string {
return sourceVariation
}
@@ -149,6 +184,16 @@
if _, ok := ctx.Module().(ImageInterface); ctx.Os() != Android || !ok {
return CoreVariation
}
+ variations := getImageVariations(&imageInterfaceContextAdapter{
+ IncomingTransitionContext: ctx,
+ kind: determineModuleKind(ctx.Module().base(), ctx),
+ })
+ // If there's only 1 possible variation, use that. This is a holdover from when blueprint,
+ // when adding dependencies, would use the only variant of a module regardless of its variations
+ // if only 1 variant existed.
+ if len(variations) == 1 {
+ return variations[0]
+ }
return incomingVariation
}