summaryrefslogtreecommitdiff
path: root/scripts/build/arch
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build/arch')
-rw-r--r--scripts/build/arch/arc.sh50
-rw-r--r--scripts/build/arch/arm.sh7
-rw-r--r--scripts/build/arch/c6x.sh79
-rw-r--r--scripts/build/arch/microblaze.sh15
-rw-r--r--scripts/build/arch/mips.sh11
-rw-r--r--scripts/build/arch/moxie.sh16
-rw-r--r--scripts/build/arch/msp430.sh5
-rw-r--r--scripts/build/arch/nios2.sh10
-rw-r--r--scripts/build/arch/powerpc.sh12
-rw-r--r--scripts/build/arch/pru.sh5
-rw-r--r--scripts/build/arch/riscv.sh5
-rw-r--r--scripts/build/arch/sh.sh191
-rw-r--r--scripts/build/arch/sparc.sh41
-rw-r--r--scripts/build/arch/x86.sh8
-rw-r--r--scripts/build/arch/xtensa.sh72
15 files changed, 393 insertions, 134 deletions
diff --git a/scripts/build/arch/arc.sh b/scripts/build/arch/arc.sh
new file mode 100644
index 0000000..2312c77
--- /dev/null
+++ b/scripts/build/arch/arc.sh
@@ -0,0 +1,50 @@
+# Compute ARC-specific values
+
+CT_DoArchTupleValues()
+{
+ # The architecture part of the tuple:
+ CT_TARGET_ARCH="${CT_ARCH}${CT_ARCH_SUFFIX:-${target_endian_eb}}"
+}
+
+CT_DoArchUClibcConfig()
+{
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "arc"
+}
+
+# Multilib: Adjust configure arguments for GLIBC
+# Usage: CT_DoArchGlibcAdjustConfigure <configure-args-array-name> <cflags>
+#
+# From GCC's standpoint ARC's multilib items are defined by "mcpu" values
+# which we have quite a few and for all of them might be built optimized
+# cross-toolchain.
+#
+# From Glibc's standpoint multilib is multi-ABI and so very limited
+# versions are supposed to co-exist.
+#
+# Here we force Glibc to install libraries in per-multilib folder to create
+# a universal cross-toolchain that has libs optimized for multiple CPU types.
+CT_DoArchGlibcAdjustConfigure() {
+ local -a add_args
+ local array="${1}"
+ local cflags="${2}"
+ local opt
+ local mcpu
+
+ # If building for multilib, set proper installation paths
+ if [ "${CT_MULTILIB}" = "y" ]; then
+ for opt in ${cflags}; do
+ case "${opt}" in
+ -mcpu=*)
+ mcpu="${opt#*=}"
+ add_args+=( "libc_cv_rtlddir=/lib/${mcpu}" )
+ add_args+=( "libc_cv_slibdir=/lib/${mcpu}" )
+ add_args+=( "--libdir=/usr/lib/${mcpu}" )
+ ;;
+ esac
+ done
+ fi
+
+ eval "${array}+=( \"\${add_args[@]}\" )"
+}
diff --git a/scripts/build/arch/arm.sh b/scripts/build/arch/arm.sh
index eeffc7d..01a40bd 100644
--- a/scripts/build/arch/arm.sh
+++ b/scripts/build/arch/arm.sh
@@ -15,9 +15,10 @@ CT_DoArchTupleValues() {
# The system part of the tuple:
case "${CT_LIBC},${CT_ARCH_ARM_EABI}" in
- *glibc,y) CT_TARGET_SYS=gnueabi;;
- uClibc,y) CT_TARGET_SYS=uclibc${CT_LIBC_UCLIBC_USE_GNU_SUFFIX:+gnu}eabi;;
+ glibc,y) CT_TARGET_SYS=gnueabi;;
+ uClibc-ng,y)CT_TARGET_SYS=uclibc${CT_LIBC_UCLIBC_USE_GNU_SUFFIX:+gnu}eabi;;
musl,y) CT_TARGET_SYS=musleabi;;
+ bionic,y) CT_TARGET_SYS=androideabi;;
*,y) CT_TARGET_SYS=eabi;;
esac
@@ -69,6 +70,7 @@ CT_DoArchUClibcConfig() {
;;
thumb)
CT_KconfigEnableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
+ CT_KconfigDisableOption "UCLIBC_HAS_CONTEXT_FUNCS" "${cfg}"
;;
esac
# FIXME: CONFIG_ARM_OABI does not exist in neither uClibc/uClibc-ng
@@ -95,6 +97,7 @@ CT_DoArchUClibcCflags() {
case "${f}" in
-mthumb)
CT_KconfigEnableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
+ CT_KconfigDisableOption "UCLIBC_HAS_CONTEXT_FUNCS" "${cfg}"
;;
-marm)
CT_KconfigDisableOption "COMPILE_IN_THUMB_MODE" "${cfg}"
diff --git a/scripts/build/arch/c6x.sh b/scripts/build/arch/c6x.sh
new file mode 100644
index 0000000..3eb40e4
--- /dev/null
+++ b/scripts/build/arch/c6x.sh
@@ -0,0 +1,79 @@
+# Compute c6x-specific values
+
+CT_DoArchUClibcConfig() {
+ local cfg="${1}"
+
+ CT_DoArchUClibcSelectArch "${cfg}" "c6x"
+}
+
+CT_DoArchTupleValues() {
+ CT_TARGET_ARCH="tic6x"
+ #binutils does not like uclibc in the tuple
+ if [ "${CT_TARGET_SYS}" = "uclibc" ]; then
+ CT_TARGET_SYS=
+ fi
+}
+
+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}-${CT_CC} -print-multiarch ${cflags} )
+ fi
+}
+
+CT_DoArchUClibcCflags() {
+ local cfg="${1}"
+ local cflags="${2}"
+ local f
+
+ # Set default little endian options
+ 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}"
+
+ # Set arch options based on march switch
+ CT_KconfigDisableOption "CONFIG_TMS320C674X" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_TMS320C64XPLUS" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_TMS320C64X" "${cfg}"
+ CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
+ CT_KconfigEnableOption "CONFIG_GENERIC_C6X" "${cfg}"
+
+ for f in ${cflags}; do
+ case "${f}" in
+ -march=*)
+ case "${f#-march=}" in
+ c674x)
+ CT_KconfigEnableOption "CONFIG_TMS320C674X" "${cfg}"
+ CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_GENERIC_C6X" "${cfg}"
+ ;;
+ c64x+)
+ CT_KconfigEnableOption "CONFIG_TMS320C64XPLUS" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_GENERIC_C6X" "${cfg}"
+ ;;
+ c64x)
+ CT_KconfigEnableOption "CONFIG_TMS320C64X" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_GENERIC_C6X" "${cfg}"
+ ;;
+ c67x)
+ CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ c62x)
+ ;;
+ *) CT_Abort "Unsupported architecture: ${f#-march=}";;
+ esac
+ ;;
+ -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}"
+ ;;
+ esac
+ done
+}
diff --git a/scripts/build/arch/microblaze.sh b/scripts/build/arch/microblaze.sh
index e9d9811..5b85012 100644
--- a/scripts/build/arch/microblaze.sh
+++ b/scripts/build/arch/microblaze.sh
@@ -3,21 +3,6 @@
CT_DoArchTupleValues () {
# The architecture part of the tuple:
CT_TARGET_ARCH="${CT_ARCH}${CT_ARCH_SUFFIX:-${target_endian_el}}"
-
- # gcc ./configure flags
- CT_ARCH_WITH_ARCH=
- CT_ARCH_WITH_ABI=
- CT_ARCH_WITH_CPU=
- CT_ARCH_WITH_TUNE=
- CT_ARCH_WITH_FPU=
- CT_ARCH_WITH_FLOAT=
-
- # CFLAGS
- case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
- y,) CT_ARCH_FLOAT_CFLAG="-mhard-float" ;;
- ,y) CT_ARCH_FLOAT_CFLAG="-msoft-float" ;;
- esac
-
}
CT_DoArchUClibcConfig() {
diff --git a/scripts/build/arch/mips.sh b/scripts/build/arch/mips.sh
index f91a80a..acb8851 100644
--- a/scripts/build/arch/mips.sh
+++ b/scripts/build/arch/mips.sh
@@ -48,6 +48,17 @@ CT_DoArchUClibcConfig() {
CT_KconfigDeleteOption "CONFIG_MIPS_ISA_MIPS64R2" "${cfg}"
}
+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}-${CT_CC} -print-multiarch ${cflags} )
+ fi
+}
+
CT_DoArchUClibcCflags() {
local cfg="${1}"
local cflags="${2}"
diff --git a/scripts/build/arch/moxie.sh b/scripts/build/arch/moxie.sh
new file mode 100644
index 0000000..9545d19
--- /dev/null
+++ b/scripts/build/arch/moxie.sh
@@ -0,0 +1,16 @@
+# Moxie-specific arch callbacks
+
+# No arch-specific overrides yet
+CT_DoArchTupleValues()
+{
+ case "${CT_ARCH_ENDIAN}" in
+ big) CT_ARCH_ENDIAN_CFLAG=-meb;;
+ little) CT_ARCH_ENDIAN_CFLAG=-mel;;
+ esac
+
+ case "${CT_LIBC}" in
+ moxiebox)
+ CT_TARGET_SYS=moxiebox
+ ;;
+ esac
+}
diff --git a/scripts/build/arch/msp430.sh b/scripts/build/arch/msp430.sh
new file mode 100644
index 0000000..8edb72a
--- /dev/null
+++ b/scripts/build/arch/msp430.sh
@@ -0,0 +1,5 @@
+# Compute MSP430-specific values
+
+CT_DoArchTupleValues() {
+ CT_TARGET_ARCH="${CT_ARCH}"
+}
diff --git a/scripts/build/arch/nios2.sh b/scripts/build/arch/nios2.sh
index 24c556b..afd73ec 100644
--- a/scripts/build/arch/nios2.sh
+++ b/scripts/build/arch/nios2.sh
@@ -1,12 +1,6 @@
# Compute NIOS2-specific values
CT_DoArchTupleValues() {
- # gcc ./configure flags
- 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_TARGET_SYS=elf
+ # Do nothing here. Default values are sane.
+ :;
}
diff --git a/scripts/build/arch/powerpc.sh b/scripts/build/arch/powerpc.sh
index 52f3f8b..245adbe 100644
--- a/scripts/build/arch/powerpc.sh
+++ b/scripts/build/arch/powerpc.sh
@@ -7,23 +7,23 @@ CT_DoArchTupleValues () {
# Only override values when ABI is not the default
case "${CT_ARCH_powerpc_ABI}" in
eabi)
- # EABI is only for bare-metal, so libc ∈ [none,newlib]
+ # EABI is only for bare-metal, so libc ∈ [none,newlib,picolibc]
CT_TARGET_SYS="eabi"
;;
spe)
case "${CT_LIBC}" in
- none|newlib) CT_TARGET_SYS="spe";;
+ none|newlib|picolibc) CT_TARGET_SYS="elfspe";;
*glibc) CT_TARGET_SYS="gnuspe";;
- uClibc) CT_TARGET_SYS="uclibcgnuspe";;
+ uClibc-ng) CT_TARGET_SYS="uclibcgnuspe";;
esac
;;
esac
- # Add extra flags for SPE if needed
+ # Add extra flags for SPE if needed. SPE is obsolete in GCC8.
if [ "${CT_ARCH_powerpc_ABI_SPE}" = "y" ]; then
CT_ARCH_TARGET_CFLAGS="-mabi=spe -mspe"
- CT_ARCH_CC_CORE_EXTRA_CONFIG="--enable-e500_double"
- CT_ARCH_CC_EXTRA_CONFIG="--enable-e500_double"
+ CT_ARCH_CC_CORE_EXTRA_CONFIG="--enable-e500_double --enable-obsolete"
+ CT_ARCH_CC_EXTRA_CONFIG="--enable-e500_double --enable-obsolete"
fi
}
diff --git a/scripts/build/arch/pru.sh b/scripts/build/arch/pru.sh
new file mode 100644
index 0000000..c4d61ce
--- /dev/null
+++ b/scripts/build/arch/pru.sh
@@ -0,0 +1,5 @@
+# Compute PRU-specific values
+
+CT_DoArchTupleValues() {
+ CT_TARGET_ARCH="${CT_ARCH}"
+}
diff --git a/scripts/build/arch/riscv.sh b/scripts/build/arch/riscv.sh
new file mode 100644
index 0000000..a0a5ba4
--- /dev/null
+++ b/scripts/build/arch/riscv.sh
@@ -0,0 +1,5 @@
+# Compute RISC-V-specific values
+
+CT_DoArchTupleValues() {
+ CT_TARGET_ARCH="riscv${CT_ARCH_BITNESS}"
+}
diff --git a/scripts/build/arch/sh.sh b/scripts/build/arch/sh.sh
index 6761435..8339b94 100644
--- a/scripts/build/arch/sh.sh
+++ b/scripts/build/arch/sh.sh
@@ -1,50 +1,171 @@
# Compute sh-specific values
CT_DoArchTupleValues () {
- # The architecture part of the tuple:
- CT_TARGET_ARCH="${CT_ARCH_SH_VARIANT}${CT_ARCH_SUFFIX:-${target_endian_eb}}"
-
- # gcc ./configure flags
- CT_ARCH_WITH_ARCH=
- CT_ARCH_WITH_ABI=
- CT_ARCH_WITH_CPU=
- CT_ARCH_WITH_TUNE=
- CT_ARCH_WITH_FPU=
- CT_ARCH_WITH_FLOAT=
-
- # Endianness stuff
+ # The architecture part of the tuple. Binutils do not accept specifications
+ # like 'sheb-unknown-elf' even though GCC does. So keep the tuple just sh-*-elf
+ # unless user wants something specific (either CPU or explicit suffix).
+ if [ "${CT_ARCH_SH_VARIANT}" != "sh" -o -n "${CT_ARCH_SUFFIX}" ]; then
+ CT_TARGET_ARCH="${CT_ARCH_SH_VARIANT}${CT_ARCH_SUFFIX:-${target_endian_eb}}"
+ fi
+
+ # Endianness stuff (uses non-standard CFLAGS). If both are compiled, let the
+ # compiler's default or multilib iterator be used.
case "${CT_ARCH_ENDIAN}" in
big) CT_ARCH_ENDIAN_CFLAG=-mb;;
little) CT_ARCH_ENDIAN_CFLAG=-ml;;
esac
- # CFLAGS
+ # Instead of -m{soft,hard}-float, uses CPU type
+ CT_ARCH_FLOAT_CFLAG=
case "${CT_ARCH_SH_VARIANT}" in
sh3) CT_ARCH_ARCH_CFLAG=-m3;;
- sh4*)
+ sh4*|sh2*)
# softfp is not possible for SuperH, no need to test for it.
case "${CT_ARCH_FLOAT}" in
hard)
- CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh?}"
+ CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}"
;;
soft)
- CT_ARCH_ARCH_CFLAG="-m4${CT_ARCH_SH_VARIANT##sh?}-nofpu"
+ CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}-nofpu"
;;
esac
;;
esac
- CT_ARCH_FLOAT_CFLAG=
+}
+
+CT_DoArchMultilibList() {
+ local save_ifs="${IFS}"
+ local new
+ local x
+
+ # In a configuration for SuperH, GCC list of multilibs shall not include
+ # the default CPU. E.g. if configuring for sh4-*-*, we need to remove
+ # "sh4" or "m4" from the multilib list. Otherwise, the resulting compiler
+ # will fail when that CPU is selected explicitly "sh4-multilib-linux-gnu-gcc -m4 ..."
+ # as it will fail to find the sysroot with that suffix. This applies to both
+ # the CPU type inferred from the target tuple (CT_ARCH_SH_VARIANT) as well as
+ # the default CPU configured with --with-cpu (CT_ARCH_CPU).
+ IFS=,
+ for x in ${CT_CC_GCC_MULTILIB_LIST}; do
+ if [ "${x}" = "${CT_ARCH_SH_VARIANT}" -o "sh${x#m}" = "${CT_ARCH_SH_VARIANT}" ]; then
+ CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
+ continue
+ fi
+ if [ "${x}" = "${CT_ARCH_CPU}" -o "sh${x#m}" = "${CT_ARCH_CPU}" ]; then
+ CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
+ continue
+ fi
+ new="${new:+${new},}${x}"
+ done
+ IFS="${save_ifs}"
+ CT_CC_GCC_MULTILIB_LIST="${new}"
+ CT_DoLog DEBUG "Adjusted CT_CC_GCC_MULTILIB_LIST to '${CT_CC_GCC_MULTILIB_LIST}'"
+}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "target variable" "multilib flags"
+CT_DoArchMultilibTarget ()
+{
+ local target_var="${1}"; shift
+ local -a multi_flags=( "$@" )
+ local target_
+ local newcpu
+
+ for m in "${multi_flags[@]}"; do
+ case "${m}" in
+ -m4*) newcpu=sh4;;
+ -m3*) newcpu=sh3;;
+ -m2*) newcpu=sh2;;
+ -m1*) newcpu=sh1;;
+ esac
+ done
+
+ eval target_=\"\${${target_var}}\"
+
+ # Strip CPU name and append the new one if an option has been seen.
+ if [ -n "${newcpu}" ]; then
+ target_="${newcpu}-${target_#*-}"
+ fi
+
+ # 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
+ sh-*)
+ # Glibc does not build unless configured with 'shX-*' tuple.
+ # Since we ended up here, no architecture variant has been
+ # specified, so the only source of default is CT_ARCH_CPU.
+ # GCC defaults to sh1, but this Glibc cannot compile for it.
+ if [ -n "${CT_ARCH_CPU}" ]; then
+ target_=${target_/#sh-/${CT_ARCH_CPU}-}
+ CT_DoLog DEBUG "Adjusted target tuple ${target_}"
+ else
+ CT_Abort "GNU C library cannot build for sh1 (GCC default). " \
+ "Specify architecture variant or the default CPU type."
+ fi
+ ;;
+ esac
+
+ # Set the target variable
+ eval ${target_var}=\"${target_}\"
+}
+
+# Multilib: Adjust configure arguments for GLIBC
+# Usage: CT_DoArchGlibcAdjustConfigure <configure-args-array-name> <cflags>
+CT_DoArchGlibcAdjustConfigure() {
+ local -a add_args
+ local array="${1}"
+ local cflags="${2}"
+ local opt
+
+ for opt in ${cflags}; do
+ case "${opt}" in
+ -m[1-5]*-nofpu)
+ add_args+=( "--without-fp" )
+ ;;
+ -m[1-5]*)
+ add_args+=( "--with-fp" )
+ ;;
+ esac
+ done
+
+ # If architecture variant was specified, we'd have CT_ARCH_ARCH_CFLAG
+ # and it would've been handled above. Our last resort: CT_ARCH_CPU
+ if [ "${#add_args[@]}" = 0 ]; then
+ case "${CT_ARCH_CPU}" in
+ sh[34]*-nofpu)
+ add_args+=( "--without-fp" )
+ ;;
+ sh[34]*)
+ add_args+=( "--with-fp" )
+ ;;
+ esac
+ fi
+
+ eval "${array}+=( \"\${add_args[@]}\" )"
}
CT_DoArchUClibcConfig() {
local cfg="${1}"
- # FIXME: uclibc (!ng) seems to support sh64 (sh5), too
CT_DoArchUClibcSelectArch "${cfg}" "sh"
+ CT_KconfigDisableOption "CONFIG_SH2" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH2A" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH3" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH4" "${cfg}"
CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}"
case "${CT_ARCH_SH_VARIANT}" in
+ sh2) CT_KconfigEnableOption "CONFIG_SH2" "${cfg}";;
+ sh2a) CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}";;
sh3) CT_KconfigEnableOption "CONFIG_SH3" "${cfg}";;
sh4) CT_KconfigEnableOption "CONFIG_SH4" "${cfg}";;
sh4a) CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}";;
@@ -58,6 +179,36 @@ CT_DoArchUClibcCflags() {
for f in ${cflags}; do
case "${f}" in
+ -ml)
+ CT_KconfigDisableOption "ARCH_BIG_ENDIAN" "${dst}"
+ CT_KconfigDisableOption "ARCH_WANTS_BIG_ENDIAN" "${dst}"
+ CT_KconfigEnableOption "ARCH_LITTLE_ENDIAN" "${dst}"
+ CT_KconfigEnableOption "ARCH_WANTS_LITTLE_ENDIAN" "${dst}"
+ ;;
+ -mb)
+ CT_KconfigEnableOption "ARCH_BIG_ENDIAN" "${dst}"
+ CT_KconfigEnableOption "ARCH_WANTS_BIG_ENDIAN" "${dst}"
+ CT_KconfigDisableOption "ARCH_LITTLE_ENDIAN" "${dst}"
+ CT_KconfigDisableOption "ARCH_WANTS_LITTLE_ENDIAN" "${dst}"
+ ;;
+ -m2|-m2a|-m2a-nofpu|-m3|-m4|-m4-nofpu|-m4a|-m4a-nofpu)
+ CT_KconfigDisableOption "CONFIG_SH2" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH2A" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH3" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH4" "${cfg}"
+ CT_KconfigDisableOption "CONFIG_SH4A" "${cfg}"
+ CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
+ case "${f}" in
+ -m2)
+ CT_KconfigEnableOption "CONFIG_SH2" "${cfg}"
+ ;;
+ -m2a)
+ CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}"
+ CT_KconfigEnableOption "UCLIBC_HAS_FPU" "${cfg}"
+ ;;
+ -m2a-nofpu)
+ CT_KconfigEnableOption "CONFIG_SH2A" "${cfg}"
+ ;;
-m3)
CT_KconfigEnableOption "CONFIG_SH3" "${cfg}"
;;
@@ -67,7 +218,6 @@ CT_DoArchUClibcCflags() {
;;
-m4-nofpu)
CT_KconfigEnableOption "CONFIG_SH4" "${cfg}"
- CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
;;
-m4a)
CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}"
@@ -75,8 +225,9 @@ CT_DoArchUClibcCflags() {
;;
-m4a-nofpu)
CT_KconfigEnableOption "CONFIG_SH4A" "${cfg}"
- CT_KconfigDisableOption "UCLIBC_HAS_FPU" "${cfg}"
;;
+ esac
+ ;;
esac
done
}
diff --git a/scripts/build/arch/sparc.sh b/scripts/build/arch/sparc.sh
index 74f6f78..22d98e4 100644
--- a/scripts/build/arch/sparc.sh
+++ b/scripts/build/arch/sparc.sh
@@ -3,17 +3,32 @@ CT_DoArchTupleValues() {
# That's the only thing to override
CT_TARGET_ARCH="sparc${target_bits_64}${CT_ARCH_SUFFIX}"
- # By default, sparc64-*-linux is configured with -mcpu=v9. However,
- # according to https://sourceware.org/ml/libc-alpha/2005-12/msg00027.html,
- # "There is no Linux sparc64 port that runs on non-UltraSPARC-I+ ISA CPUs."
- # There is a patch that would change the default to -mcpu=ultrasparc for
- # sparc64-*-linux configuration: https://patchwork.ozlabs.org/patch/409424/
- # but that patch has not been integrated (yet). One concern raised about
- # this patch was that -mcpu=ultrasparc can suboptimally schedule instructions
- # for newer SPARC CPUs. So, override to -mcpu=ultrasparc and warn the user.
- if [ "${CT_KERNEL}" = "linux" -a "${CT_ARCH_64}" = "y" -a -z "${CT_ARCH_CPU}" ]; then
- CT_DoLog WARN "Setting CPU to UltraSPARC-I for sparc64-linux. Set CT_ARCH_CPU if a different CPU is desired."
- CT_ARCH_WITH_CPU="--with-cpu=ultrasparc"
+ if [ "${CT_KERNEL}" = "linux" -a -z "${CT_ARCH_CPU}" ]; then
+ if [ "${CT_ARCH_64}" = "y" ]; then
+ # By default, sparc64-*-linux is configured with -mcpu=v9. However,
+ # according to https://sourceware.org/ml/libc-alpha/2005-12/msg00027.html,
+ # "There is no Linux sparc64 port that runs on non-UltraSPARC-I+ ISA CPUs."
+ # There is a patch that would change the default to -mcpu=ultrasparc for
+ # sparc64-*-linux configuration: https://patchwork.ozlabs.org/patch/409424/
+ # but that patch has not been integrated (yet). One concern raised about
+ # this patch was that -mcpu=ultrasparc can suboptimally schedule instructions
+ # for newer SPARC CPUs. So, override to -mcpu=ultrasparc and warn the user.
+ CT_DoLog WARN "Setting CPU to UltraSPARC-I for sparc64-linux. Set CT_ARCH_CPU if a different CPU is desired."
+ CT_ARCH_WITH_CPU="--with-cpu=ultrasparc"
+ if [ -n "${CT_ARCH_SUPPORTS_WITH_32_64}" -a -n "${CT_MULTILIB}" ]; then
+ CT_ARCH_WITH_CPU_32="--with-cpu-32=ultrasparc"
+ CT_ARCH_WITH_CPU_64="--with-cpu-64=ultrasparc"
+ fi
+ else
+ # Similarly, sparc-*-linux defaults to v7. GLIBC 2.31 started to reject
+ # pre-v8 configurations with 2.31, and default v8 fails a subsequent test for
+ # using atomics (which are presumably, only available on some v8 CPUs).
+ # Therefore, default to v9.
+ if [ -z "${CT_GLIBC_SPARC_ALLOW_V7}" ]; then
+ CT_DoLog WARN "Setting CPU to V9 for sparc-linux. Set CT_ARCH_CPU if a different CPU is desired."
+ CT_ARCH_WITH_CPU="--with-cpu=v9"
+ fi
+ fi
fi
}
@@ -60,8 +75,8 @@ CT_DoArchGlibcAdjustTuple() {
# 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"
+ if [ "${CT_GLIBC_NO_SPARC_V8}" = y ]; then
+ CT_DoLog WARN "GLIBC 2.23 and newer only support SPARCv9"
target_=${target_/#sparc-/sparcv9-}
fi
;;
diff --git a/scripts/build/arch/x86.sh b/scripts/build/arch/x86.sh
index 3a7a2ce..0538d66 100644
--- a/scripts/build/arch/x86.sh
+++ b/scripts/build/arch/x86.sh
@@ -10,7 +10,11 @@ CT_DoArchTupleValues() {
arch="${CT_ARCH_ARCH}"
[ -z "${arch}" ] && arch="${CT_ARCH_TUNE}"
case "${arch}" in
- "") CT_TARGET_ARCH=i386;;
+ "")
+ CT_DoLog WARN "Architecture level is not specified for 32-bit x86; defaulting to i386."
+ CT_DoLog WARN "This may not be supported by the C library."
+ 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;;
@@ -86,7 +90,7 @@ CT_DoArchGlibcAdjustTuple() {
# 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
+ # above and set the optimization to i686. Otherwise, replace with the most
# conservative choice, i486.
i386-*)
if [ "${CT_TARGET_ARCH}" = "x86_64" ]; then
diff --git a/scripts/build/arch/xtensa.sh b/scripts/build/arch/xtensa.sh
index bf94ddf..d0ba6f5 100644
--- a/scripts/build/arch/xtensa.sh
+++ b/scripts/build/arch/xtensa.sh
@@ -1,79 +1,15 @@
# Compute Xtensa-specific values
-CT_DoArchTupleValues() {
+CT_DoArchTupleValues()
+{
# The architecture part of the tuple:
CT_TARGET_ARCH="${CT_ARCH}${CT_ARCH_SUFFIX}"
CT_ARCH_ENDIAN_CFLAG=""
CT_ARCH_ENDIAN_LDFLAG=""
- # The system part of the tuple:
- case "${CT_LIBC}" in
- *glibc) CT_TARGET_SYS=gnu;;
- uClibc) CT_TARGET_SYS=uclibc;;
- esac
}
-# This function updates the specified component (binutils, gcc, gdb, etc.)
-# with the processor specific configuration.
-CT_ConfigureXtensa() {
- local component="${1}"
- local version="${2}"
- local custom_overlay="xtensa_${CT_ARCH_XTENSA_CUSTOM_NAME}.tar"
- local custom_location="${CT_ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION}"
-
- if [ -z "${CT_ARCH_XTENSA_CUSTOM_NAME}" ]; then
- custom_overlay="xtensa-overlay.tar"
- fi
-
- CT_TestAndAbort "${custom_overlay}: CT_ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION must be set." -z "${custom_location}"
-
- local full_file="${custom_location}/${custom_overlay}"
- local basename="${component}-${version}"
- local ext
-
- ext=${full_file/*./.}
-
- if [ -z "${ext}" ] ; then
- CT_DoLog WARN "'${full_file}' not found"
- return 1
- fi
-
- if [ -e "${CT_SRC_DIR}/.${basename}.configuring" ]; then
- CT_DoLog ERROR "The '${basename}' source were partially configured."
- CT_DoLog ERROR "Please remove first:"
- CT_DoLog ERROR " - the source dir for '${basename}', in '${CT_SRC_DIR}'"
- CT_DoLog ERROR " - the file '${CT_SRC_DIR}/.${basename}.extracted'"
- CT_DoLog ERROR " - the file '${CT_SRC_DIR}/.${basename}.patch'"
- CT_DoLog ERROR " - the file '${CT_SRC_DIR}/.${basename}.configuring'"
- CT_Abort
- fi
-
- CT_DoLog EXTRA "Using '${custom_overlay}' from ${custom_location}"
- CT_DoExecLog DEBUG ln -sf "${custom_location}/${custom_overlay}" \
- "${CT_TARBALLS_DIR}/${custom_overlay}"
-
- CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.${basename}.configuring"
-
- CT_Pushd "${CT_SRC_DIR}/${basename}"
-
- tar_opts=( "--strip-components=1" )
- tar_opts+=( "-xv" )
-
- case "${ext}" in
- .tar) CT_DoExecLog FILE tar "${tar_opts[@]}" -f "${full_file}" "${component}";;
- .gz|.tgz) gzip -dc "${full_file}" | CT_DoExecLog FILE tar "${tar_opts[@]}" -f - "${component}";;
- .bz2) bzip2 -dc "${full_file}" | CT_DoExecLog FILE tar "${tar_opts[@]}" -f - "${component}";;
- *) CT_DoLog WARN "Don't know how to handle '${basename}${ext}': unknown extension"
- return 1
- ;;
- esac
-
- CT_DoExecLog DEBUG touch "${CT_SRC_DIR}/.${basename}.configured"
- CT_DoExecLog DEBUG rm -f "${CT_SRC_DIR}/.${basename}.configuring"
-
- CT_Popd
-}
-
-CT_DoArchUClibcConfig() {
+CT_DoArchUClibcConfig()
+{
local cfg="${1}"
CT_DoArchUClibcSelectArch "${cfg}" "xtensa"