Loading cc/cc.go +1 −2 Original line number Diff line number Diff line Loading @@ -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", <oTransitionMutator{}) Loading cc/orderfile.go +50 −53 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ package cc import ( "fmt" "github.com/google/blueprint" "android/soong/android" ) Loading Loading @@ -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 } } Loading
cc/cc.go +1 −2 Original line number Diff line number Diff line Loading @@ -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", <oTransitionMutator{}) Loading
cc/orderfile.go +50 −53 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ package cc import ( "fmt" "github.com/google/blueprint" "android/soong/android" ) Loading Loading @@ -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 } }