summaryrefslogtreecommitdiff
path: root/scripts/build/arch/arm.sh
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2016-04-05 21:47:20 (GMT)
committerAlexey Neyman <stilor@att.net>2016-08-23 18:00:27 (GMT)
commitf2ffdf798ddcd5b471a5055c18215ca2988ddf29 (patch)
treee0ab6994e184c92494f7035ccc7080dc0bf11e01 /scripts/build/arch/arm.sh
parentbf3eceb5d9b27fc65c819abe0b7f3cec704917e7 (diff)
First stab at multilib/uClibc.
Create a separate 'libc_backend_once', install headers into a subdirectory (different sets of headers are installed for 32- and 64-bit architectures), and create a symlink for the dynamic linker location expected by GCC. Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'scripts/build/arch/arm.sh')
-rw-r--r--scripts/build/arch/arm.sh62
1 files changed, 61 insertions, 1 deletions
diff --git a/scripts/build/arch/arm.sh b/scripts/build/arch/arm.sh
index 8af0072..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,6 +37,23 @@ 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() {
@@ -45,6 +61,15 @@ CT_DoArchUClibcConfig() {
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
@@ -58,3 +83,38 @@ CT_DoArchUClibcConfig() {
CT_KconfigEnableOption "CONFIG_ARM_OABI" "${cfg}"
fi
}
+
+CT_DoArchUClibcCflags() {
+ local cfg="${1}"
+ local cflags="${2}"
+ local f
+
+ 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
+}