/[gentoo-x86]/eclass/toolchain-funcs.eclass
Gentoo

Diff of /eclass/toolchain-funcs.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.58 Revision 1.64
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2006 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.58 2006/04/02 10:10:59 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.64 2007/01/07 11:39:08 vapier Exp $
4# 4#
5# Author: Toolchain Ninjas <toolchain@gentoo.org> 5# Author: Toolchain Ninjas <toolchain@gentoo.org>
6# 6#
7# This eclass contains (or should) functions to get common info 7# This eclass contains (or should) functions to get common info
8# about the toolchain (libc/compiler/binutils/etc...) 8# about the toolchain (libc/compiler/binutils/etc...)
39tc-getCPP() { tc-getPROG CPP cpp "$@"; } 39tc-getCPP() { tc-getPROG CPP cpp "$@"; }
40# Returns the name of the C++ compiler 40# Returns the name of the C++ compiler
41tc-getCXX() { tc-getPROG CXX g++ "$@"; } 41tc-getCXX() { tc-getPROG CXX g++ "$@"; }
42# Returns the name of the linker 42# Returns the name of the linker
43tc-getLD() { tc-getPROG LD ld "$@"; } 43tc-getLD() { tc-getPROG LD ld "$@"; }
44# Returns the name of the strip prog
45tc-getSTRIP() { tc-getPROG STRIP strip "$@"; }
44# Returns the name of the symbol/object thingy 46# Returns the name of the symbol/object thingy
45tc-getNM() { tc-getPROG NM nm "$@"; } 47tc-getNM() { tc-getPROG NM nm "$@"; }
46# Returns the name of the archiver indexer 48# Returns the name of the archiver indexer
47tc-getRANLIB() { tc-getPROG RANLIB ranlib "$@"; } 49tc-getRANLIB() { tc-getPROG RANLIB ranlib "$@"; }
50# Returns the name of the fortran 77 compiler
51tc-getF77() { tc-getPROG F77 f77 "$@"; }
52# Returns the name of the fortran 90 compiler
53tc-getF90() { tc-getPROG F90 gfortran "$@"; }
48# Returns the name of the fortran compiler 54# Returns the name of the fortran compiler
49tc-getF77() { tc-getPROG F77 f77 "$@"; } 55tc-getFORTRAN() { tc-getPROG FORTRAN gfortran "$@"; }
50# Returns the name of the java compiler 56# Returns the name of the java compiler
51tc-getGCJ() { tc-getPROG GCJ gcj "$@"; } 57tc-getGCJ() { tc-getPROG GCJ gcj "$@"; }
52 58
53# Returns the name of the C compiler for build 59# Returns the name of the C compiler for build
54tc-getBUILD_CC() { 60tc-getBUILD_CC() {
144 tc-ninja_magic_to_arch kern $@ 150 tc-ninja_magic_to_arch kern $@
145} 151}
146tc-arch() { 152tc-arch() {
147 tc-ninja_magic_to_arch portage $@ 153 tc-ninja_magic_to_arch portage $@
148} 154}
149tc-endian() {
150 local host=$1
151 [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}
152 host=${host%%-*}
153
154 case ${host} in
155 alpha*) echo big;;
156 arm*b*) echo big;;
157 arm*) echo little;;
158 cris*) echo little;;
159 hppa*) echo big;;
160 i?86*) echo little;;
161 ia64*) echo little;;
162 m68*) echo big;;
163 mips*l*) echo little;;
164 mips*) echo big;;
165 powerpc*) echo big;;
166 s390*) echo big;;
167 sh*b*) echo big;;
168 sh*) echo little;;
169 sparc*) echo big;;
170 x86_64*) echo little;;
171 *) echo wtf;;
172 esac
173}
174 155
175# Returns the version as by `$CC -dumpversion` 156# Returns the version as by `$CC -dumpversion`
176gcc-fullversion() { 157gcc-fullversion() {
177 echo "$($(tc-getCC) -dumpversion)" 158 $(tc-getCC "$@") -dumpversion
178} 159}
179# Returns the version, but only the <major>.<minor> 160# Returns the version, but only the <major>.<minor>
180gcc-version() { 161gcc-version() {
181 echo "$(gcc-fullversion | cut -f1,2 -d.)" 162 gcc-fullversion "$@" | cut -f1,2 -d.
182} 163}
183# Returns the Major version 164# Returns the Major version
184gcc-major-version() { 165gcc-major-version() {
185 echo "$(gcc-version | cut -f1 -d.)" 166 gcc-version "$@" | cut -f1 -d.
186} 167}
187# Returns the Minor version 168# Returns the Minor version
188gcc-minor-version() { 169gcc-minor-version() {
189 echo "$(gcc-version | cut -f2 -d.)" 170 gcc-version "$@" | cut -f2 -d.
190} 171}
191# Returns the Micro version 172# Returns the Micro version
192gcc-micro-version() { 173gcc-micro-version() {
193 echo "$(gcc-fullversion | cut -f3 -d. | cut -f1 -d-)" 174 gcc-fullversion "$@" | cut -f3 -d. | cut -f1 -d-
194} 175}
195 176
196# Returns requested gcc specs directive 177# Returns requested gcc specs directive
197# Note; later specs normally overwrite earlier ones; however if a later 178# Note; later specs normally overwrite earlier ones; however if a later
198# spec starts with '+' then it appends. 179# spec starts with '+' then it appends.
239gcc-specs-ssp-to-all() { 220gcc-specs-ssp-to-all() {
240 local directive 221 local directive
241 directive=$(gcc-specs-directive cc1) 222 directive=$(gcc-specs-directive cc1)
242 return $([[ ${directive/\{!fno-stack-protector-all:} != ${directive} ]]) 223 return $([[ ${directive/\{!fno-stack-protector-all:} != ${directive} ]])
243} 224}
225
226
227# This function generate linker scripts in /usr/lib for dynamic
228# libs in /lib. This is to fix linking problems when you have
229# the .so in /lib, and the .a in /usr/lib. What happens is that
230# in some cases when linking dynamic, the .a in /usr/lib is used
231# instead of the .so in /lib due to gcc/libtool tweaking ld's
232# library search path. This cause many builds to fail.
233# See bug #4411 for more info.
234#
235# To use, simply call:
236#
237# gen_usr_ldscript libfoo.so
238#
239# Note that you should in general use the unversioned name of
240# the library, as ldconfig should usually update it correctly
241# to point to the latest version of the library present.
242_tc_gen_usr_ldscript() {
243 local lib libdir=$(get_libdir) output_format=""
244 # Just make sure it exists
245 dodir /usr/${libdir}
246
247 # OUTPUT_FORMAT gives hints to the linker as to what binary format
248 # is referenced ... makes multilib saner
249 output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p')
250 [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )"
251
252 for lib in "$@" ; do
253 if [[ ${USERLAND} == "Darwin" ]] ; then
254 ewarn "Not creating fake dynamic library for $lib on Darwin;"
255 ewarn "making a symlink instead."
256 dosym "/${libdir}/${lib}" "/usr/${libdir}/${lib}"
257 else
258 cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
259 /* GNU ld script
260 Since Gentoo has critical dynamic libraries
261 in /lib, and the static versions in /usr/lib,
262 we need to have a "fake" dynamic lib in /usr/lib,
263 otherwise we run into linking problems.
264
265 See bug http://bugs.gentoo.org/4411 for more info.
266 */
267 ${output_format}
268 GROUP ( /${libdir}/${lib} )
269 END_LDSCRIPT
270 fi
271 fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"
272 done
273}
274gen_usr_ldscript() { _tc_gen_usr_ldscript "$@" ; }

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.64

  ViewVC Help
Powered by ViewVC 1.1.20