summaryrefslogtreecommitdiff
path: root/cmake/archdetect.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/archdetect.c')
-rw-r--r--cmake/archdetect.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/cmake/archdetect.c b/cmake/archdetect.c
new file mode 100644
index 0000000..f8feb88
--- /dev/null
+++ b/cmake/archdetect.c
@@ -0,0 +1,95 @@
+// archdetect.c -- Detect compiler architecture and raise preprocessor error
+// containing a simple arch identifier.
+// Copyright (C) 2019 Hans Kristian Rosbach
+// Licensed under the Zlib license, see LICENSE.md for details
+
+// x86_64
+#if defined(__x86_64__) || defined(_M_X64)
+ #error archfound x86_64
+
+// x86
+#elif defined(__i386) || defined(_M_IX86)
+ #error archfound i686
+
+// ARM
+#elif defined(__aarch64__) || defined(_M_ARM64)
+ #error archfound aarch64
+#elif defined(__arm__) || defined(__arm) || defined(_M_ARM) || defined(__TARGET_ARCH_ARM)
+ #if defined(__ARM64_ARCH_8__) || defined(__ARMv8__) || defined(__ARMv8_A__)
+ #error archfound armv8
+ #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__))
+ #error archfound armv7
+ #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6M__)
+ #error archfound armv6
+ #elif defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
+ #error archfound armv5
+ #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARCH_5E__)
+ #error archfound armv4
+ #elif defined(__ARM_ARCH_3__) || defined(__TARGET_ARCH_3M__)
+ #error archfound armv3
+ #elif defined(__ARM_ARCH_2__)
+ #error archfound armv2
+ #endif
+
+// PowerPC
+#elif defined(__powerpc__) || defined(_ppc__) || defined(__PPC__)
+ #if defined(__64BIT__) || defined(__powerpc64__) || defined(__ppc64__)
+ #error archfound ppc64
+ #else
+ #error archfound ppc
+ #endif
+
+// --------------- Less common architectures alphabetically below ---------------
+
+// ALPHA
+#elif defined(__alpha__) || defined(__alpha)
+ #error archfound alpha
+
+// Blackfin
+#elif defined(__BFIN__)
+ #error archfound blackfin
+
+// Itanium
+#elif defined(__ia64) || defined(_M_IA64)
+ #error archfound ia64
+
+// MIPS
+#elif defined(__mips__) || defined(__mips)
+ #error archfound mips
+
+// Motorola 68000-series
+#elif defined(__m68k__)
+ #error archfound m68k
+
+// SuperH
+#elif defined(__sh__)
+ #error archfound sh
+
+// SPARC
+#elif defined(__sparc__) || defined(__sparc)
+ #if defined(__sparcv9) || defined(__sparc_v9__)
+ #error archfound sparc9
+ #elif defined(__sparcv8) || defined(__sparc_v8__)
+ #error archfound sparc8
+ #endif
+
+// SystemZ
+#elif defined(__370__)
+ #error archfound s370
+#elif defined(__s390__)
+ #error archfound s390
+#elif defined(__s390x) || defined(__zarch__)
+ #error archfound s390x
+
+// PARISC
+#elif defined(__hppa__)
+ #error archfound parisc
+
+// RS-6000
+#elif defined(__THW_RS6000)
+ #error archfound rs6000
+
+// return 'unrecognized' if we do not know what architecture this is
+#else
+ #error archfound unrecognized
+#endif