| 1 | # Copyright 1999-2007 Gentoo Foundation |
1 | # Copyright 1999-2007 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.75 2008/01/02 01:01:03 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.84 2009/01/08 11:06:10 gengor Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: toolchain-funcs.eclass |
5 | # @ECLASS: toolchain-funcs.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # Toolchain Ninjas <toolchain@gentoo.org> |
7 | # Toolchain Ninjas <toolchain@gentoo.org> |
| 8 | # @BLURB: functions to query common info about the toolchain |
8 | # @BLURB: functions to query common info about the toolchain |
| … | |
… | |
| 74 | tc-getRANLIB() { tc-getPROG RANLIB ranlib "$@"; } |
74 | tc-getRANLIB() { tc-getPROG RANLIB ranlib "$@"; } |
| 75 | # @FUNCTION: tc-getF77 |
75 | # @FUNCTION: tc-getF77 |
| 76 | # @USAGE: [toolchain prefix] |
76 | # @USAGE: [toolchain prefix] |
| 77 | # @RETURN: name of the Fortran 77 compiler |
77 | # @RETURN: name of the Fortran 77 compiler |
| 78 | tc-getF77() { tc-getPROG F77 f77 "$@"; } |
78 | tc-getF77() { tc-getPROG F77 f77 "$@"; } |
| 79 | # @FUNCTION: tc-getF90 |
79 | # @FUNCTION: tc-getFC |
| 80 | # @USAGE: [toolchain prefix] |
80 | # @USAGE: [toolchain prefix] |
| 81 | # @RETURN: name of the Fortran 90 compiler |
81 | # @RETURN: name of the Fortran 90 compiler |
| 82 | tc-getF90() { tc-getPROG F90 gfortran "$@"; } |
82 | tc-getFC() { tc-getPROG FC gfortran "$@"; } |
| 83 | # @FUNCTION: tc-getFORTRAN |
|
|
| 84 | # @USAGE: [toolchain prefix] |
|
|
| 85 | # @RETURN: name of the Fortran compiler |
|
|
| 86 | tc-getFORTRAN() { tc-getPROG FORTRAN gfortran "$@"; } |
|
|
| 87 | # @FUNCTION: tc-getGCJ |
83 | # @FUNCTION: tc-getGCJ |
| 88 | # @USAGE: [toolchain prefix] |
84 | # @USAGE: [toolchain prefix] |
| 89 | # @RETURN: name of the java compiler |
85 | # @RETURN: name of the java compiler |
| 90 | tc-getGCJ() { tc-getPROG GCJ gcj "$@"; } |
86 | tc-getGCJ() { tc-getPROG GCJ gcj "$@"; } |
| 91 | |
87 | |
| … | |
… | |
| 118 | # @DESCRIPTION: |
114 | # @DESCRIPTION: |
| 119 | # Quick way to export a bunch of compiler vars at once. |
115 | # Quick way to export a bunch of compiler vars at once. |
| 120 | tc-export() { |
116 | tc-export() { |
| 121 | local var |
117 | local var |
| 122 | for var in "$@" ; do |
118 | for var in "$@" ; do |
|
|
119 | [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'" |
| 123 | eval tc-get${var} > /dev/null |
120 | eval tc-get${var} > /dev/null |
| 124 | done |
121 | done |
| 125 | } |
122 | } |
| 126 | |
123 | |
| 127 | # @FUNCTION: tc-is-cross-compiler |
124 | # @FUNCTION: tc-is-cross-compiler |
| … | |
… | |
| 171 | cris*) echo cris;; |
168 | cris*) echo cris;; |
| 172 | hppa*) ninj parisc hppa;; |
169 | hppa*) ninj parisc hppa;; |
| 173 | i?86*) |
170 | i?86*) |
| 174 | # Starting with linux-2.6.24, the 'x86_64' and 'i386' |
171 | # Starting with linux-2.6.24, the 'x86_64' and 'i386' |
| 175 | # trees have been unified into 'x86'. |
172 | # trees have been unified into 'x86'. |
|
|
173 | # FreeBSD still uses i386 |
| 176 | if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) ]] ; then |
174 | if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]] ; then |
| 177 | echo i386 |
175 | echo i386 |
| 178 | else |
176 | else |
| 179 | echo x86 |
177 | echo x86 |
| 180 | fi |
178 | fi |
| 181 | ;; |
179 | ;; |
| … | |
… | |
| 295 | } |
293 | } |
| 296 | |
294 | |
| 297 | # Returns the installation directory - internal toolchain |
295 | # Returns the installation directory - internal toolchain |
| 298 | # function for use by _gcc-specs-exists (for flag-o-matic). |
296 | # function for use by _gcc-specs-exists (for flag-o-matic). |
| 299 | _gcc-install-dir() { |
297 | _gcc-install-dir() { |
| 300 | echo "$($(tc-getCC) -print-search-dirs 2> /dev/null |\ |
298 | echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null |\ |
| 301 | awk '$1=="install:" {print $2}')" |
299 | awk '$1=="install:" {print $2}')" |
| 302 | } |
300 | } |
| 303 | # Returns true if the indicated specs file exists - internal toolchain |
301 | # Returns true if the indicated specs file exists - internal toolchain |
| 304 | # function for use by flag-o-matic. |
302 | # function for use by flag-o-matic. |
| 305 | _gcc-specs-exists() { |
303 | _gcc-specs-exists() { |
| … | |
… | |
| 349 | |
347 | |
| 350 | # Returns true if gcc sets relro |
348 | # Returns true if gcc sets relro |
| 351 | gcc-specs-relro() { |
349 | gcc-specs-relro() { |
| 352 | local directive |
350 | local directive |
| 353 | directive=$(gcc-specs-directive link_command) |
351 | directive=$(gcc-specs-directive link_command) |
| 354 | return $([[ ${directive/\{!norelro:} != ${directive} ]]) |
352 | return $([[ "${directive/\{!norelro:}" != "${directive}" ]]) |
| 355 | } |
353 | } |
| 356 | # Returns true if gcc sets now |
354 | # Returns true if gcc sets now |
| 357 | gcc-specs-now() { |
355 | gcc-specs-now() { |
| 358 | local directive |
356 | local directive |
| 359 | directive=$(gcc-specs-directive link_command) |
357 | directive=$(gcc-specs-directive link_command) |
| 360 | return $([[ ${directive/\{!nonow:} != ${directive} ]]) |
358 | return $([[ "${directive/\{!nonow:}" != "${directive}" ]]) |
| 361 | } |
359 | } |
| 362 | # Returns true if gcc builds PIEs |
360 | # Returns true if gcc builds PIEs |
| 363 | gcc-specs-pie() { |
361 | gcc-specs-pie() { |
| 364 | local directive |
362 | local directive |
| 365 | directive=$(gcc-specs-directive cc1) |
363 | directive=$(gcc-specs-directive cc1) |
| 366 | return $([[ ${directive/\{!nopie:} != ${directive} ]]) |
364 | return $([[ "${directive/\{!nopie:}" != "${directive}" ]]) |
| 367 | } |
365 | } |
| 368 | # Returns true if gcc builds with the stack protector |
366 | # Returns true if gcc builds with the stack protector |
| 369 | gcc-specs-ssp() { |
367 | gcc-specs-ssp() { |
| 370 | local directive |
368 | local directive |
| 371 | directive=$(gcc-specs-directive cc1) |
369 | directive=$(gcc-specs-directive cc1) |
| 372 | return $([[ ${directive/\{!fno-stack-protector:} != ${directive} ]]) |
370 | return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]) |
| 373 | } |
371 | } |
| 374 | # Returns true if gcc upgrades fstack-protector to fstack-protector-all |
372 | # Returns true if gcc upgrades fstack-protector to fstack-protector-all |
| 375 | gcc-specs-ssp-to-all() { |
373 | gcc-specs-ssp-to-all() { |
| 376 | local directive |
374 | local directive |
| 377 | directive=$(gcc-specs-directive cc1) |
375 | directive=$(gcc-specs-directive cc1) |
| 378 | return $([[ ${directive/\{!fno-stack-protector-all:} != ${directive} ]]) |
376 | return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]) |
|
|
377 | } |
|
|
378 | # Returns true if gcc builds with fno-strict-overflow |
|
|
379 | gcc-specs-nostrict() { |
|
|
380 | local directive |
|
|
381 | directive=$(gcc-specs-directive cc1) |
|
|
382 | return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]) |
| 379 | } |
383 | } |
| 380 | |
384 | |
| 381 | |
385 | |
| 382 | # @FUNCTION: gen_usr_ldscript |
386 | # @FUNCTION: gen_usr_ldscript |
| 383 | # @USAGE: <list of libs to create linker scripts for> |
387 | # @USAGE: <list of libs to create linker scripts for> |