From 0713e336d9898aad7c161e92b8d27096142b64b6 Mon Sep 17 00:00:00 2001 From: Yi Kong Date: Wed, 31 May 2023 14:15:22 +0900 Subject: [PATCH] Remove Full LTO support We do not have any more projects directly depending on Full LTO (except CFI which manages their own LTO flags), remove full LTO support from the build system. Test: presubmit Bug: 169004486 Change-Id: I8d6b7999d716158b5d8fe34b2f197653d7bae8dd --- cc/lto.go | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/cc/lto.go b/cc/lto.go index be8fc56ca..a8bed235f 100644 --- a/cc/lto.go +++ b/cc/lto.go @@ -43,16 +43,13 @@ type LTOProperties struct { // referred to in blueprint files as "lto" Lto struct { Never *bool `android:"arch_variant"` - Full *bool `android:"arch_variant"` Thin *bool `android:"arch_variant"` } `android:"arch_variant"` // Dep properties indicate that this module needs to be built with LTO // since it is an object dependency of an LTO module. - FullEnabled bool `blueprint:"mutated"` ThinEnabled bool `blueprint:"mutated"` NoLtoEnabled bool `blueprint:"mutated"` - FullDep bool `blueprint:"mutated"` ThinDep bool `blueprint:"mutated"` NoLtoDep bool `blueprint:"mutated"` @@ -86,8 +83,6 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags { var ltoLdFlag string if lto.ThinLTO() { ltoCFlag = "-flto=thin -fsplit-lto-unit" - } else if lto.FullLTO() { - ltoCFlag = "-flto" } else { ltoCFlag = "-flto=thin -fsplit-lto-unit" ltoLdFlag = "-Wl,--lto-O0" @@ -126,13 +121,13 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags { } func (lto *lto) LTO(ctx BaseModuleContext) bool { - return lto.ThinLTO() || lto.FullLTO() || lto.DefaultThinLTO(ctx) + return lto.ThinLTO() || lto.DefaultThinLTO(ctx) } func (lto *lto) DefaultThinLTO(ctx BaseModuleContext) bool { // LP32 has many subtle issues and less test coverage. lib32 := ctx.Arch().ArchType.Multilib == "lib32" - // CFI enables full LTO. + // CFI adds LTO flags by itself. cfi := ctx.isCfi() // Performance and binary size are less important for host binaries and tests. host := ctx.Host() @@ -143,10 +138,6 @@ func (lto *lto) DefaultThinLTO(ctx BaseModuleContext) bool { return GlobalThinLTO(ctx) && !lto.Never() && !lib32 && !cfi && !host && !test && !vndk } -func (lto *lto) FullLTO() bool { - return lto != nil && (proptools.Bool(lto.Properties.Lto.Full) || lto.Properties.FullEnabled) -} - func (lto *lto) ThinLTO() bool { return lto != nil && (proptools.Bool(lto.Properties.Lto.Thin) || lto.Properties.ThinEnabled) } @@ -164,12 +155,8 @@ func ltoDepsMutator(mctx android.TopDownMutatorContext) { globalThinLTO := GlobalThinLTO(mctx) if m, ok := mctx.Module().(*Module); ok { - full := m.lto.FullLTO() thin := m.lto.ThinLTO() never := m.lto.Never() - if full && thin { - mctx.PropertyErrorf("LTO", "FullLTO and ThinLTO are mutually exclusive") - } mctx.WalkDeps(func(dep android.Module, parent android.Module) bool { tag := mctx.OtherModuleDependencyTag(dep) @@ -187,9 +174,6 @@ func ltoDepsMutator(mctx android.TopDownMutatorContext) { } if dep, ok := dep.(*Module); ok { - if full && !dep.lto.FullLTO() { - dep.lto.Properties.FullDep = true - } if !globalThinLTO && thin && !dep.lto.ThinLTO() { dep.lto.Properties.ThinDep = true } @@ -212,9 +196,6 @@ func ltoMutator(mctx android.BottomUpMutatorContext) { // Create variations for LTO types required as static // dependencies variationNames := []string{""} - if m.lto.Properties.FullDep && !m.lto.FullLTO() { - variationNames = append(variationNames, "lto-full") - } if !globalThinLTO && m.lto.Properties.ThinDep && !m.lto.ThinLTO() { variationNames = append(variationNames, "lto-thin") } @@ -224,13 +205,10 @@ func ltoMutator(mctx android.BottomUpMutatorContext) { // Use correct dependencies if LTO property is explicitly set // (mutually exclusive) - if m.lto.FullLTO() { - mctx.SetDependencyVariation("lto-full") - } if !globalThinLTO && m.lto.ThinLTO() { mctx.SetDependencyVariation("lto-thin") } - // Never must be the last, it overrides Thin or Full. + // Never must be the last, it overrides Thin. if globalThinLTO && m.lto.Never() { mctx.SetDependencyVariation("lto-none") } @@ -247,9 +225,6 @@ func ltoMutator(mctx android.BottomUpMutatorContext) { } // LTO properties for dependencies - if name == "lto-full" { - variation.lto.Properties.FullEnabled = true - } if name == "lto-thin" { variation.lto.Properties.ThinEnabled = true } @@ -258,7 +233,6 @@ func ltoMutator(mctx android.BottomUpMutatorContext) { } variation.Properties.PreventInstall = true variation.Properties.HideFromMake = true - variation.lto.Properties.FullDep = false variation.lto.Properties.ThinDep = false variation.lto.Properties.NoLtoDep = false }