From: "Mike Frysinger (vapier)" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] gentoo-x86 commit in eclass: toolchain-funcs.eclass
Date: Mon, 16 Mar 2015 21:12:27 +0000 (UTC) [thread overview]
Message-ID: <20150316211228.7AE0B13E34@oystercatcher.gentoo.org> (raw)
vapier 15/03/16 21:12:27
Modified: toolchain-funcs.eclass
Log:
tc-ld-is-gold/tc-ld-disable-gold: add helpers for detecting & disabling gold
Revision Changes Path
1.135 eclass/toolchain-funcs.eclass
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/toolchain-funcs.eclass?rev=1.135&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/toolchain-funcs.eclass?rev=1.135&content-type=text/plain
diff : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/toolchain-funcs.eclass?r1=1.134&r2=1.135
Index: toolchain-funcs.eclass
===================================================================
RCS file: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -r1.134 -r1.135
--- toolchain-funcs.eclass 16 Mar 2015 19:26:39 -0000 1.134
+++ toolchain-funcs.eclass 16 Mar 2015 21:12:27 -0000 1.135
@@ -1,6 +1,6 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.134 2015/03/16 19:26:39 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.135 2015/03/16 21:12:27 vapier Exp $
# @ECLASS: toolchain-funcs.eclass
# @MAINTAINER:
@@ -305,6 +305,73 @@
tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
}
+# @FUNCTION: tc-ld-is-gold
+# @USAGE: [toolchain prefix]
+# @DESCRIPTION:
+# Return true if the current linker is set to gold.
+tc-ld-is-gold() {
+ local out
+
+ # First check the linker directly.
+ out=$($(tc-getLD "$@") --version 2>&1)
+ if [[ ${out} == *"GNU gold"* ]] ; then
+ return 0
+ fi
+
+ # Then see if they're selecting gold via compiler flags.
+ # Note: We're assuming they're using LDFLAGS to hold the
+ # options and not CFLAGS/CXXFLAGS.
+ local base="${T}/test-tc-gold"
+ cat <<-EOF > "${base}.c"
+ int main() { return 0; }
+ EOF
+ out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1)
+ rm -f "${base}"*
+ if [[ ${out} == *"GNU gold"* ]] ; then
+ return 0
+ fi
+
+ # No gold here!
+ return 1
+}
+
+# @FUNCTION: tc-ld-disable-gold
+# @USAGE: [toolchain prefix]
+# @DESCRIPTION:
+# If the gold linker is currently selected, configure the compilation
+# settings so that we use the older bfd linker instead.
+tc-ld-disable-gold() {
+ if ! tc-ld-is-gold "$@" ; then
+ # They aren't using gold, so nothing to do!
+ return
+ fi
+
+ ewarn "Forcing usage of the BFD linker instead of GOLD"
+
+ # Set up LD to point directly to bfd if it's available.
+ local bfd_ld="$(tc-getLD "$@").bfd"
+ local path_ld=$(which "${bfd_ld}" 2>/dev/null)
+ [[ -e ${path_ld} ]] && export LD=${bfd_ld}
+
+ # Set up LDFLAGS to select gold based on the gcc version.
+ local major=$(gcc-major-version "$@")
+ local minor=$(gcc-minor-version "$@")
+ if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]] ; then
+ # <=gcc-4.7 requires some coercion. Only works if bfd exists.
+ if [[ -e ${path_ld} ]] ; then
+ local d="${T}/bfd-linker"
+ mkdir -p "${d}"
+ ln -sf "${path_ld}" "${d}"/ld
+ export LDFLAGS="${LDFLAGS} -B${d}"
+ else
+ die "unable to locate a BFD linker to bypass gold"
+ fi
+ else
+ # gcc-4.8+ supports -fuse-ld directly.
+ export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"
+ fi
+}
+
# @FUNCTION: tc-has-openmp
# @USAGE: [toolchain prefix]
# @DESCRIPTION:
next reply other threads:[~2015-03-16 21:12 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-16 21:12 Mike Frysinger (vapier) [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-05-28 7:51 [gentoo-commits] gentoo-x86 commit in eclass: toolchain-funcs.eclass Mike Frysinger (vapier)
2015-04-13 5:38 Mike Frysinger (vapier)
2015-03-31 4:27 Mike Frysinger (vapier)
2015-03-16 19:26 Mike Frysinger (vapier)
2015-03-10 17:56 Mike Frysinger (vapier)
2015-02-27 6:08 Mike Frysinger (vapier)
2014-11-01 5:19 Mike Frysinger (vapier)
2014-10-15 22:52 Anthony G. Basile (blueness)
2014-10-15 22:30 Anthony G. Basile (blueness)
2014-10-15 22:27 Anthony G. Basile (blueness)
2014-01-17 3:46 Mike Frysinger (vapier)
2014-01-14 20:48 Mike Frysinger (vapier)
2014-01-14 5:33 Mike Frysinger (vapier)
2013-10-12 21:31 Mike Frysinger (vapier)
2013-09-30 1:34 Mike Frysinger (vapier)
2013-05-14 20:40 Mike Frysinger (vapier)
2012-12-29 5:08 Mike Frysinger (vapier)
2012-09-13 5:06 Mike Frysinger (vapier)
2012-07-26 16:43 Mike Frysinger (vapier)
2012-07-25 18:27 Mike Frysinger (vapier)
2012-07-21 16:11 Mike Frysinger (vapier)
2012-06-14 3:38 Mike Frysinger (vapier)
2012-05-10 3:31 Mike Frysinger (vapier)
2011-12-10 19:45 Mike Frysinger (vapier)
2011-10-17 19:11 Mike Frysinger (vapier)
2011-09-12 21:42 Mike Frysinger (vapier)
2011-09-09 19:14 Mike Frysinger (vapier)
2011-09-06 22:54 Mike Frysinger (vapier)
2011-07-12 14:29 Alexis Ballier (aballier)
2010-10-28 4:16 Mike Frysinger (vapier)
2010-09-11 17:12 Mike Frysinger (vapier)
2010-08-20 15:04 Donnie Berkholz (dberkholz)
2010-05-23 2:00 Mike Frysinger (vapier)
2010-04-22 18:28 Raul Porcel (armin76)
2010-03-15 23:51 Mike Frysinger (vapier)
2009-12-01 4:44 Mike Frysinger (vapier)
2009-11-27 21:31 Mike Frysinger (vapier)
2009-09-02 20:08 Fabian Groffen (grobian)
2009-09-02 9:00 Fabian Groffen (grobian)
2009-08-15 15:12 Fabian Groffen (grobian)
2009-08-15 15:11 Fabian Groffen (grobian)
2009-05-24 7:25 Fabian Groffen (grobian)
2009-04-05 7:50 Fabian Groffen (grobian)
2009-04-04 17:17 Fabian Groffen (grobian)
2009-03-28 11:09 Mike Frysinger (vapier)
2009-03-01 8:09 Mike Frysinger (vapier)
2009-02-25 0:25 Joshua Kinard (kumba)
2009-01-27 23:35 Mike Frysinger (vapier)
2009-01-08 11:06 Gordon Malm (gengor)
2009-01-08 9:56 Gordon Malm (gengor)
2009-01-08 6:33 Gordon Malm (gengor)
2009-01-08 3:46 Gordon Malm (gengor)
2008-09-16 6:40 Mike Frysinger (vapier)
2008-07-03 5:26 Donnie Berkholz (dberkholz)
2008-06-01 8:56 Alexis Ballier (aballier)
2008-04-16 14:16 Mike Frysinger (vapier)
2008-01-02 1:01 Mike Frysinger (vapier)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150316211228.7AE0B13E34@oystercatcher.gentoo.org \
--to=vapier@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox