Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33e0c810 authored by Colin Cross's avatar Colin Cross
Browse files

Convert orderfile mutators to TransitionMutator

Convert orderfileDepsMutator and orderfileMutator to a TransitionMutator
as a step towards variants-on-demand.

Bug: 319288033
Test: orderfile_test.go

Change-Id: I27df65b7264a5b059a900e7ea04c18dfb2787a84
parent 6ac83a8f
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -73,8 +73,7 @@ func RegisterCCBuildComponents(ctx android.RegistrationContext) {
		ctx.TopDown("afdo_deps", afdoDepsMutator)
		ctx.BottomUp("afdo", afdoMutator).Parallel()

		ctx.TopDown("orderfile_deps", orderfileDepsMutator)
		ctx.BottomUp("orderfile", orderfileMutator).Parallel()
		ctx.Transition("orderfile", &orderfileTransitionMutator{})

		ctx.Transition("lto", &ltoTransitionMutator{})

+50 −53
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ package cc
import (
	"fmt"

	"github.com/google/blueprint"

	"android/soong/android"
)

@@ -190,66 +192,61 @@ func (orderfile *orderfile) flags(ctx ModuleContext, flags Flags) Flags {
	return flags
}

// Propagate profile orderfile flags down from binaries and shared libraries
// We do not allow propagation for load flags because the orderfile is specific
// to the module (binary / shared library)
func orderfileDepsMutator(mctx android.TopDownMutatorContext) {
	if m, ok := mctx.Module().(*Module); ok {
		if !m.orderfile.orderfileLinkEnabled() {
			return
		}
		mctx.WalkDeps(func(dep android.
			Module, parent android.Module) bool {
			tag := mctx.OtherModuleDependencyTag(dep)
func orderfilePropagateViaDepTag(tag blueprint.DependencyTag) bool {
	libTag, isLibTag := tag.(libraryDependencyTag)

	// Do not recurse down non-static dependencies
	if isLibTag {
				if !libTag.static() {
					return false
				}
		return libTag.static()
	} else {
				if tag != objDepTag && tag != reuseObjTag {
					return false
		return tag == objDepTag || tag == reuseObjTag || tag == staticVariantTag
	}
}

			if dep, ok := dep.(*Module); ok {
				if m.orderfile.Properties.OrderfileInstrLink {
					dep.orderfile.Properties.OrderfileInstrLink = true
				}
			}
// orderfileTransitionMutator creates orderfile variants of cc modules.
type orderfileTransitionMutator struct{}

			return true
		})
const ORDERFILE_VARIATION = "orderfile"

func (o *orderfileTransitionMutator) Split(ctx android.BaseModuleContext) []string {
	return []string{""}
}

func (o *orderfileTransitionMutator) OutgoingTransition(ctx android.OutgoingTransitionContext, sourceVariation string) string {
	if m, ok := ctx.Module().(*Module); ok && m.orderfile != nil {
		if !orderfilePropagateViaDepTag(ctx.DepTag()) {
			return ""
		}

// Create orderfile variants for modules that need them
func orderfileMutator(mctx android.BottomUpMutatorContext) {
	if m, ok := mctx.Module().(*Module); ok && m.orderfile != nil {
		if !m.static() && m.orderfile.orderfileEnabled() {
			mctx.SetDependencyVariation("orderfile")
			return
		if sourceVariation != "" {
			return sourceVariation
		}

		variationNames := []string{""}
		if m.orderfile.Properties.OrderfileInstrLink {
			variationNames = append(variationNames, "orderfile")
		// Propagate profile orderfile flags down from binaries and shared libraries
		if m.orderfile.orderfileLinkEnabled() {
			return ORDERFILE_VARIATION
		}
	}
	return ""
}

		if len(variationNames) > 1 {
			modules := mctx.CreateVariations(variationNames...)
			for i, name := range variationNames {
				if name == "" {
					continue
func (o *orderfileTransitionMutator) IncomingTransition(ctx android.IncomingTransitionContext, incomingVariation string) string {
	if m, ok := ctx.Module().(*Module); ok && m.orderfile != nil {
		return incomingVariation
	}
				variation := modules[i].(*Module)
				variation.Properties.PreventInstall = true
				variation.Properties.HideFromMake = true
				variation.orderfile.Properties.ShouldProfileModule = true
				variation.orderfile.Properties.OrderfileLoad = false
	return ""
}

func (o *orderfileTransitionMutator) Mutate(ctx android.BottomUpMutatorContext, variation string) {
	if variation == "" {
		return
	}

	if m, ok := ctx.Module().(*Module); ok && m.orderfile != nil {
		m.Properties.PreventInstall = true
		m.Properties.HideFromMake = true
		m.orderfile.Properties.ShouldProfileModule = true
		// We do not allow propagation for load flags because the orderfile is specific
		// to the module (binary / shared library)
		m.orderfile.Properties.OrderfileLoad = false
	}
}