summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2024-03-09 02:51:47 +0000
committerSam James <sam@gentoo.org>2024-03-09 17:53:29 +0000
commit33056c4e55b76cfdcee02c206acbfd770d7ae378 (patch)
treebb63dcd71d9f0097e75a457cfad3fe3faffcb476 /sys-devel
parentapp-metrics/collectd: drop slurm (diff)
downloadgentoo-33056c4e55b76cfdcee02c206acbfd770d7ae378.tar.gz
gentoo-33056c4e55b76cfdcee02c206acbfd770d7ae378.tar.bz2
gentoo-33056c4e55b76cfdcee02c206acbfd770d7ae378.zip
sys-devel/binutils: rework LTO handling
Get tests passing when LTO is used and rework USE=pgo handling while at it, as it's interlinked with LTO b/c of the upstream infra for it. This follows on from: * 1764651a4f7daf8d622db7fddeea891809cab2fb * f900949be85e2b2b21cd68b7f5163208d0429028 * f900949be85e2b2b21cd68b7f5163208d0429028 where I kept hitting misc issues where the build for the live ebuild failed with LTO or otherwise. With this, I only needed one patch to libctf's tests [0] which I've now pinged upstream. (I also had an odd single gprofng failure I haven't looked at yet.) * For LTO + (tests || pgo), always filter '-Wa,*'. This is an unfortunate one, but the bootstrap test fails with it. * USE=pgo no longer implies LTO. If -flto is being used, then we pass --enable-pgo-build=lto. If not, we pass --enable-pgo-build=yes. * For USE=pgo, filter out LTO after we applied the build system configuration, because otherwise there's a risk we're going to break the tests used for profiling. * In src_test, use a subshell to localise the filtering of flags we do. * For tests, pass {C,CXX,LD}FLAGS_FOR_TARGET to make, as otherwise it'll use what it found from configure (and e.g. pick up LTO again -> many tests fail as they're not intended to be used with it). [0] https://inbox.sourceware.org/binutils/87sf2evr35.fsf@esperi.org.uk/ Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-devel')
-rw-r--r--sys-devel/binutils/binutils-9999.ebuild32
1 files changed, 28 insertions, 4 deletions
diff --git a/sys-devel/binutils/binutils-9999.ebuild b/sys-devel/binutils/binutils-9999.ebuild
index 9169e3ca712c..9b30843ce94f 100644
--- a/sys-devel/binutils/binutils-9999.ebuild
+++ b/sys-devel/binutils/binutils-9999.ebuild
@@ -333,10 +333,20 @@ src_configure() {
)
fi
+ if use test || { use pgo && tc-is-lto ; } ; then
+ # -Wa,* needs to be consistent everywhere or lto-wrapper will complain
+ filter-flags '-Wa,*'
+ fi
+
if ! is_cross ; then
- myconf+=( $(use_enable pgo pgo-build lto) )
+ myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" || echo "yes")) )
if use pgo ; then
+ # We let configure handle it for us because it has to run
+ # the testsuite later on for profiling, and LTO isn't compatible
+ # with the testsuite.
+ filter-lto
+
export BUILD_CFLAGS="${CFLAGS}"
fi
fi
@@ -378,10 +388,24 @@ src_test() {
local -x XZ_OPT="-T1"
local -x XZ_DEFAULTS="-T1"
- # bug #637066
- filter-flags -Wall -Wreturn-type
+ (
+ # Tests don't expect LTO
+ filter-lto
- emake -k check
+ # lto-wrapper warnings which confuse tests
+ filter-flags '-Wa,*'
+
+ # bug #637066
+ filter-flags -Wall -Wreturn-type
+
+ emake -k check \
+ CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \
+ CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \
+ LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \
+ CFLAGS="${CFLAGS}" \
+ CXXFLAGS="${CXXFLAGS}" \
+ LDFLAGS="${LDFLAGS}"
+ )
}
src_install() {