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.sh11
-rw-r--r--scripts/build/arch/m68k.sh11
-rw-r--r--scripts/build/arch/microblaze.sh11
-rw-r--r--scripts/build/arch/mips.sh11
-rw-r--r--scripts/build/arch/powerpc.sh41
-rw-r--r--scripts/build/arch/s390.sh27
-rw-r--r--scripts/build/arch/sh.sh11
-rw-r--r--scripts/build/arch/sparc.sh24
-rw-r--r--scripts/build/arch/x86.sh47
10 files changed, 205 insertions, 0 deletions
diff --git a/scripts/build/arch/alpha.sh b/scripts/build/arch/alpha.sh
index cf6d40d..ffceae3 100644
--- a/scripts/build/arch/alpha.sh
+++ b/scripts/build/arch/alpha.sh
@@ -4,3 +4,14 @@ 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 5f6ce2f..338392c 100644
--- a/scripts/build/arch/arm.sh
+++ b/scripts/build/arch/arm.sh
@@ -39,3 +39,14 @@ CT_DoArchTupleValues() {
CT_TARGET_SYS="${CT_TARGET_SYS}hf"
fi
}
+
+#------------------------------------------------------------------------------
+# 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/m68k.sh b/scripts/build/arch/m68k.sh
index bf26d1b..a6eb010 100644
--- a/scripts/build/arch/m68k.sh
+++ b/scripts/build/arch/m68k.sh
@@ -3,3 +3,14 @@
CT_DoArchTupleValues() {
:
}
+
+#------------------------------------------------------------------------------
+# 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/microblaze.sh b/scripts/build/arch/microblaze.sh
index 456a6e3..93ecc9a 100644
--- a/scripts/build/arch/microblaze.sh
+++ b/scripts/build/arch/microblaze.sh
@@ -19,3 +19,14 @@ CT_DoArchTupleValues () {
esac
}
+
+#------------------------------------------------------------------------------
+# 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/mips.sh b/scripts/build/arch/mips.sh
index 4d732be..68ad4fa 100644
--- a/scripts/build/arch/mips.sh
+++ b/scripts/build/arch/mips.sh
@@ -14,3 +14,14 @@ CT_DoArchTupleValues() {
CT_ARCH_ABI_CFLAG="-mabi=${CT_ARCH_mips_ABI}"
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}"
+}
diff --git a/scripts/build/arch/powerpc.sh b/scripts/build/arch/powerpc.sh
index fbc3120..77bbc8a 100644
--- a/scripts/build/arch/powerpc.sh
+++ b/scripts/build/arch/powerpc.sh
@@ -26,3 +26,44 @@ CT_DoArchTupleValues () {
CT_ARCH_CC_EXTRA_CONFIG="--enable-e500_double"
fi
}
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ local m32=false
+ local m64=false
+ local mlittle=false
+ local mbig=false
+
+ for m in "${multi_flags[@]}"; do
+ case "$m" in
+ -m32) m32=true ;;
+ -m64) m64=true ;;
+ -mbig) mbig=true ;;
+ -mlittle) mlittle=true ;;
+ esac
+ done
+
+ # 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-} ;;
+ 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-} ;;
+ esac
+
+ # return the target
+ echo "${target}"
+}
diff --git a/scripts/build/arch/s390.sh b/scripts/build/arch/s390.sh
index b4b8078..e303420 100644
--- a/scripts/build/arch/s390.sh
+++ b/scripts/build/arch/s390.sh
@@ -6,3 +6,30 @@ CT_DoArchTupleValues() {
CT_TARGET_ARCH="s390x${CT_ARCH_SUFFIX}"
fi
}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ local m31=false
+ local m64=false
+
+ for m in "${multi_flags[@]}"; do
+ case "${multi_flags}" in
+ -m64) m64=true ;;
+ -m31) m31=true ;;
+ esac
+ done
+
+ # Fix bitness
+ case "${target}" in
+ s390-*) $m64 && target=${target/#s390-/s390x-} ;;
+ s390x-*) $m31 && target=${target/#s390x-/s390-} ;;
+ esac
+
+ echo "${target}"
+}
diff --git a/scripts/build/arch/sh.sh b/scripts/build/arch/sh.sh
index 7780e40..e7f4f1a 100644
--- a/scripts/build/arch/sh.sh
+++ b/scripts/build/arch/sh.sh
@@ -35,3 +35,14 @@ CT_DoArchTupleValues () {
esac
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}"
+}
diff --git a/scripts/build/arch/sparc.sh b/scripts/build/arch/sparc.sh
index e3e7491..2d3baa3 100644
--- a/scripts/build/arch/sparc.sh
+++ b/scripts/build/arch/sparc.sh
@@ -2,4 +2,28 @@
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"
+ fi
+}
+
+#------------------------------------------------------------------------------
+# 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/x86.sh b/scripts/build/arch/x86.sh
index 69407db..ca0f08b 100644
--- a/scripts/build/arch/x86.sh
+++ b/scripts/build/arch/x86.sh
@@ -20,4 +20,51 @@ CT_DoArchTupleValues() {
esac
fi
CT_TARGET_ARCH="${CT_TARGET_ARCH}${CT_ARCH_SUFFIX}"
+
+ # 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
+}
+
+#------------------------------------------------------------------------------
+# Get multilib architecture-specific target
+# Usage: CT_DoArchMultilibTarget "multilib flags" "target tuple"
+CT_DoArchMultilibTarget ()
+{
+ local target="${1}"; shift
+ local -a multi_flags=( "$@" )
+
+ 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
+
+ # 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-} ;;
+ esac
+
+ # Fix up the ABI part.
+ case "${target}" in
+ *x32) $abi_dflt && target=${target/%x32} ;;
+ *) $abi_x32 && target=${target}x32 ;;
+ esac
+
+ echo "${target}"
}