summaryrefslogtreecommitdiff
path: root/scripts/build/arch
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build/arch')
-rw-r--r--scripts/build/arch/alpha.sh11
-rw-r--r--scripts/build/arch/arm.sh86
-rw-r--r--scripts/build/arch/m68k.sh15
-rw-r--r--scripts/build/arch/microblaze.sh11
-rw-r--r--scripts/build/arch/mips.sh62
-rw-r--r--scripts/build/arch/nios2.sh1
-rw-r--r--scripts/build/arch/powerpc.sh49
-rw-r--r--scripts/build/arch/s390.sh16
-rw-r--r--scripts/build/arch/sh.sh52
-rw-r--r--scripts/build/arch/sparc.sh56
-rw-r--r--scripts/build/arch/x86.sh132
-rw-r--r--scripts/build/arch/xtensa.sh6
12 files changed, 405 insertions, 92 deletions
diff --git a/scripts/build/arch/alpha.sh b/scripts/build/arch/alpha.sh
index ffceae3..cf6d40d 100644
--- a/scripts/build/arch/alpha.sh
+++ b/scripts/build/arch/alpha.sh
@@ -4,14 +4,3 @@ CT_DoArchTupleValues () {
# The architecture part of the tuple:
CT_TARGET_ARCH="${CT_ARCH}${CT_ARCH_SUFFIX:-${CT_ARCH_ALPHA_VARIANT}}"
}
-
-#------------------------------------------------------------------------------
-# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
-CT_DoArchMultilibTarget ()
-{
- local target="${1}"; shift
- local -a multi_flags=( "$@" )
-
- echo "${target}"
-}
diff --git a/scripts/build/arch/arm.sh b/scripts/build/arch/arm.sh
index 338392c..b728311 100644
--- a/scripts/build/arch/arm.sh
+++ b/scripts/build/arch/arm.sh
@@ -27,7 +27,6 @@ CT_DoArchTupleValues() {
thumb)
CT_ARCH_CC_CORE_EXTRA_CONFIG="--with-mode=thumb"
CT_ARCH_CC_EXTRA_CONFIG="--with-mode=thumb"
-# CT_ARCH_TARGET_CFLAGS="-mthumb"
;;
esac
@@ -38,15 +37,84 @@ CT_DoArchTupleValues() {
if [ "${CT_ARCH_ARM_TUPLE_USE_EABIHF}" = "y" ]; then
CT_TARGET_SYS="${CT_TARGET_SYS}hf"
fi
+
+ # If building multilib, zero out any WITH_*/*_CFLAG - GCC on ARM does not allow
+ # any of them with multilib.
+ if [ "${CT_MULTILIB}" = "y" ]; then
+ CT_ARCH_WITH_ARCH=
+ CT_ARCH_WITH_ABI=
+ CT_ARCH_WITH_CPU=
+ CT_ARCH_WITH_TUNE=
+ CT_ARCH_WITH_FPU=
+ CT_ARCH_WITH_FLOAT=
+ CT_ARCH_ARCH_CFLAG=
+ CT_ARCH_ABI_CFLAG=
+ CT_ARCH_CPU_CFLAG=
+ CT_ARCH_TUNE_CFLAG=
+ CT_ARCH_FPU_CFLAG=
+ CT_ARCH_FLOAT_CFLAG=
+ fi
+}
+
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "arm"
+
+ case "${CT_ARCH_ARM_MODE}" in
+ arm)
+ CT_KconfigDisableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
+ ;;
+ thumb)
+ CT_KconfigEnableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
+ ;;
+ esac
+
+ # FIXME: CONFIG_ARM_OABI does not exist in neither uClibc/uClibc-ng
+ # FIXME: CONFIG_ARM_EABI does not seem to affect anything in either of them, too
+ # (both check the compiler's built-in define, __ARM_EABI__ instead) except for
+ # a check for match between toolchain configuration and uClibc-ng in
+ # uClibc_arch_features.h
+ if [ "${CT_ARCH_ARM_EABI}" = "y" ]; then
+ CT_KconfigDisableOption "CONFIG_ARM_OABI" "${cfg}"
+ CT_KconfigEnableOption "CONFIG_ARM_EABI" "${cfg}"
+ else
+ CT_KconfigDisableOption "CONFIG_ARM_EABI" "${cfg}"
+ CT_KconfigEnableOption "CONFIG_ARM_OABI" "${cfg}"
+ fi
}
-#------------------------------------------------------------------------------
-# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
-CT_DoArchMultilibTarget ()
-{
- local target="${1}"; shift
- local -a multi_flags=( "$@" )
+CT_DoArchUClibcCflags() {
+ local cfg="${1}"
+ local cflags="${2}"
+ local f
- echo "${target}"
+ for f in ${cflags}; do
+ case "${f}" in
+ -mthumb)
+ CT_KconfigEnableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
+ ;;
+ -marm)
+ CT_KconfigDisableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
+ ;;
+ -mlittle-endian)
+ CT_KconfigDisableOption "ARCH_BIG_ENDIAN" "${cfg}"
+ CT_KconfigDisableOption "ARCH_WANTS_BIG_ENDIAN" "${cfg}"
+ CT_KconfigEnableOption "ARCH_LITTLE_ENDIAN" "${cfg}"
+ CT_KconfigEnableOption "ARCH_WANTS_LITTLE_ENDIAN" "${cfg}"
+ ;;
+ -mbig-endian)
+ CT_KconfigEnableOption "ARCH_BIG_ENDIAN" "${cfg}"
+ CT_KconfigEnableOption "ARCH_WANTS_BIG_ENDIAN" "${cfg}"
+ CT_KconfigDisableOption "ARCH_LITTLE_ENDIAN" "${cfg}"
+ CT_KconfigDisableOption "ARCH_WANTS_LITTLE_ENDIAN" "${cfg}"
+ ;;
+ -mhard-float|-mfloat-abi=hard|-mfloat-abi=softfp)
+ CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ -msoft-float|-mfloat-abi=soft)
+ CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ esac
+ done
}
diff --git a/scripts/build/arch/m68k.sh b/scripts/build/arch/m68k.sh
index a6eb010..3cba76c 100644
--- a/scripts/build/arch/m68k.sh
+++ b/scripts/build/arch/m68k.sh
@@ -1,16 +1,7 @@
# Compute M68k-specific values
-CT_DoArchTupleValues() {
- :
-}
-
-#------------------------------------------------------------------------------
-# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
-CT_DoArchMultilibTarget ()
-{
- local target="${1}"; shift
- local -a multi_flags=( "$@" )
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
- echo "${target}"
+ CT_DoArchUClibcSelectArch "${cfg}" "m68k"
}
diff --git a/scripts/build/arch/microblaze.sh b/scripts/build/arch/microblaze.sh
index 93ecc9a..e9d9811 100644
--- a/scripts/build/arch/microblaze.sh
+++ b/scripts/build/arch/microblaze.sh
@@ -20,13 +20,8 @@ CT_DoArchTupleValues () {
}
-#------------------------------------------------------------------------------
-# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
-CT_DoArchMultilibTarget ()
-{
- local target="${1}"; shift
- local -a multi_flags=( "$@" )
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
- echo "${target}"
+ CT_DoArchUClibcSelectArch "${cfg}" "microblaze"
}
diff --git a/scripts/build/arch/mips.sh b/scripts/build/arch/mips.sh
index 68ad4fa..6097c89 100644
--- a/scripts/build/arch/mips.sh
+++ b/scripts/build/arch/mips.sh
@@ -15,13 +15,57 @@ CT_DoArchTupleValues() {
CT_ARCH_WITH_ABI="--with-abi=${CT_ARCH_mips_ABI}"
}
-#------------------------------------------------------------------------------
-# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
-CT_DoArchMultilibTarget ()
-{
- local target="${1}"; shift
- local -a multi_flags=( "$@" )
-
- echo "${target}"
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "${CT_ARCH}"
+
+ CT_KconfigDisableOption "CONFIG_MIPS_O32_ABI" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_MIPS_N32_ABI" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_MIPS_N64_ABI" "${cfg}"
+ case "${CT_ARCH_mips_ABI}" in
+ 32)
+ CT_KconfigEnableOption "CONFIG_MIPS_O32_ABI" "${cfg}"
+ ;;
+ n32)
+ CT_KconfigEnableOption "CONFIG_MIPS_N32_ABI" "${cfg}"
+ ;;
+ 64)
+ CT_KconfigEnableOption "CONFIG_MIPS_N64_ABI" "${cfg}"
+ ;;
+ esac
+
+ # FIXME: uClibc (!ng) allows to select ISA in the config; should
+ # match from the selected ARCH_ARCH level... For now, delete and
+ # fall back to default.
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_1" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_2" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_3" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_4" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_MIPS32" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_MIPS32R2" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_MIPS64" "${cfg}"
+ CT_KconfigDeleteOption "CONFIG_MIPS_ISA_MIPS64R2" "${cfg}"
+}
+
+CT_DoArchUClibcCflags() {
+ local cfg="${1}"
+ local cflags="${2}"
+ local f
+
+ for f in ${cflags}; do
+ case "${f}" in
+ -mabi=*)
+ CT_KconfigDisableOption "CONFIG_MIPS_O32_ABI" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_MIPS_N32_ABI" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_MIPS_N64_ABI" "${cfg}"
+ case "${f#-mabi=}" in
+ 32) CT_KconfigEnableOption "CONFIG_MIPS_O32_ABI" "${cfg}";;
+ n32) CT_KconfigEnableOption "CONFIG_MIPS_N32_ABI" "${cfg}";;
+ 64) CT_KconfigEnableOption "CONFIG_MIPS_N64_ABI" "${cfg}";;
+ *) CT_Abort "Unsupported ABI: ${f#-mabi=}";;
+ esac
+ ;;
+ esac
+ done
}
diff --git a/scripts/build/arch/nios2.sh b/scripts/build/arch/nios2.sh
index 8c7d445..24c556b 100644
--- a/scripts/build/arch/nios2.sh
+++ b/scripts/build/arch/nios2.sh
@@ -9,5 +9,4 @@ CT_DoArchTupleValues() {
CT_ARCH_WITH_FPU=
CT_ARCH_WITH_FLOAT=
CT_TARGET_SYS=elf
-
}
diff --git a/scripts/build/arch/powerpc.sh b/scripts/build/arch/powerpc.sh
index 77bbc8a..52f3f8b 100644
--- a/scripts/build/arch/powerpc.sh
+++ b/scripts/build/arch/powerpc.sh
@@ -26,13 +26,15 @@ CT_DoArchTupleValues () {
CT_ARCH_CC_EXTRA_CONFIG="--enable-e500_double"
fi
}
+
#------------------------------------------------------------------------------
# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
CT_DoArchMultilibTarget ()
{
- local target="${1}"; shift
+ local target_var="${1}"; shift
local -a multi_flags=( "$@" )
+ local target_
local m32=false
local m64=false
@@ -48,22 +50,41 @@ CT_DoArchMultilibTarget ()
esac
done
+ eval target_=\"\${${target_var}}\"
+
# Fix up bitness
- case "${target}" in
- powerpc-*) $m64 && target=${target/#powerpc-/powerpc64-} ;;
- powerpcle-*) $m64 && target=${target/#powerpcle-/powerpc64le-} ;;
- powerpc64-*) $m32 && target=${target/#powerpc64-/powerpc-} ;;
- powerpc64le-*) $m32 && target=${target/#powerpc64le-/powerpcle-} ;;
+ case "${target_}" in
+ powerpc-*) $m64 && target_=${target_/#powerpc-/powerpc64-} ;;
+ powerpcle-*) $m64 && target_=${target_/#powerpcle-/powerpc64le-} ;;
+ powerpc64-*) $m32 && target_=${target_/#powerpc64-/powerpc-} ;;
+ powerpc64le-*) $m32 && target_=${target_/#powerpc64le-/powerpcle-} ;;
esac
# Fix up endianness
- case "${target}" in
- powerpc-*) $mlittle && target=${target/#powerpc-/powerpcle-} ;;
- powerpcle-*) $mbig && target=${target/#powerpcle-/powerpc-} ;;
- powerpc64-*) $mlittle && target=${target/#powerpc64-/powerpc64le-} ;;
- powerpc64le-*) $mbig && target=${target/#powerpc64le-/powerpc64-} ;;
+ case "${target_}" in
+ powerpc-*) $mlittle && target_=${target_/#powerpc-/powerpcle-} ;;
+ powerpcle-*) $mbig && target_=${target_/#powerpcle-/powerpc-} ;;
+ powerpc64-*) $mlittle && target_=${target_/#powerpc64-/powerpc64le-} ;;
+ powerpc64le-*) $mbig && target_=${target_/#powerpc64le-/powerpc64-} ;;
esac
- # return the target
- echo "${target}"
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
+}
+
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "powerpc"
+
+ CT_KconfigDisableOption "CONFIG_E500" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_CLASSIC" "${cfg}"
+ CT_KconfigDeleteOption "TARGET_SUBARCH" "${cfg}"
+ if [ "${CT_ARCH_powerpc_ABI}" = "spe" ]; then
+ CT_KconfigEnableOption "CONFIG_E500" "${cfg}"
+ CT_KconfigSetOption "TARGET_SUBARCH" "e500" "${cfg}"
+ else
+ CT_KconfigEnableOption "CONFIG_CLASSIC" "${cfg}"
+ CT_KconfigSetOption "TARGET_SUBARCH" "classic" "${cfg}"
+ fi
}
diff --git a/scripts/build/arch/s390.sh b/scripts/build/arch/s390.sh
index e303420..dff86a0 100644
--- a/scripts/build/arch/s390.sh
+++ b/scripts/build/arch/s390.sh
@@ -9,11 +9,12 @@ CT_DoArchTupleValues() {
#------------------------------------------------------------------------------
# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
CT_DoArchMultilibTarget ()
{
- local target="${1}"; shift
+ local target_var="${1}"; shift
local -a multi_flags=( "$@" )
+ local target_
local m31=false
local m64=false
@@ -25,11 +26,14 @@ CT_DoArchMultilibTarget ()
esac
done
+ eval target_=\"\${${target_var}}\"
+
# Fix bitness
- case "${target}" in
- s390-*) $m64 && target=${target/#s390-/s390x-} ;;
- s390x-*) $m31 && target=${target/#s390x-/s390-} ;;
+ case "${target_}" in
+ s390-*) $m64 && target_=${target_/#s390-/s390x-} ;;
+ s390x-*) $m31 && target_=${target_/#s390x-/s390-} ;;
esac
- echo "${target}"
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
}
diff --git a/scripts/build/arch/sh.sh b/scripts/build/arch/sh.sh
index e7f4f1a..6761435 100644
--- a/scripts/build/arch/sh.sh
+++ b/scripts/build/arch/sh.sh
@@ -36,13 +36,47 @@ CT_DoArchTupleValues () {
CT_ARCH_FLOAT_CFLAG=
}
-#------------------------------------------------------------------------------
-# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
-CT_DoArchMultilibTarget ()
-{
- local target="${1}"; shift
- local -a multi_flags=( "$@" )
-
- echo "${target}"
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ # FIXME: uclibc (!ng) seems to support sh64 (sh5), too
+ CT_DoArchUClibcSelectArch "${cfg}" "sh"
+ CT_KconfigDisableOption "CONFIG_SH3" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH4" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}"
+ case "${CT_ARCH_SH_VARIANT}" in
+ sh3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}";;
+ sh4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}";;
+ sh4a) CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}";;
+ esac
+}
+
+CT_DoArchUClibcCflags() {
+ local cfg="${1}"
+ local cflags="${2}"
+ local f
+
+ for f in ${cflags}; do
+ case "${f}" in
+ -m3)
+ CT_KconfigEnableOption "CONFIG_SH3" "${cfg}"
+ ;;
+ -m4)
+ CT_KconfigEnableOption "CONFIG_SH4" "${cfg}"
+ CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ -m4-nofpu)
+ CT_KconfigEnableOption "CONFIG_SH4" "${cfg}"
+ CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ -m4a)
+ CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}"
+ CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ -m4a-nofpu)
+ CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}"
+ CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ esac
+ done
}
diff --git a/scripts/build/arch/sparc.sh b/scripts/build/arch/sparc.sh
index 2d3baa3..74f6f78 100644
--- a/scripts/build/arch/sparc.sh
+++ b/scripts/build/arch/sparc.sh
@@ -19,11 +19,61 @@ CT_DoArchTupleValues() {
#------------------------------------------------------------------------------
# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
CT_DoArchMultilibTarget ()
{
- local target="${1}"; shift
+ local target_var="${1}"; shift
local -a multi_flags=( "$@" )
+ local target_
- echo "${target}"
+ local m32=false
+ local m64=false
+
+ for m in "${multi_flags[@]}"; do
+ case "$m" in
+ -m32) m32=true ;;
+ -m64) m64=true ;;
+ esac
+ done
+
+ eval target_=\"\${${target_var}}\"
+
+ # Fix up bitness
+ case "${target_}" in
+ sparc-*) $m64 && target_=${target_/#sparc-/sparc64-} ;;
+ sparc64-*) $m32 && target_=${target_/#sparc64-/sparc-} ;;
+ esac
+
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
+}
+
+# Special tuple adjustment for glibc.
+CT_DoArchGlibcAdjustTuple() {
+ local target_var="${1}"
+ local target_
+
+ eval target_=\"\${${target_var}}\"
+
+ case "${target_}" in
+ # SPARC quirk: glibc 2.23 and newer dropped support for SPARCv8 and
+ # earlier (corresponding pthread barrier code is missing). Until this
+ # support is reintroduced, configure as sparcv9.
+ sparc-*)
+ if [ "${CT_LIBC_GLIBC_2_23_or_later}" = y ]; then
+ CT_DoLog WARN "GLIBC 2.23 only supports SPARCv9"
+ target_=${target_/#sparc-/sparcv9-}
+ fi
+ ;;
+ esac
+
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
+}
+
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "${CT_ARCH}"
+ # FIXME: select CONFIG_SPARC_V7/V8/V9/V9B according to the CPU selector
}
diff --git a/scripts/build/arch/x86.sh b/scripts/build/arch/x86.sh
index ca0f08b..2c8a226 100644
--- a/scripts/build/arch/x86.sh
+++ b/scripts/build/arch/x86.sh
@@ -15,7 +15,9 @@ CT_DoArchTupleValues() {
winchip*) CT_TARGET_ARCH=i486;;
pentium|pentium-mmx|c3*) CT_TARGET_ARCH=i586;;
pentiumpro|pentium*|athlon*) CT_TARGET_ARCH=i686;;
- prescott) CT_TARGET_ARCH=i686;;
+ core2|atom) CT_TARGET_ARCH=i686;;
+ prescott|nocona) CT_TARGET_ARCH=i686;;
+ k8*|opteron*) CT_TARGET_ARCH=i686;;
*) CT_TARGET_ARCH=i586;;
esac
fi
@@ -35,11 +37,12 @@ CT_DoArchTupleValues() {
#------------------------------------------------------------------------------
# Get multilib architecture-specific target
-# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
CT_DoArchMultilibTarget ()
{
- local target="${1}"; shift
+ local target_var="${1}"; shift
local -a multi_flags=( "$@" )
+ local target_
local bit32=false
local bit64=false
@@ -54,17 +57,126 @@ CT_DoArchMultilibTarget ()
esac
done
+ eval target_=\"\${${target_var}}\"
+
# Fix up architecture.
- case "${target}" in
- x86_64-*) $bit32 && target=${target/#x86_64-/i386-} ;;
- i[34567]86-*) $bit64 && target=${target/#i[34567]86-/x86_64-} ;;
+ case "${target_}" in
+ x86_64-*) $bit32 && target_=${target_/#x86_64-/i386-} ;;
+ i[34567]86-*) $bit64 && target_=${target_/#i[34567]86-/x86_64-} ;;
esac
# Fix up the ABI part.
- case "${target}" in
- *x32) $abi_dflt && target=${target/%x32} ;;
- *) $abi_x32 && target=${target}x32 ;;
+ case "${target_}" in
+ *x32) $abi_dflt && target_=${target_/%x32} ;;
+ *) $abi_x32 && target_=${target_}x32 ;;
+ esac
+
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
+}
+
+# Adjust target tuple for GLIBC
+CT_DoArchGlibcAdjustTuple() {
+ local target_var="${1}"
+ local target_
+
+ eval target_=\"\${${target_var}}\"
+
+ case "${target_}" in
+ # 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
+ target_=${target_/#i386-/i686-}
+ elif [ "${CT_TARGET_ARCH}" != "i386" ]; then
+ target_=${target_/#i386-/${CT_TARGET_ARCH}-}
+ else
+ target_=${target_/#i386-/i486-}
+ fi
+ ;;
+ esac
+
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
+}
+
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ if [ "${CT_ARCH_BITNESS}" = 64 ]; then
+ CT_DoArchUClibcSelectArch "${cfg}" "x86_64"
+ else
+ CT_DoArchUClibcSelectArch "${cfg}" "i386"
+ fi
+
+ # FIXME This doesn't cover all cases of x86_32 on uClibc (!ng)
+ CT_KconfigDisableOption "CONFIG_386" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_486" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_586" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_686" "${cfg}"
+ case ${CT_TARGET_ARCH} in
+ i386)
+ CT_KconfigEnableOption "CONFIG_386" "${cfg}"
+ ;;
+ i486)
+ CT_KconfigEnableOption "CONFIG_486" "${cfg}"
+ ;;
+ i586)
+ CT_KconfigEnableOption "CONFIG_586" "${cfg}"
+ ;;
+ i686)
+ CT_KconfigEnableOption "CONFIG_686" "${cfg}"
+ ;;
esac
+}
+
+CT_DoArchUClibcCflags() {
+ local cfg="${1}"
+ local cflags="${2}"
+ local f
+
+ for f in ${cflags}; do
+ case "${f}" in
+ -m64)
+ CT_DoArchUClibcSelectArch "${cfg}" "x86_64"
+ ;;
+ -m32)
+ # Since it's a part of multilib with 64-bit flavor, default
+ # to new architecture (i686).
+ CT_DoArchUClibcSelectArch "${cfg}" "i386"
+ CT_KconfigDisableOption "CONFIG_386" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_486" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_586" "${cfg}"
+ CT_KconfigEnableOption "CONFIG_686" "${cfg}"
+ ;;
+ -mx32)
+ CT_Abort "uClibc does not support x32 ABI"
+ ;;
+ esac
+ done
+}
+
+CT_DoArchUClibcHeaderDir() {
+ local dir_var="${1}"
+ local cflags="${2}"
+
+ # If it is non-default multilib, add a suffix with architecture (reported by gcc)
+ # to the headers installation path.
+ if [ -n "${cflags}" ]; then
+ eval "${dir_var}="$( ${CT_TARGET}-gcc -print-multiarch ${cflags} )
+ fi
+}
- echo "${target}"
+CT_DoArchMUSLHeaderDir() {
+ local dir_var="${1}"
+ local cflags="${2}"
+
+ # If it is non-default multilib, add a suffix with architecture (reported by gcc)
+ # to the headers installation path.
+ if [ -n "${cflags}" ]; then
+ eval "${dir_var}="$( ${CT_TARGET}-gcc -print-multiarch ${cflags} )
+ fi
}
diff --git a/scripts/build/arch/xtensa.sh b/scripts/build/arch/xtensa.sh
index c7bd432..a3010c6 100644
--- a/scripts/build/arch/xtensa.sh
+++ b/scripts/build/arch/xtensa.sh
@@ -70,3 +70,9 @@ CT_ConfigureXtensa() {
CT_Popd
}
+
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "xtensa"
+}