| 1 | # Copyright 1999-2009 Gentoo Foundation |
1 | # Copyright 1999-2009 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/flag-o-matic.eclass,v 1.132 2009/01/21 00:42:20 gengor Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/flag-o-matic.eclass,v 1.148 2010/05/08 03:47:41 dirtyepic Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: flag-o-matic.eclass |
5 | # @ECLASS: flag-o-matic.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # toolchain@gentoo.org |
7 | # toolchain@gentoo.org |
| 8 | # @BLURB: common functions to manipulate and query toolchain flags |
8 | # @BLURB: common functions to manipulate and query toolchain flags |
| … | |
… | |
| 39 | export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident" |
39 | export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident" |
| 40 | export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w" |
40 | export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w" |
| 41 | fi |
41 | fi |
| 42 | # allow a bunch of flags that negate features / control ABI |
42 | # allow a bunch of flags that negate features / control ABI |
| 43 | ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all \ |
43 | ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all \ |
| 44 | -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow" |
44 | -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer" |
| 45 | ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs \ |
45 | ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs \ |
| 46 | -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow \ |
46 | -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 \ |
|
|
47 | -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow \ |
|
|
48 | -mno-popcnt -mno-abm \ |
| 47 | -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 \ |
49 | -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt \ |
| 48 | -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu \ |
50 | -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu \ |
| 49 | -mieee -mieee-with-inexact -mschedule \ |
51 | -mieee -mieee-with-inexact -mschedule \ |
| 50 | -mtls-direct-seg-refs -mno-tls-direct-seg-refs \ |
52 | -mtls-direct-seg-refs -mno-tls-direct-seg-refs \ |
| 51 | -mflat -mno-flat -mno-faster-structs -mfaster-structs \ |
53 | -mflat -mno-flat -mno-faster-structs -mfaster-structs \ |
| 52 | -m32 -m64 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC \ |
54 | -m32 -m64 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC \ |
| 53 | -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias \ |
55 | -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias \ |
| 54 | -msecure-plt -m*-toc -D* -U*" |
56 | -msecure-plt -m*-toc -D* -U*" |
|
|
57 | |
|
|
58 | # 4.5 |
|
|
59 | ALLOWED_FLAGS="${ALLOWED_FLAGS} -mno-fma4 -mno-movbe -mno-xop -mno-lwp" |
| 55 | |
60 | |
| 56 | # {C,CXX,F,FC}FLAGS that we are think is ok, but needs testing |
61 | # {C,CXX,F,FC}FLAGS that we are think is ok, but needs testing |
| 57 | # NOTE: currently -Os have issues with gcc3 and K6* arch's |
62 | # NOTE: currently -Os have issues with gcc3 and K6* arch's |
| 58 | export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks" |
63 | export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks" |
| 59 | return 0 |
64 | return 0 |
| … | |
… | |
| 134 | [[ -z $* ]] && return 0 |
139 | [[ -z $* ]] && return 0 |
| 135 | export CPPFLAGS="${CPPFLAGS} $*" |
140 | export CPPFLAGS="${CPPFLAGS} $*" |
| 136 | return 0 |
141 | return 0 |
| 137 | } |
142 | } |
| 138 | |
143 | |
|
|
144 | # @FUNCTION: append-cflags |
|
|
145 | # @USAGE: <flags> |
|
|
146 | # @DESCRIPTION: |
|
|
147 | # Add extra <flags> to the current CFLAGS. |
|
|
148 | append-cflags() { |
|
|
149 | [[ -z $* ]] && return 0 |
|
|
150 | export CFLAGS="${CFLAGS} $*" |
|
|
151 | return 0 |
|
|
152 | } |
|
|
153 | |
| 139 | # @FUNCTION: append-cxxflags |
154 | # @FUNCTION: append-cxxflags |
| 140 | # @USAGE: <flags> |
155 | # @USAGE: <flags> |
| 141 | # @DESCRIPTION: |
156 | # @DESCRIPTION: |
| 142 | # Add extra <flags> to the current CXXFLAGS. |
157 | # Add extra <flags> to the current CXXFLAGS. |
| 143 | append-cxxflags() { |
158 | append-cxxflags() { |
| … | |
… | |
| 169 | # @USAGE: <flags> |
184 | # @USAGE: <flags> |
| 170 | # @DESCRIPTION: |
185 | # @DESCRIPTION: |
| 171 | # Add extra <flags> to your current {C,CXX,F,FC}FLAGS. |
186 | # Add extra <flags> to your current {C,CXX,F,FC}FLAGS. |
| 172 | append-flags() { |
187 | append-flags() { |
| 173 | [[ -z $* ]] && return 0 |
188 | [[ -z $* ]] && return 0 |
| 174 | export CFLAGS="${CFLAGS} $*" |
189 | append-cflags "$@" |
| 175 | export CXXFLAGS="${CXXFLAGS} $*" |
190 | append-cxxflags "$@" |
| 176 | export FFLAGS="${FFLAGS} $*" |
191 | append-fflags "$@" |
| 177 | export FCFLAGS="${FCFLAGS} $*" |
|
|
| 178 | return 0 |
192 | return 0 |
| 179 | } |
193 | } |
| 180 | |
194 | |
| 181 | # @FUNCTION: replace-flags |
195 | # @FUNCTION: replace-flags |
| 182 | # @USAGE: <old> <new> |
196 | # @USAGE: <old> <new> |
| … | |
… | |
| 312 | local NEW_CXXFLAGS="" |
326 | local NEW_CXXFLAGS="" |
| 313 | local NEW_FFLAGS="" |
327 | local NEW_FFLAGS="" |
| 314 | local NEW_FCFLAGS="" |
328 | local NEW_FCFLAGS="" |
| 315 | |
329 | |
| 316 | # Allow unstable C[XX]FLAGS if we are using unstable profile ... |
330 | # Allow unstable C[XX]FLAGS if we are using unstable profile ... |
| 317 | if has ~$(tc-arch) ${ACCEPT_KEYWORDS} ; then |
331 | if has "~$(tc-arch)" ${ACCEPT_KEYWORDS} ; then |
| 318 | ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}" |
332 | ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}" |
| 319 | fi |
333 | fi |
| 320 | |
334 | |
| 321 | set -f # disable pathname expansion |
335 | set -f # disable pathname expansion |
| 322 | |
336 | |
| … | |
… | |
| 655 | fi |
669 | fi |
| 656 | |
670 | |
| 657 | export CFLAGS CXXFLAGS |
671 | export CFLAGS CXXFLAGS |
| 658 | } |
672 | } |
| 659 | |
673 | |
|
|
674 | # @FUNCTION: append-libs |
|
|
675 | # @USAGE: <libs> |
|
|
676 | # @DESCRIPTION: |
|
|
677 | # Add extra <libs> to the current LIBS. |
|
|
678 | append-libs() { |
|
|
679 | [[ -z $* ]] && return 0 |
|
|
680 | local flag |
|
|
681 | for flag in "$@"; do |
|
|
682 | [[ ${flag} == -l* ]] && flag=${flag#-l} |
|
|
683 | export LIBS="${LIBS} -l${flag}" |
|
|
684 | done |
|
|
685 | |
|
|
686 | return 0 |
|
|
687 | } |
|
|
688 | |
| 660 | # @FUNCTION: append-ldflags |
689 | # @FUNCTION: append-ldflags |
| 661 | # @USAGE: <flags> |
690 | # @USAGE: <flags> |
| 662 | # @DESCRIPTION: |
691 | # @DESCRIPTION: |
| 663 | # Add extra <flags> to the current LDFLAGS. |
692 | # Add extra <flags> to the current LDFLAGS. |
| 664 | append-ldflags() { |
693 | append-ldflags() { |
| … | |
… | |
| 697 | set -- "$@" ${x//,/ } |
726 | set -- "$@" ${x//,/ } |
| 698 | done |
727 | done |
| 699 | echo "$@" |
728 | echo "$@" |
| 700 | } |
729 | } |
| 701 | |
730 | |
| 702 | # @FUNCTION: bindnow-flags |
731 | # @FUNCTION: no-as-needed |
| 703 | # @RETURN: Returns the flags to enable "now" binding in the current selected linker. |
732 | # @RETURN: Flag to disable asneeded behavior for use with append-ldflags. |
| 704 | # @DESCRIPTION: |
733 | no-as-needed() { |
| 705 | # DEPRECATED - Gets the flags needed for "NOW" binding |
734 | case $($(tc-getLD) -v 2>&1 </dev/null) in |
| 706 | bindnow-flags() { |
735 | *GNU*) # GNU ld |
| 707 | ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild" |
736 | echo "-Wl,--no-as-needed" ;; |
|
|
737 | esac |
| 708 | } |
738 | } |
| 709 | |
|
|
| 710 | |
739 | |
| 711 | # Some tests for when we screw with things and want to make |
740 | # Some tests for when we screw with things and want to make |
| 712 | # sure we didn't break anything |
741 | # sure we didn't break anything |
| 713 | #TESTS() { |
742 | #TESTS() { |
| 714 | # CFLAGS="-a -b -c=1" |
743 | # CFLAGS="-a -b -c=1" |