2007-09-14 21:17:59 +00:00
|
|
|
# Compute x86-specific values
|
|
|
|
|
2009-11-17 11:51:57 +01:00
|
|
|
# This one really needs a little love! :-(
|
2007-09-14 21:17:59 +00:00
|
|
|
|
2008-10-23 13:00:45 +00:00
|
|
|
CT_DoArchTupleValues() {
|
2009-11-17 11:51:57 +01:00
|
|
|
# Override the architecture part of the tuple:
|
|
|
|
if [ "${CT_ARCH_64}" = "y" ]; then
|
|
|
|
CT_TARGET_ARCH=x86_64
|
|
|
|
else
|
|
|
|
arch="${CT_ARCH_ARCH}"
|
|
|
|
[ -z "${arch}" ] && arch="${CT_ARCH_TUNE}"
|
|
|
|
case "${arch}" in
|
|
|
|
"") CT_TARGET_ARCH=i386;;
|
|
|
|
i386|i486|i586|i686) CT_TARGET_ARCH="${arch}";;
|
|
|
|
winchip*) CT_TARGET_ARCH=i486;;
|
|
|
|
pentium|pentium-mmx|c3*) CT_TARGET_ARCH=i586;;
|
|
|
|
pentiumpro|pentium*|athlon*) CT_TARGET_ARCH=i686;;
|
2011-11-17 14:18:44 +01:00
|
|
|
prescott) CT_TARGET_ARCH=i686;;
|
2009-11-17 11:51:57 +01:00
|
|
|
*) CT_TARGET_ARCH=i586;;
|
|
|
|
esac
|
|
|
|
fi
|
2013-01-20 12:58:22 +00:00
|
|
|
CT_TARGET_ARCH="${CT_TARGET_ARCH}${CT_ARCH_SUFFIX}"
|
2016-05-21 13:19:42 -07:00
|
|
|
|
|
|
|
# Shouldn't be possible to specify this (CT_TARGET_SYS is not specified by the user,
|
|
|
|
# it is computed by scripts/functions from libc choices). But trap if such invalid
|
|
|
|
# values ever come from the caller:
|
|
|
|
case "${CT_TARGET_ARCH}-${CT_TARGET_SYS}" in
|
|
|
|
i[34567]86-gnux32)
|
|
|
|
CT_DoLog ERROR "Invalid CT_TARGET: i[34567]86-<vendor>-<os>-gnux32 is invalid."
|
|
|
|
CT_DoLog ERROR "CT_TARGET: ${CT_TARGET}"
|
|
|
|
CT_Abort "Go read: https://wiki.debian.org/Multiarch/Tuples"
|
|
|
|
;;
|
|
|
|
esac
|
2007-09-14 21:17:59 +00:00
|
|
|
}
|
2016-05-21 13:16:52 -07:00
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Get multilib architecture-specific target
|
2016-04-03 10:26:24 -07:00
|
|
|
# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
|
2016-05-21 13:16:52 -07:00
|
|
|
CT_DoArchMultilibTarget ()
|
|
|
|
{
|
2016-04-03 10:26:24 -07:00
|
|
|
local target_var="${1}"; shift
|
2016-05-21 13:16:52 -07:00
|
|
|
local -a multi_flags=( "$@" )
|
2016-04-03 10:26:24 -07:00
|
|
|
local target_
|
2016-05-21 13:16:52 -07:00
|
|
|
|
|
|
|
local bit32=false
|
|
|
|
local bit64=false
|
|
|
|
local abi_dflt=false
|
|
|
|
local abi_x32=false
|
|
|
|
|
|
|
|
for m in "${multi_flags[@]}"; do
|
|
|
|
case "$m" in
|
|
|
|
-m32) bit32=true; abi_dflt=true;;
|
|
|
|
-m64) bit64=true; abi_dflt=true;;
|
|
|
|
-mx32) bit64=true; abi_x32=true;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2016-04-03 10:26:24 -07:00
|
|
|
eval target_=\"\${${target_var}}\"
|
|
|
|
|
2016-05-21 13:16:52 -07:00
|
|
|
# Fix up architecture.
|
2016-04-03 10:26:24 -07:00
|
|
|
case "${target_}" in
|
|
|
|
x86_64-*) $bit32 && target_=${target_/#x86_64-/i386-} ;;
|
|
|
|
i[34567]86-*) $bit64 && target_=${target_/#i[34567]86-/x86_64-} ;;
|
2016-05-21 13:16:52 -07:00
|
|
|
esac
|
|
|
|
|
|
|
|
# Fix up the ABI part.
|
2016-04-03 10:26:24 -07:00
|
|
|
case "${target_}" in
|
|
|
|
*x32) $abi_dflt && target_=${target_/%x32} ;;
|
|
|
|
*) $abi_x32 && target_=${target_}x32 ;;
|
2016-05-21 13:16:52 -07:00
|
|
|
esac
|
|
|
|
|
2016-04-03 10:26:24 -07:00
|
|
|
# Set the target variable
|
|
|
|
eval ${target_var}=\"${target_}\"
|
2016-05-21 13:16:52 -07:00
|
|
|
}
|
2016-04-02 00:12:41 -07:00
|
|
|
|
|
|
|
# Adjust target tuple for GLIBC
|
|
|
|
CT_DoArchGlibcAdjustTuple() {
|
2016-04-03 10:26:24 -07:00
|
|
|
local target_var="${1}"
|
|
|
|
local target_
|
|
|
|
|
|
|
|
eval target_=\"\${${target_var}}\"
|
2016-04-02 00:12:41 -07:00
|
|
|
|
2016-04-03 10:26:24 -07:00
|
|
|
case "${target_}" in
|
2016-04-02 00:12:41 -07:00
|
|
|
# x86 quirk: architecture name is i386, but glibc expects i[4567]86 - to
|
|
|
|
# indicate the desired optimization. If it was a multilib variant of x86_64,
|
|
|
|
# then it targets at least NetBurst a.k.a. i786, but we'll follow the model
|
|
|
|
# above # and set the optimization to i686. Otherwise, replace with the most
|
|
|
|
# conservative choice, i486.
|
|
|
|
i386-*)
|
|
|
|
if [ "${CT_TARGET_ARCH}" = "x86_64" ]; then
|
2016-04-03 10:26:24 -07:00
|
|
|
target_=${target_/#i386-/i686-}
|
2016-04-02 00:12:41 -07:00
|
|
|
elif [ "${CT_TARGET_ARCH}" != "i386" ]; then
|
2016-04-03 10:26:24 -07:00
|
|
|
target_=${target_/#i386-/${CT_TARGET_ARCH}-}
|
2016-04-02 00:12:41 -07:00
|
|
|
else
|
2016-04-03 10:26:24 -07:00
|
|
|
target_=${target_/#i386-/i486-}
|
2016-04-02 00:12:41 -07:00
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-04-03 10:26:24 -07:00
|
|
|
# Set the target variable
|
|
|
|
eval ${target_var}=\"${target_}\"
|
2016-04-02 00:12:41 -07:00
|
|
|
}
|