From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-871223-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id A732B59CA5 for <garchives@archives.gentoo.org>; Sun, 20 Mar 2016 18:22:37 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 3FF5C21C023; Sun, 20 Mar 2016 18:22:35 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id C676021C023 for <gentoo-commits@lists.gentoo.org>; Sun, 20 Mar 2016 18:22:34 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 452FC340A3D for <gentoo-commits@lists.gentoo.org>; Sun, 20 Mar 2016 18:22:33 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id AE34D822 for <gentoo-commits@lists.gentoo.org>; Sun, 20 Mar 2016 18:22:29 +0000 (UTC) From: "Fabian Groffen" <grobian@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Fabian Groffen" <grobian@gentoo.org> Message-ID: <1458498144.7ce7d487acf67d28db2eea56569c6fcb499bf6c9.grobian@gentoo> Subject: [gentoo-commits] repo/proj/prefix:master commit in: eclass/ X-VCS-Repository: repo/proj/prefix X-VCS-Files: eclass/toolchain-funcs.eclass X-VCS-Directories: eclass/ X-VCS-Committer: grobian X-VCS-Committer-Name: Fabian Groffen X-VCS-Revision: 7ce7d487acf67d28db2eea56569c6fcb499bf6c9 X-VCS-Branch: master Date: Sun, 20 Mar 2016 18:22:29 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 51fd9a7a-a747-4584-94a0-51674fd9657b X-Archives-Hash: 0ee814ecf94dd6f518f2ed9a79360df1 commit: 7ce7d487acf67d28db2eea56569c6fcb499bf6c9 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> AuthorDate: Sun Mar 20 18:22:24 2016 +0000 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> CommitDate: Sun Mar 20 18:22:24 2016 +0000 URL: https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=7ce7d487 eclass/toolchain-funcs: sync, bug #576680 eclass/toolchain-funcs.eclass | 125 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 102 insertions(+), 23 deletions(-) diff --git a/eclass/toolchain-funcs.eclass b/eclass/toolchain-funcs.eclass index e6ebd49..4a5c5e1 100644 --- a/eclass/toolchain-funcs.eclass +++ b/eclass/toolchain-funcs.eclass @@ -1,6 +1,6 @@ -# Copyright 1999-2014 Gentoo Foundation +# 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.131 2014/11/01 05:19:20 vapier Exp $ +# $Id$ # @ECLASS: toolchain-funcs.eclass # @MAINTAINER: @@ -84,6 +84,10 @@ tc-getRANLIB() { tc-getPROG RANLIB ranlib "$@"; } # @USAGE: [toolchain prefix] # @RETURN: name of the object copier tc-getOBJCOPY() { tc-getPROG OBJCOPY objcopy "$@"; } +# @FUNCTION: tc-getOBJDUMP +# @USAGE: [toolchain prefix] +# @RETURN: name of the object dumper +tc-getOBJDUMP() { tc-getPROG OBJDUMP objdump "$@"; } # @FUNCTION: tc-getF77 # @USAGE: [toolchain prefix] # @RETURN: name of the Fortran 77 compiler @@ -96,6 +100,10 @@ tc-getFC() { tc-getPROG FC gfortran "$@"; } # @USAGE: [toolchain prefix] # @RETURN: name of the java compiler tc-getGCJ() { tc-getPROG GCJ gcj "$@"; } +# @FUNCTION: tc-getGO +# @USAGE: [toolchain prefix] +# @RETURN: name of the Go compiler +tc-getGO() { tc-getPROG GO gccgo "$@"; } # @FUNCTION: tc-getPKG_CONFIG # @USAGE: [toolchain prefix] # @RETURN: name of the pkg-config tool @@ -219,10 +227,13 @@ tc-is-static-only() { # Export common build related compiler settings. tc-export_build_env() { tc-export "$@" + # Some build envs will initialize vars like: + # : ${BUILD_LDFLAGS:-${LDFLAGS}} + # So make sure all variables are non-empty. #526734 : ${BUILD_CFLAGS:=-O1 -pipe} : ${BUILD_CXXFLAGS:=-O1 -pipe} - : ${BUILD_CPPFLAGS:=} - : ${BUILD_LDFLAGS:=} + : ${BUILD_CPPFLAGS:= } + : ${BUILD_LDFLAGS:= } export BUILD_{C,CXX,CPP,LD}FLAGS # Some packages use XXX_FOR_BUILD. @@ -297,7 +308,78 @@ tc-env_build() { # } # @CODE econf_build() { - tc-env_build econf --build=${CBUILD:-${CHOST}} "$@" + local CBUILD=${CBUILD:-${CHOST}} + 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. + # We need to extract the first word in case there are flags appended + # to its value (like multilib). #545218 + local ld=$(tc-getLD "$@") + local bfd_ld="${ld%% *}.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 @@ -397,10 +479,10 @@ ninj() { [[ ${type} == "kern" ]] && echo $1 || echo $2 ; } arm*) echo arm;; avr*) ninj avr32 avr;; bfin*) ninj blackfin bfin;; - c6x) echo c6x;; + c6x*) echo c6x;; cris*) echo cris;; - frv) echo frv;; - hexagon) echo hexagon;; + frv*) echo frv;; + hexagon*) echo hexagon;; hppa*) ninj parisc hppa;; i?86*) # Starting with linux-2.6.24, the 'x86_64' and 'i386' @@ -414,11 +496,12 @@ ninj() { [[ ${type} == "kern" ]] && echo $1 || echo $2 ; } ;; ia64*) echo ia64;; m68*) echo m68k;; - metag) echo metag;; + metag*) echo metag;; + microblaze*) echo microblaze;; mips*) echo mips;; nios2*) echo nios2;; nios*) echo nios;; - or32) echo openrisc;; + or32*) echo openrisc;; powerpc*) # Starting with linux-2.6.15, the 'ppc' and 'ppc64' trees # have been unified into simply 'powerpc', but until 2.6.16, @@ -441,7 +524,7 @@ ninj() { [[ ${type} == "kern" ]] && echo $1 || echo $2 ; } ;; riscv*) echo riscv;; s390*) echo s390;; - score) echo score;; + score*) echo score;; sh64*) ninj sh64 sh;; sh*) echo sh;; sparc64*) ninj sparc64 sparc;; @@ -674,7 +757,9 @@ gen_usr_ldscript() { # Eventually we'd like to get rid of this func completely #417451 case ${CTARGET:-${CHOST}} in *-darwin*) type -P scanmacho > /dev/null || return ;; # excluded for now due to known breakage - *linux*|*-freebsd*|*-openbsd*|*-netbsd*|*-solaris*) type -P scanelf > /dev/null || return;; # Prefix + *-android*) return 0 ;; + *linux*|*-freebsd*|*-openbsd*|*-netbsd*) + use prefix && return 0 ;; *) return 0 ;; esac @@ -719,10 +804,7 @@ gen_usr_ldscript() { else tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib}) fi - if [[ -z ${tlib} ]] ; then - ewarn "gen_usr_ldscript: unable to read install_name from ${lib}" - tlib=${lib} - fi + [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}" tlib=${tlib##*/} if ${auto} ; then @@ -731,7 +813,7 @@ gen_usr_ldscript() { if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]] ; then mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die fi - [[ ${tlib} != ${lib} ]] && rm -f "${ED}"/${libdir}/${lib} + rm -f "${ED}"/${libdir}/${lib} fi # Mach-O files have an id, which is like a soname, it tells how @@ -778,16 +860,13 @@ gen_usr_ldscript() { *) if ${auto} ; then tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib}) - if [[ -z ${tlib} ]] ; then - ewarn "gen_usr_ldscript: unable to read SONAME from ${lib}" - tlib=${lib} - fi + [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}" mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die # some SONAMEs are funky: they encode a version before the .so if [[ ${tlib} != ${lib}* ]] ; then mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die fi - [[ ${tlib} != ${lib} ]] && rm -f "${ED}"/${libdir}/${lib} + rm -f "${ED}"/${libdir}/${lib} else tlib=${lib} fi @@ -799,7 +878,7 @@ gen_usr_ldscript() { redirects the linker to the real lib. And yes, this works in the cross- compiling scenario as the sysroot-ed linker will prepend the real path. - See bug http://bugs.gentoo.org/4411 for more info. + See bug https://bugs.gentoo.org/4411 for more info. */ ${output_format} GROUP ( ${EPREFIX}/${libdir}/${tlib} )