summaryrefslogtreecommitdiff
path: root/m4/get_arm_isa.m4
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-04-02 11:52:47 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-05-05 05:42:38 -0400
commit7ffbdc3fa603c6411249ba9b758cf8f109c5fb30 (patch)
tree8a05d6e03ce2790e6e59651c824e569fee088d33 /m4/get_arm_isa.m4
parent6acadb79afe685c635fd255f90551a0fbfcbe3dc (diff)
downloadhaskell-7ffbdc3fa603c6411249ba9b758cf8f109c5fb30.tar.gz
Break up aclocal.m4
Diffstat (limited to 'm4/get_arm_isa.m4')
-rw-r--r--m4/get_arm_isa.m4117
1 files changed, 117 insertions, 0 deletions
diff --git a/m4/get_arm_isa.m4 b/m4/get_arm_isa.m4
new file mode 100644
index 0000000000..9b458bb09f
--- /dev/null
+++ b/m4/get_arm_isa.m4
@@ -0,0 +1,117 @@
+# GET_ARM_ISA
+# ----------------------------------
+# Get info about the ISA on the ARM arch
+AC_DEFUN([GET_ARM_ISA],
+[
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM(
+ [],
+ [#if defined(__ARM_ARCH_2__) || \
+ defined(__ARM_ARCH_3__) || \
+ defined(__ARM_ARCH_3M__) || \
+ defined(__ARM_ARCH_4__) || \
+ defined(__ARM_ARCH_4T__) || \
+ defined(__ARM_ARCH_5__) || \
+ defined(__ARM_ARCH_5T__) || \
+ defined(__ARM_ARCH_5E__) || \
+ defined(__ARM_ARCH_5TE__)
+ return 0;
+ #else
+ not pre arm v6
+ #endif]
+ )],
+ [AC_DEFINE(arm_HOST_ARCH_PRE_ARMv6, 1, [ARM pre v6])
+ AC_DEFINE(arm_HOST_ARCH_PRE_ARMv7, 1, [ARM pre v7])
+ changequote(, )dnl
+ ARM_ISA=ARMv5
+ ARM_ISA_EXT="[]"
+ changequote([, ])dnl
+ ],
+ [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM(
+ [],
+ [#if defined(__ARM_ARCH_6__) || \
+ defined(__ARM_ARCH_6J__) || \
+ defined(__ARM_ARCH_6T2__) || \
+ defined(__ARM_ARCH_6Z__) || \
+ defined(__ARM_ARCH_6ZK__) || \
+ defined(__ARM_ARCH_6K__) || \
+ defined(__ARM_ARCH_6KZ__) || \
+ defined(__ARM_ARCH_6M__)
+ return 0;
+ #else
+ not pre arm v7
+ #endif]
+ )],
+ [AC_DEFINE(arm_HOST_ARCH_PRE_ARMv7, 1, [ARM pre v7])
+ if grep -q Raspbian /etc/issue && uname -m | grep -q armv7; then
+ # Raspbian unfortunately makes some extremely questionable
+ # packaging decisions, configuring gcc to compile for ARMv6
+ # despite the fact that the RPi4 is ARMv8. As ARMv8 doesn't
+ # support all instructions supported by ARMv6 this can
+ # break. Work around this by checking uname to verify
+ # that we aren't running on armv7.
+ # See #17856.
+ AC_MSG_NOTICE([Found compiler which claims to target ARMv6 running on ARMv7, assuming this is ARMv7 on Raspbian (see T17856)])
+ ARM_ISA=ARMv7
+ changequote(, )dnl
+ ARM_ISA_EXT="[VFPv2]"
+ changequote([, ])dnl
+ else
+ ARM_ISA=ARMv6
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM(
+ [],
+ [#if defined(__VFP_FP__)
+ return 0;
+ #else
+ no vfp
+ #endif]
+ )],
+ [changequote(, )dnl
+ ARM_ISA_EXT="[VFPv2]"
+ changequote([, ])dnl
+ ],
+ [changequote(, )dnl
+ ARM_ISA_EXT="[]"
+ changequote([, ])dnl
+ ]
+ )
+ fi],
+ [changequote(, )dnl
+ ARM_ISA=ARMv7
+ ARM_ISA_EXT="[VFPv3,NEON]"
+ changequote([, ])dnl
+ ])
+ ])
+
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [],
+ [#if defined(__SOFTFP__)
+ return 0;
+ #else
+ not softfp
+ #endif]
+ )],
+ [changequote(, )dnl
+ ARM_ABI="SOFT"
+ changequote([, ])dnl
+ ],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [],
+ [#if defined(__ARM_PCS_VFP)
+ return 0;
+ #else
+ no hard float ABI
+ #endif]
+ )],
+ [ARM_ABI="HARD"],
+ [ARM_ABI="SOFTFP"]
+ )]
+ )
+
+ AC_SUBST(ARM_ISA)
+])