| 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.77 2008/06/01 08:56:56 aballier 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 |
| … | |
… | |
| 350 | |
347 | |
| 351 | # Returns true if gcc sets relro |
348 | # Returns true if gcc sets relro |
| 352 | gcc-specs-relro() { |
349 | gcc-specs-relro() { |
| 353 | local directive |
350 | local directive |
| 354 | directive=$(gcc-specs-directive link_command) |
351 | directive=$(gcc-specs-directive link_command) |
| 355 | return $([[ ${directive/\{!norelro:} != ${directive} ]]) |
352 | return $([[ "${directive/\{!norelro:}" != "${directive}" ]]) |
| 356 | } |
353 | } |
| 357 | # Returns true if gcc sets now |
354 | # Returns true if gcc sets now |
| 358 | gcc-specs-now() { |
355 | gcc-specs-now() { |
| 359 | local directive |
356 | local directive |
| 360 | directive=$(gcc-specs-directive link_command) |
357 | directive=$(gcc-specs-directive link_command) |
| 361 | return $([[ ${directive/\{!nonow:} != ${directive} ]]) |
358 | return $([[ "${directive/\{!nonow:}" != "${directive}" ]]) |
| 362 | } |
359 | } |
| 363 | # Returns true if gcc builds PIEs |
360 | # Returns true if gcc builds PIEs |
| 364 | gcc-specs-pie() { |
361 | gcc-specs-pie() { |
| 365 | local directive |
362 | local directive |
| 366 | directive=$(gcc-specs-directive cc1) |
363 | directive=$(gcc-specs-directive cc1) |
| 367 | return $([[ ${directive/\{!nopie:} != ${directive} ]]) |
364 | return $([[ "${directive/\{!nopie:}" != "${directive}" ]]) |
| 368 | } |
365 | } |
| 369 | # Returns true if gcc builds with the stack protector |
366 | # Returns true if gcc builds with the stack protector |
| 370 | gcc-specs-ssp() { |
367 | gcc-specs-ssp() { |
| 371 | local directive |
368 | local directive |
| 372 | directive=$(gcc-specs-directive cc1) |
369 | directive=$(gcc-specs-directive cc1) |
| 373 | return $([[ ${directive/\{!fno-stack-protector:} != ${directive} ]]) |
370 | return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]) |
| 374 | } |
371 | } |
| 375 | # Returns true if gcc upgrades fstack-protector to fstack-protector-all |
372 | # Returns true if gcc upgrades fstack-protector to fstack-protector-all |
| 376 | gcc-specs-ssp-to-all() { |
373 | gcc-specs-ssp-to-all() { |
| 377 | local directive |
374 | local directive |
| 378 | directive=$(gcc-specs-directive cc1) |
375 | directive=$(gcc-specs-directive cc1) |
| 379 | 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}" ]]) |
| 380 | } |
383 | } |
| 381 | |
384 | |
| 382 | |
385 | |
| 383 | # @FUNCTION: gen_usr_ldscript |
386 | # @FUNCTION: gen_usr_ldscript |
| 384 | # @USAGE: <list of libs to create linker scripts for> |
387 | # @USAGE: <list of libs to create linker scripts for> |