From 51354b7da9d121eaf58303e444044cc66e5a1b71 Mon Sep 17 00:00:00 2001 From: Evangelos Foutras Date: Thu, 10 Feb 2022 05:15:01 +0200 Subject: [PATCH] Make link time optimization flags configurable We want to use -flto=auto in Arch Linux to speed up building, but we can't hardcode it in buildenv/lto.sh because other downstreams might have clang < 13.0.0 which did not recognize -flto=auto as equivalent to -flto=full. Introducing an LTOFLAGS variable to makepkg.conf seems the way to go. Signed-off-by: Allan McRae (cherry picked from commit e1ce2351f5c00dd90104e0f4ce3bf176da28af08) --- doc/makepkg.conf.5.asciidoc | 10 ++++++++-- etc/makepkg.conf.in | 1 + scripts/libmakepkg/buildenv/buildflags.sh.in | 2 +- scripts/libmakepkg/buildenv/lto.sh.in | 6 +++--- scripts/libmakepkg/lint_config/variable.sh.in | 8 ++++---- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/doc/makepkg.conf.5.asciidoc b/doc/makepkg.conf.5.asciidoc index 76c27f6a..9eac078f 100644 --- a/doc/makepkg.conf.5.asciidoc +++ b/doc/makepkg.conf.5.asciidoc @@ -81,6 +81,11 @@ Options usage resembling ``-Wl,--hash-style=gnu''. Read ld(1) for more details on available linker flags. +**LTOFLAGS=**"ltoflags":: + Additional compiler and linker flags appended to `CFLAGS`, `CXXFLAGS` + and `LDFLAGS` when building with link time optimization. If empty, + ``-flto'' is used. + **MAKEFLAGS=**"makeflags":: This is often used to set the number of jobs used; for example, `-j2`. Other flags that make accepts can also be passed. @@ -190,8 +195,9 @@ Options package containing the debug symbols when used with `strip'. *lto*;; - Enable building packages using link time optimization. Adds '-flto' - to both CFLAGS and CXXFLAGS. + Enable building packages using link time optimization. Adds the + flags specified in LTOFLAGS to CFLAGS, CXXFLAGS and LDFLAGS (or + ``-flto'' if LTOFLAGS is empty). **INTEGRITY_CHECK=(**check1 ...**)**:: File integrity checks to use. Multiple checks may be specified; this diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in index fff5b8eb..55b52d0a 100644 --- a/etc/makepkg.conf.in +++ b/etc/makepkg.conf.in @@ -41,6 +41,7 @@ CHOST="@CHOST@" #CFLAGS="-O2 -pipe" #CXXFLAGS="-O2 -pipe" #LDFLAGS="" +#LTOFLAGS="-flto" #RUSTFLAGS="-C opt-level=2" #-- Make Flags: change this for DistCC/SMP systems #MAKEFLAGS="-j2" diff --git a/scripts/libmakepkg/buildenv/buildflags.sh.in b/scripts/libmakepkg/buildenv/buildflags.sh.in index 873dd826..1177fee6 100644 --- a/scripts/libmakepkg/buildenv/buildflags.sh.in +++ b/scripts/libmakepkg/buildenv/buildflags.sh.in @@ -30,6 +30,6 @@ buildenv_functions+=('buildenv_buildflags') buildenv_buildflags() { if check_option "buildflags" "n"; then - unset CPPFLAGS CFLAGS DEBUG_CFLAGS CXXFLAGS DEBUG_CXXFLAGS LDFLAGS RUSTFLAGS DEBUG_RUSTFLAGS + unset CPPFLAGS CFLAGS DEBUG_CFLAGS CXXFLAGS DEBUG_CXXFLAGS LDFLAGS LTOFLAGS RUSTFLAGS DEBUG_RUSTFLAGS fi } diff --git a/scripts/libmakepkg/buildenv/lto.sh.in b/scripts/libmakepkg/buildenv/lto.sh.in index 59a51c91..334aa916 100644 --- a/scripts/libmakepkg/buildenv/lto.sh.in +++ b/scripts/libmakepkg/buildenv/lto.sh.in @@ -31,8 +31,8 @@ buildenv_functions+=('buildenv_lto') buildenv_lto() { if check_option "lto" "y" && ! check_option "buildflags" "n"; then - CFLAGS+=" -flto" - CXXFLAGS+=" -flto" - LDFLAGS+=" -flto" + CFLAGS+=" ${LTOFLAGS:--flto}" + CXXFLAGS+=" ${LTOFLAGS:--flto}" + LDFLAGS+=" ${LTOFLAGS:--flto}" fi } diff --git a/scripts/libmakepkg/lint_config/variable.sh.in b/scripts/libmakepkg/lint_config/variable.sh.in index 959370cf..82002fce 100644 --- a/scripts/libmakepkg/lint_config/variable.sh.in +++ b/scripts/libmakepkg/lint_config/variable.sh.in @@ -32,10 +32,10 @@ lint_config_variables() { local array=(DLAGENTS VCSCLIENTS BUILDENV OPTIONS INTEGRITY_CHECK MAN_DIRS DOC_DIRS PURGE_TARGETS COMPRESSGZ COMPRESSBZ2 COMPRESSXZ COMPRESSLRZ COMPRESSLZO COMPRESSZ) - local string=(CARCH CHOST CPPFLAGS CFLAGS CXXFLAGS RUSTFLAGS LDFLAGS DEBUG_CFLAGS - DEBUG_CXXFLAGS DEBUG_RUSTFLAGS DISTCC_HOSTS BUILDDIR STRIP_BINARIES - STRIP_SHARED STRIP_STATIC PKGDEST SRCDEST SRCPKGDEST LOGDEST PACKAGER - GPGKEY PKGEXT SRCEXT) + local string=(CARCH CHOST CPPFLAGS CFLAGS CXXFLAGS RUSTFLAGS LDFLAGS LTOFLAGS + DEBUG_CFLAGS DEBUG_CXXFLAGS DEBUG_RUSTFLAGS DISTCC_HOSTS BUILDDIR + STRIP_BINARIES STRIP_SHARED STRIP_STATIC PKGDEST SRCDEST SRCPKGDEST + LOGDEST PACKAGER GPGKEY PKGEXT SRCEXT) local i keys ret=0