aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-12-13 17:33:20 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-12-14 00:40:52 +0100
commitce50c885b8b0c6fac6f2ce02b999f3726651080f (patch)
tree6f0e4c30afc9360cb4c6f481fd82b2346e5700f9
parentfdf8252f312a40df9aa51c6e30c0d07fa29ebd12 (diff)
downloadsparse-dev-ce50c885b8b0c6fac6f2ce02b999f3726651080f.tar.gz
add detection of native platform
The underlying type of most builtin types (size_t, int32_t, ...), as well as their size, the endianness and other parameters are platform dependent. The minimal is to have these parameters correct on the native machine. Use the diffrent predefined macros to detect the native machine. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--machine.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/machine.h b/machine.h
new file mode 100644
index 00000000..a01cdc20
--- /dev/null
+++ b/machine.h
@@ -0,0 +1,54 @@
+#ifndef MACHINE_H
+#define MACHINE_H
+
+enum machine {
+ MACH_ARM,
+ MACH_ARM64,
+ MACH_I386,
+ MACH_X86_64,
+ MACH_MIPS32,
+ MACH_MIPS64,
+ MACH_PPC32,
+ MACH_PPC64,
+ MACH_RISCV32,
+ MACH_RISCV64,
+ MACH_SPARC32,
+ MACH_SPARC64,
+ MACH_M68K,
+ MACH_S390X,
+ MACH_UNKNOWN
+};
+
+#if defined(__aarch64__)
+#define MACH_NATIVE MACH_ARM64
+#elif defined(__arm__)
+#define MACH_NATIVE MACH_ARM
+#elif defined(__x86_64__) || defined(__x86_64)
+#define MACH_NATIVE MACH_X86_64
+#elif defined(__i386__) || defined(__i386)
+#define MACH_NATIVE MACH_I386
+#elif defined(__mips64__) || (defined(__mips) && __mips == 64)
+#define MACH_NATIVE MACH_MIPS64
+#elif defined(__mips__) || defined(__mips)
+#define MACH_NATIVE MACH_MIPS32
+#elif defined(__powerpc64__) || defined(__ppc64__)
+#define MACH_NATIVE MACH_PPC64
+#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__)
+#define MACH_NATIVE MACH_PPC32
+#elif defined(__riscv) && (__riscv_xlen == 64)
+#define MACH_NATIVE MACH_RISCV64
+#elif defined(__riscv) && (__riscv_xlen == 32)
+#define MACH_NATIVE MACH_RISCV32
+#elif defined(__sparc_v9__)
+#define MACH_NATIVE MACH_SPARC64
+#elif defined(__sparc__) || defined(__sparc)
+#define MACH_NATIVE MACH_SPARC32
+#elif defined(__m68k__)
+#define MACH_NATIVE MACH_68K
+#elif defined(__s390x__) || defined(__zarch__)
+#define MACH_NATIVE MACH_S390X
+#else
+#define MACH_NATIVE MACH_UNKNOWN
+#endif
+
+#endif