/[gentoo-x86]/eclass/multilib.eclass
Gentoo

Diff of /eclass/multilib.eclass

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

Revision 1.39 Revision 1.65
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2008 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/multilib.eclass,v 1.39 2005/10/07 03:39:15 eradicator Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/multilib.eclass,v 1.65 2008/06/01 01:37:29 vapier Exp $
4# 4
5# Author: Jeremy Huddleston <eradicator@gentoo.org> 5# @ECLASS: multilib.eclass
6# 6# @MAINTAINER:
7# amd64@gentoo.org
8# toolchain@gentoo.org
9# @BLURB: This eclass is for all functions pertaining to handling multilib configurations.
10# @DESCRIPTION:
7# This eclass is for all functions pertaining to handling multilib. 11# This eclass is for all functions pertaining to handling multilib configurations.
8# configurations.
9 12
10DESCRIPTION="Based on the ${ECLASS} eclass" 13___ECLASS_RECUR_MULTILIB="yes"
11 14[[ -z ${___ECLASS_RECUR_TOOLCHAIN_FUNCS} ]] && inherit toolchain-funcs
12# has_multilib_profile:
13# Return true if the current profile is a multilib profile and lists more than
14# one abi in ${MULTILIB_ABIS}. You might want to use this like
15# 'use multilib || has_multilib_profile' until all profiles utilizing the
16# 'multilib' use flag are removed from portage
17 15
18# is_final_abi: 16# is_final_abi:
19# Return true if ${ABI} is the final abi to be installed (and thus we are 17# Return true if ${ABI} is the final abi to be installed (and thus we are
20# on our last run through a src_* function. 18# on our last run through a src_* function.
21 19
100export LDFLAGS_default 98export LDFLAGS_default
101export CHOST_default=${CHOST_default:-${CHOST}} 99export CHOST_default=${CHOST_default:-${CHOST}}
102export CTARGET_default=${CTARGET_default:-${CTARGET:-${CHOST_default}}} 100export CTARGET_default=${CTARGET_default:-${CTARGET:-${CHOST_default}}}
103export LIBDIR_default=${CONF_LIBDIR:-"lib"} 101export LIBDIR_default=${CONF_LIBDIR:-"lib"}
104export CDEFINE_default="__unix__" 102export CDEFINE_default="__unix__"
103export KERNEL_ABI=${KERNEL_ABI:-${DEFAULT_ABI}}
105 104
106# has_multilib_profile() 105# @FUNCTION: has_multilib_profile
106# @DESCRIPTION:
107# Return true if the current profile is a multilib profile and lists more than
108# one abi in ${MULTILIB_ABIS}. When has_multilib_profile returns true, that
109# profile should enable the 'multilib' use flag. This is so you can DEPEND on
110# a package only for multilib or not multilib.
107has_multilib_profile() { 111has_multilib_profile() {
108 [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] 112 [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
109} 113}
110 114
115# @FUNCTION: get_libdir
116# @RETURN: the libdir for the selected ABI
117# @DESCRIPTION:
111# This function simply returns the desired lib directory. With portage 118# This function simply returns the desired lib directory. With portage
112# 2.0.51, we now have support for installing libraries to lib32/lib64 119# 2.0.51, we now have support for installing libraries to lib32/lib64
113# to accomidate the needs of multilib systems. It's no longer a good idea 120# to accomidate the needs of multilib systems. It's no longer a good idea
114# to assume all libraries will end up in lib. Replace any (sane) instances 121# to assume all libraries will end up in lib. Replace any (sane) instances
115# where lib is named directly with $(get_libdir) if possible. 122# where lib is named directly with $(get_libdir) if possible.
116#
117# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
118# 123#
119# Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004): 124# Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004):
120# Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set, 125# Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set,
121# fall back on old behavior. Any profile that has these set should also 126# fall back on old behavior. Any profile that has these set should also
122# depend on a newer version of portage (not yet released) which uses these 127# depend on a newer version of portage (not yet released) which uses these
129 else 134 else
130 get_abi_LIBDIR 135 get_abi_LIBDIR
131 fi 136 fi
132} 137}
133 138
139# @FUNCTION: get_multilibdir
140# @RETURN: Returns the multilibdir
134get_multilibdir() { 141get_multilibdir() {
135 if has_multilib_profile; then 142 if has_multilib_profile; then
136 eerror "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org" 143 eerror "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
137 exit 1 144 exit 1
138 fi 145 fi
139 echo ${CONF_MULTILIBDIR:=lib32} 146 echo ${CONF_MULTILIBDIR:=lib32}
140} 147}
141 148
149# @FUNCTION: get_libdir_override
150# @DESCRIPTION:
142# Sometimes you need to override the value returned by get_libdir. A good 151# Sometimes you need to override the value returned by get_libdir. A good
143# example of this is xorg-x11, where lib32 isnt a supported configuration, 152# example of this is xorg-x11, where lib32 isnt a supported configuration,
144# and where lib64 -must- be used on amd64 (for applications that need lib 153# and where lib64 -must- be used on amd64 (for applications that need lib
145# to be 32bit, such as adobe acrobat). Note that this override also bypasses 154# to be 32bit, such as adobe acrobat). Note that this override also bypasses
146# portage version sanity checking. 155# portage version sanity checking.
147# get_libdir_override expects one argument, the result get_libdir should 156# get_libdir_override expects one argument, the result get_libdir should
148# return: 157# return:
149# 158#
150# get_libdir_override lib64 159# get_libdir_override lib64
151#
152# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
153get_libdir_override() { 160get_libdir_override() {
154 if has_multilib_profile; then 161 if has_multilib_profile; then
155 eerror "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org" 162 eerror "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
156 exit 1 163 exit 1
157 fi 164 fi
158 CONF_LIBDIR="$1" 165 CONF_LIBDIR="$1"
159 CONF_LIBDIR_OVERRIDE="$1" 166 CONF_LIBDIR_OVERRIDE="$1"
160 LIBDIR_default="$1" 167 LIBDIR_default="$1"
161} 168}
162 169
163# get_abi_var <VAR> [<ABI>] 170# @FUNCTION: get_abi_var
171# @USAGE: <VAR> [ABI]
164# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults 172# @RETURN: returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
165# 173# @DESCRIPTION:
166# ex: 174# ex:
167# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32 175# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32
168# 176#
169# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)" 177# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)"
170# This will hopefully be added to portage soon... 178# This will hopefully be added to portage soon...
171# 179#
172# If <ABI> is not specified, ${ABI} is used. 180# If <ABI> is not specified, ${ABI} is used.
173# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used. 181# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
174# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string. 182# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
175#
176# Jeremy Huddleston <eradicator@gentoo.org>
177get_abi_var() { 183get_abi_var() {
178 local flag=$1 184 local flag=$1
179 local abi 185 local abi
180 if [ $# -gt 1 ]; then 186 if [ $# -gt 1 ]; then
181 abi=${2} 187 abi=${2}
189 195
190 local var="${flag}_${abi}" 196 local var="${flag}_${abi}"
191 echo ${!var} 197 echo ${!var}
192} 198}
193 199
200# @FUNCTION: get_abi_CFLAGS
201# @USAGE: [ABI]
202# @DESCRIPTION:
203# Alias for 'get_abi_var CFLAGS'
194get_abi_CFLAGS() { get_abi_var CFLAGS "$@"; } 204get_abi_CFLAGS() { get_abi_var CFLAGS "$@"; }
205
206# @FUNCTION: get_abi_ASFLAGS
207# @USAGE: [ABI]
208# @DESCRIPTION:
209# Alias for 'get_abi_var ASFLAGS'
210get_abi_ASFLAGS() { get_abi_var ASFLAGS "$@"; }
211
212# @FUNCTION: get_abi_LDFLAGS
213# @USAGE: [ABI]
214# @DESCRIPTION:
215# Alias for 'get_abi_var LDFLAGS'
195get_abi_LDFLAGS() { get_abi_var LDFLAGS "$@"; } 216get_abi_LDFLAGS() { get_abi_var LDFLAGS "$@"; }
217
218# @FUNCTION: get_abi_CHOST
219# @USAGE: [ABI]
220# @DESCRIPTION:
221# Alias for 'get_abi_var CHOST'
196get_abi_CHOST() { get_abi_var CHOST "$@"; } 222get_abi_CHOST() { get_abi_var CHOST "$@"; }
223
224# @FUNCTION: get_abi_CTARGET
225# @USAGE: [ABI]
226# @DESCRIPTION:
227# Alias for 'get_abi_var CTARGET'
197get_abi_CTARGET() { get_abi_var CTARGET "$@"; } 228get_abi_CTARGET() { get_abi_var CTARGET "$@"; }
229
230# @FUNCTION: get_abi_FAKE_TARGETS
231# @USAGE: [ABI]
232# @DESCRIPTION:
233# Alias for 'get_abi_var FAKE_TARGETS'
198get_abi_FAKE_TARGETS() { get_abi_var FAKE_TARGETS "$@"; } 234get_abi_FAKE_TARGETS() { get_abi_var FAKE_TARGETS "$@"; }
235
236# @FUNCTION: get_abi_CDEFINE
237# @USAGE: [ABI]
238# @DESCRIPTION:
239# Alias for 'get_abi_var CDEFINE'
199get_abi_CDEFINE() { get_abi_var CDEFINE "$@"; } 240get_abi_CDEFINE() { get_abi_var CDEFINE "$@"; }
241
242# @FUNCTION: get_abi_LIBDIR
243# @USAGE: [ABI]
244# @DESCRIPTION:
245# Alias for 'get_abi_var LIBDIR'
200get_abi_LIBDIR() { get_abi_var LIBDIR "$@"; } 246get_abi_LIBDIR() { get_abi_var LIBDIR "$@"; }
201 247
248# @FUNCTION: get_install_abis
249# @DESCRIPTION:
202# Return a list of the ABIs we want to install for with 250# Return a list of the ABIs we want to install for with
203# the last one in the list being the default. 251# the last one in the list being the default.
204get_install_abis() { 252get_install_abis() {
205 local order="" 253 local order=""
206 254
207 if [[ -z ${MULTILIB_ABIS} ]] ; then 255 if [[ -z ${MULTILIB_ABIS} ]] ; then
208 echo "default" 256 echo "default"
209 return 0 257 return 0
210 fi 258 fi
211 259
212 if hasq multilib-pkg-force ${RESTRICT} || 260 if [[ ${EMULTILIB_PKG} == "true" ]] ; then
213 { hasq multilib-pkg ${FEATURES} && hasq multilib-pkg ${RESTRICT}; }; then
214 for x in ${MULTILIB_ABIS} ; do 261 for x in ${MULTILIB_ABIS} ; do
215 if [[ ${x} != "${DEFAULT_ABI}" ]] ; then 262 if [[ ${x} != "${DEFAULT_ABI}" ]] ; then
216 hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}" 263 hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}"
217 fi 264 fi
218 done 265 done
237 284
238 echo ${order} 285 echo ${order}
239 return 0 286 return 0
240} 287}
241 288
289# @FUNCTION: get_all_abis
290# @DESCRIPTION:
242# Return a list of the ABIs supported by this profile. 291# Return a list of the ABIs supported by this profile.
243# the last one in the list being the default. 292# the last one in the list being the default.
244get_all_abis() { 293get_all_abis() {
245 local order="" 294 local order=""
246 295
247 if [ -z "${MULTILIB_ABIS}" ]; then 296 if [[ -z ${MULTILIB_ABIS} ]] ; then
248 echo "default" 297 echo "default"
249 return 0 298 return 0
250 fi 299 fi
251 300
252 for x in ${MULTILIB_ABIS}; do 301 for x in ${MULTILIB_ABIS}; do
253 if [ "${x}" != "${DEFAULT_ABI}" ]; then 302 if [[ ${x} != ${DEFAULT_ABI} ]] ; then
254 order="${order:+${order }}${x}" 303 order="${order:+${order} }${x}"
255 fi 304 fi
256 done 305 done
257 order="${order:+${order} }${DEFAULT_ABI}" 306 order="${order:+${order} }${DEFAULT_ABI}"
258 307
259 echo ${order} 308 echo ${order}
260 return 0 309 return 0
261} 310}
262 311
263# get_all_libdirs() 312# @FUNCTION: get_all_libdirs
313# @DESCRIPTION:
264# Returns a list of all the libdirs used by this profile. This includes 314# Returns a list of all the libdirs used by this profile. This includes
265# those that might not be touched by the current ebuild. 315# those that might not be touched by the current ebuild and always includes
316# "lib".
266get_all_libdirs() { 317get_all_libdirs() {
267 local libdirs="lib" 318 local libdirs="lib"
268 local abi 319 local abi
269 local dir 320 local dir
270 321
271 if has_multilib_profile; then
272 for abi in ${MULTILIB_ABIS}; do 322 for abi in ${MULTILIB_ABIS}; do
273 [ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})" 323 [ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})"
274 done 324 done
275 elif [ -n "${CONF_LIBDIR}" ]; then
276 for dir in ${CONF_LIBDIR} ${CONF_MULTILIBDIR:-lib32}; do
277 [ "${dir}" != "lib" ] && libdirs="${libdirs} ${dir}"
278 done
279 fi
280 325
281 echo "${libdirs}" 326 echo "${libdirs}"
282} 327}
283 328
329# @FUNCTION: is_final_abi
330# @DESCRIPTION:
284# Return true if ${ABI} is the last ABI on our list (or if we're not 331# Return true if ${ABI} is the last ABI on our list (or if we're not
285# using the new multilib configuration. This can be used to determine 332# using the new multilib configuration. This can be used to determine
286# if we're in the last (or only) run through src_{unpack,compile,install} 333# if we're in the last (or only) run through src_{unpack,compile,install}
287is_final_abi() { 334is_final_abi() {
288 has_multilib_profile || return 0 335 has_multilib_profile || return 0
289 local ALL_ABIS=$(get_install_abis) 336 local ALL_ABIS=$(get_install_abis)
290 local LAST_ABI=${ALL_ABIS/* /} 337 local LAST_ABI=${ALL_ABIS/* /}
291 [[ ${LAST_ABI} == ${ABI} ]] 338 [[ ${LAST_ABI} == ${ABI} ]]
292} 339}
293 340
341# @FUNCTION: number_abis
342# @DESCRIPTION:
294# echo the number of ABIs we will be installing for 343# echo the number of ABIs we will be installing for
295number_abis() { 344number_abis() {
296 get_install_abis | wc -w 345 get_install_abis | wc -w
297} 346}
298 347
299# get_ml_incdir [<include dir> [<ABI>]] 348# @FUNCTION: get_ml_incdir
349# @USAGE: [include_dir] [ABI]
350# @DESCRIPTION:
300# include dir defaults to /usr/include 351# include dir defaults to /usr/include
301# ABI defaults to ${ABI} or ${DEFAULT_ABI} 352# ABI defaults to ${ABI} or ${DEFAULT_ABI}
353#
354# If a multilib include dir is associated with the passed include dir, then
355# we return it, otherwise, we just echo back the include dir. This is
356# neccessary when a built script greps header files rather than testing them
357# via #include (like perl) to figure out features.
302get_ml_incdir() { 358get_ml_incdir() {
303 local dir=/usr/include 359 local dir=/usr/include
304 360
305 if [[ $# -gt 0 ]]; then 361 if [[ $# -gt 0 ]]; then
306 incdir=$1 362 incdir=$1
323 else 379 else
324 echo ${dir} 380 echo ${dir}
325 fi 381 fi
326} 382}
327 383
328# prep_ml_includes: 384# @FUNCTION: prep_ml_includes
329# 385# @DESCRIPTION:
330# Some includes (include/asm, glibc, etc) are ABI dependent. In this case, 386# Some includes (include/asm, glibc, etc) are ABI dependent. In this case,
331# We can install them in different locations for each ABI and create a common 387# We can install them in different locations for each ABI and create a common
332# header which includes the right one based on CDEFINE_${ABI}. If your 388# header which includes the right one based on CDEFINE_${ABI}. If your
333# package installs ABI-specific headers, just add 'prep_ml_includes' to the 389# package installs ABI-specific headers, just add 'prep_ml_includes' to the
334# end of your src_install(). It takes a list of directories that include 390# end of your src_install(). It takes a list of directories that include
335# files are installed in (default is /usr/include if none are passed). 391# files are installed in (default is /usr/include if none are passed).
336# 392#
337# Example: 393# Example:
338# src_install() { 394# src_install() {
339# ... 395# ...
340# prep_ml_includes /usr/qt/3/include 396# prep_ml_includes /usr/qt/3/include
341# } 397# }
342
343prep_ml_includes() { 398prep_ml_includes() {
344 if [[ $(number_abis) -gt 1 ]] ; then 399 if [[ $(number_abis) -gt 1 ]] ; then
345 local dir 400 local dir
346 local dirs 401 local dirs
347 local base 402 local base
378 done 433 done
379 fi 434 fi
380 fi 435 fi
381} 436}
382 437
438# @FUNCTION: create_ml_includes
439# @USAGE: <include_dir> <symbol_1>:<dir_1> [<symbol_2>:<dir_2>...]
440# @DESCRIPTION:
383# If you need more control than prep_ml_includes can offer (like linux-headers 441# If you need more control than prep_ml_includes can offer (like linux-headers
384# for the asm-* dirs, then use create_ml_includes. The firs argument is the 442# for the asm-* dirs, then use create_ml_includes. The firs argument is the
385# common dir. The remaining args are of the form <symbol>:<dir> where 443# common dir. The remaining args are of the form <symbol>:<dir> where
386# <symbol> is what is put in the #ifdef for choosing that dir. 444# <symbol> is what is put in the #ifdef for choosing that dir.
387# 445#
388# Ideas for this code came from debian's sparc-linux headers package. 446# Ideas for this code came from debian's sparc-linux headers package.
389# 447#
390# Example: 448# Example:
391# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64 449# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64
392# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64 450# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64
451#
452# Warning: Be careful with the ordering here. The default ABI has to be the
453# last, because it is always defined (by GCC)
393create_ml_includes() { 454create_ml_includes() {
394 local dest=$1 455 local dest=$1
395 shift 456 shift
396 local basedirs=$(create_ml_includes-listdirs "$@") 457 local basedirs=$(create_ml_includes-listdirs "$@")
397 458
530 echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@" 591 echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@"
531 # exit because we'll likely be called from a subshell 592 # exit because we'll likely be called from a subshell
532 exit 1 593 exit 1
533} 594}
534 595
596# @FUNCTION: get_libname
597# @USAGE: [version]
598# @DESCRIPTION:
599# Returns libname with proper suffix {.so,.dylib} and optionally supplied version
600# for ELF/MACH-O shared objects
601#
602# Example:
603# get_libname libfoo ${PV}
604# Returns: libfoo.so.${PV} (ELF) || libfoo.${PV}.dylib (MACH)
535get_libname() { 605get_libname() {
606 local libname
536 local ver=$1 607 local ver=$1
537 if use userland_Darwin ; then 608 case ${CHOST} in
609 mingw*|*-mingw*) libname="dll";;
610 *-darwin*) libname="dylib";;
611 *) libname="so";;
612 esac
613
538 if [ -z ${ver} ] ; then 614 if [[ -z $* ]] ; then
539 echo ".dylib" 615 echo ".${libname}"
540 else
541 echo ".${ver}.dylib"
542 fi
543 else 616 else
544 if [ -z ${ver} ] ; then 617 for ver in "$@" ; do
545 echo ".so" 618 case ${CHOST} in
546 else 619 *-darwin*) echo ".${ver}.${libname}";;
547 echo ".so.${ver}" 620 *) echo ".${libname}.${ver}";;
548 fi 621 esac
622 done
549 fi 623 fi
550} 624}
551 625
552# This is for the toolchain to setup profile variables when pulling in 626# This is for the toolchain to setup profile variables when pulling in
553# a crosscompiler (and thus they aren't set in the profile) 627# a crosscompiler (and thus they aren't set in the profile)
554multilib_env() { 628multilib_env() {
555 local CTARGET=$1
556 local CTARGET_post=${CTARGET#*-} 629 local CTARGET=${1:-${CTARGET}}
557 630
558 case ${CTARGET} in 631 case ${CTARGET} in
559 x86_64*) 632 x86_64*)
560 export CFLAGS_x86=${CFLAGS_x86--m32} 633 export CFLAGS_x86=${CFLAGS_x86--m32}
561 export CHOST_x86=i686-${CTARGET_post} 634 export CHOST_x86=${CTARGET/x86_64/i686}
562 export CTARGET_x86=i686-${CTARGET_post} 635 export CTARGET_x86=${CHOST_x86}
563 export CDEFINE_x86="__i386__" 636 export CDEFINE_x86="__i386__"
564 export LIBDIR_x86="lib" 637 export LIBDIR_x86="lib"
565 638
566 export CFLAGS_amd64=${CFLAGS_amd64--m64} 639 export CFLAGS_amd64=${CFLAGS_amd64--m64}
567 export CHOST_amd64=x86_64-${CTARGET_post} 640 export CHOST_amd64=${CTARGET}
568 export CTARGET_amd64=x86_64-${CTARGET_post} 641 export CTARGET_amd64=${CHOST_amd64}
569 export CDEFINE_amd64="__x86_64__" 642 export CDEFINE_amd64="__x86_64__"
570 export LIBDIR_amd64="lib64" 643 export LIBDIR_amd64="lib64"
571 644
572 export MULTILIB_ABIS="amd64 x86" 645 export MULTILIB_ABIS="amd64 x86"
573 export DEFAULT_ABI="amd64" 646 export DEFAULT_ABI="amd64"
574 ;; 647 ;;
575 mips64*) 648 mips64*)
576 export CFLAGS_o32=${CFLAGS_o32--mabi=32} 649 export CFLAGS_o32=${CFLAGS_o32--mabi=32}
577 export CHOST_o32=mips-${CTARGET_post} 650 export CHOST_o32=${CTARGET/mips64/mips}
578 export CTARGET_o32=mips-${CTARGET_post} 651 export CTARGET_o32=${CHOST_o32}
579 export CDEFINE_o32="_MIPS_SIM == _ABIO32" 652 export CDEFINE_o32="_MIPS_SIM == _ABIO32"
580 export LIBDIR_o32="lib" 653 export LIBDIR_o32="lib"
581 654
582 export CFLAGS_n32=${CFLAGS_n32--mabi=n32} 655 export CFLAGS_n32=${CFLAGS_n32--mabi=n32}
583 export CHOST_n32=mips64-${CTARGET_post} 656 export CHOST_n32=${CTARGET}
584 export CTARGET_n32=mips64-${CTARGET_post} 657 export CTARGET_n32=${CHOST_n32}
585 export CDEFINE_n32="_MIPS_SIM == _ABIN32" 658 export CDEFINE_n32="_MIPS_SIM == _ABIN32"
586 export LIBDIR_n32="lib32" 659 export LIBDIR_n32="lib32"
587 660
588 export CFLAGS_n64=${CFLAGS_n64--mabi=64} 661 export CFLAGS_n64=${CFLAGS_n64--mabi=64}
589 export CHOST_n64=mips64-${CTARGET_post} 662 export CHOST_n64=${CTARGET}
590 export CTARGET_n64=mips64-${CTARGET_post} 663 export CTARGET_n64=${CHOST_n64}
591 export CDEFINE_n64="_MIPS_SIM == _ABI64" 664 export CDEFINE_n64="_MIPS_SIM == _ABI64"
592 export LIBDIR_n64="lib64" 665 export LIBDIR_n64="lib64"
593 666
594 export MULTILIB_ABIS="n64 n32 o32" 667 export MULTILIB_ABIS="n64 n32 o32"
595 export DEFAULT_ABI="n32" 668 export DEFAULT_ABI="n32"
596 ;; 669 ;;
597 powerpc64*) 670 powerpc64*)
598 export CFLAGS_ppc=${CFLAGS_ppc--m32} 671 export CFLAGS_ppc=${CFLAGS_ppc--m32}
599 export CHOST_ppc=powerpc-${CTARGET_post} 672 export CHOST_ppc=${CTARGET/powerpc64/powerpc}
600 export CTARGET_ppc=powerpc-${CTARGET_post} 673 export CTARGET_ppc=${CHOST_ppc}
601 export CDEFINE_ppc="!__powerpc64__" 674 export CDEFINE_ppc="!__powerpc64__"
602 export LIBDIR_ppc="lib" 675 export LIBDIR_ppc="lib"
603 676
604 export CFLAGS_ppc64=${CFLAGS_ppc64--m64} 677 export CFLAGS_ppc64=${CFLAGS_ppc64--m64}
605 export CHOST_ppc64=powerpc64-${CTARGET_post} 678 export CHOST_ppc64=${CTARGET}
606 export CTARGET_ppc64=powerpc64-${CTARGET_post} 679 export CTARGET_ppc64=${CHOST_ppc64}
607 export CDEFINE_ppc64="__powerpc64__" 680 export CDEFINE_ppc64="__powerpc64__"
608 export LIBDIR_ppc64="lib64" 681 export LIBDIR_ppc64="lib64"
609 682
610 export MULTILIB_ABIS="ppc64 ppc" 683 export MULTILIB_ABIS="ppc64 ppc"
611 export DEFAULT_ABI="ppc64" 684 export DEFAULT_ABI="ppc64"
612 ;; 685 ;;
686 s390x*)
687 export CFLAGS_s390=${CFLAGS_s390--m31} # the 31 is not a typo
688 export CHOST_s390=${CTARGET/s390x/s390}
689 export CTARGET_s390=${CHOST_s390}
690 export CDEFINE_s390="!__s390x__"
691 export LIBDIR_s390="lib"
692
693 export CFLAGS_s390x=${CFLAGS_s390x--m64}
694 export CHOST_s390x=${CTARGET}
695 export CTARGET_s390x=${CHOST_s390x}
696 export CDEFINE_s390x="__s390x__"
697 export LIBDIR_s390x="lib64"
698
699 export MULTILIB_ABIS="s390x s390"
700 export DEFAULT_ABI="s390x"
701 ;;
613 sparc64*) 702 sparc64*)
614 export CFLAGS_sparc32=${CFLAGS_sparc32--m32} 703 export CFLAGS_sparc32=${CFLAGS_sparc32--m32}
615 export CHOST_sparc32=sparc-${CTARGET_post} 704 export CHOST_sparc32=${CTARGET/sparc64/sparc}
616 export CTARGET_sparc32=sparc-${CTARGET_post} 705 export CTARGET_sparc32=${CHOST_sparc32}
617 export CDEFINE_sparc32="!__arch64__" 706 export CDEFINE_sparc32="!__arch64__"
618 export LIBDIR_sparc32="lib" 707 export LIBDIR_sparc32="lib"
619 708
620 export CFLAGS_sparc64=${CFLAGS_sparc64--m64} 709 export CFLAGS_sparc64=${CFLAGS_sparc64--m64}
621 export CHOST_sparc64=sparc64-${CTARGET_post} 710 export CHOST_sparc64=${CTARGET}
622 export CTARGET_sparc64=sparc64-${CTARGET_post} 711 export CTARGET_sparc64=${CHOST_sparc64}
623 export CDEFINE_sparc64="__arch64__" 712 export CDEFINE_sparc64="__arch64__"
624 export LIBDIR_sparc64="lib64" 713 export LIBDIR_sparc64="lib64"
625 714
626 export MULTILIB_ABIS="sparc64 sparc32" 715 export MULTILIB_ABIS="sparc64 sparc32"
627 export DEFAULT_ABI="sparc64" 716 export DEFAULT_ABI="sparc64"
630 export MULTILIB_ABIS="default" 719 export MULTILIB_ABIS="default"
631 export DEFAULT_ABI="default" 720 export DEFAULT_ABI="default"
632 ;; 721 ;;
633 esac 722 esac
634} 723}
724
725# @FUNCTION: multilib_toolchain_setup
726# @DESCRIPTION:
727# Hide multilib details here for packages which are forced to be compiled for a
728# specific ABI when run on another ABI (like x86-specific packages on amd64)
729multilib_toolchain_setup() {
730 export ABI=$1
731
732 if has_version app-admin/eselect-compiler ; then
733 # Binutils doesn't have wrappers for ld and as (yet). Eventually it
734 # will, and all this can just be handled with CHOST.
735 export LD="ld $(get_abi_LDFLAGS $1)"
736 export AS="as $(get_abi_ASFLAGS $1)"
737
738 export CHOST=$(get_abi_CHOST $1)
739 export CBUILD=$(get_abi_CHOST $1)
740 else
741 tc-export CC
742 fi
743}

Legend:
Removed from v.1.39  
changed lines
  Added in v.1.65

  ViewVC Help
Powered by ViewVC 1.1.20