ObjFW
platform.h
1 /*
2  * Copyright (c) 2008-2023 Jonathan Schleifer <js@nil.im>
3  *
4  * All rights reserved.
5  *
6  * This file is part of ObjFW. It may be distributed under the terms of the
7  * Q Public License 1.0, which can be found in the file LICENSE.QPL included in
8  * the packaging of this file.
9  *
10  * Alternatively, it may be distributed under the terms of the GNU General
11  * Public License, either version 2 or 3, which can be found in the file
12  * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
13  * file.
14  */
15 
16 #include "objfw-defs.h"
17 
18 /* Required to build universal binaries on OS X */
19 #ifdef OF_UNIVERSAL
20 # if __BIG_ENDIAN__
21 # define OF_BIG_ENDIAN
22 # define OF_FLOAT_BIG_ENDIAN
23 # elif !__LITTLE_ENDIAN__
24 # error OF_UNIVERSAL defined, but neither __BIG_ENDIAN__ nor __LITTLE_ENDIAN__!
25 # endif
26 #endif
27 
28 #if defined(__x86_64__) || defined(__amd64__)
29 # define OF_AMD64
30 #elif defined(__i386__)
31 # define OF_X86
32 #elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)
33 # define OF_POWERPC64
34 #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)
35 # define OF_POWERPC
36 #elif defined(__arm64__) || defined(__aarch64__) || defined(__ARM64_ARCH_8__)
37 # define OF_ARM64
38 #elif defined(__arm__) || defined(__ARM__)
39 # define OF_ARM
40 # if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
41  defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || \
42  defined(__ARM_ARCH_7EM__)
43 # define OF_ARMV7
44 # endif
45 # if defined(OF_ARMV7) || defined(__ARM_ARCH_6__) || \
46  defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \
47  defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || \
48  defined(__ARM_ARCH_6T2__)
49 # define OF_ARMV6
50 # endif
51 #elif defined(_MIPS_SIM)
52 # if _MIPS_SIM == _ABI64
53 # define OF_MIPS64
54 # define OF_MIPS64_N64
55 # elif _MIPS_SIM == _ABIN32
56 # define OF_MIPS64
57 # define OF_MIPS64_N32
58 # elif _MIPS_SIM == _ABIO32
59 # define OF_MIPS
60 # define OF_MIPS_O32
61 # endif
62 #elif defined(__mips_eabi) && _MIPS_SZPTR == 32
63 # define OF_MIPS
64 # define OF_MIPS_EABI
65 #elif defined(__sparc64__) || (defined(__sparc__) && defined(__arch64__))
66 # define OF_SPARC64
67 #elif defined(__sparc__) && !defined(__arch64__)
68 # define OF_SPARC
69 #elif defined(__hppa64__) || defined(_PA_RISC2_0)
70 # define OF_PA_RISC_2_0
71 #elif defined(__hppa__) || defined(_PA_RISC1_0) || defined(_PA_RISC1_1)
72 # define OF_PA_RISC
73 #elif defined(__ia64__) || defined(__IA64__)
74 # define OF_ITANIUM
75 #elif defined(__m68k__)
76 # define OF_M68K
77 # ifdef __mc68060__
78 # define OF_M68060
79 # endif
80 # if defined(__mc68040__) || defined(OF_M68060)
81 # define OF_M68040
82 # endif
83 # if defined(__mc68030__) || defined(OF_M68040)
84 # define OF_M68030
85 # endif
86 # if defined(__mc68020__) || defined(OF_M68030)
87 # define OF_M68020
88 # endif
89 # if defined(__mc68010__) || defined(OF_M68020)
90 # define OF_M68010
91 # endif
92 #elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
93 # define OF_RISC_V_64
94 #elif defined(__riscv)
95 # define OF_RISC_V
96 #elif defined(__s390x__)
97 # define OF_S390X
98 #elif defined(__s390__)
99 # define OF_S390
100 #elif defined(__e2k__)
101 # define OF_ELBRUS_2000
102 #endif
103 
104 #if defined(__APPLE__)
105 # include <TargetConditionals.h>
106 # if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || \
107  (defined(TARGET_OS_SIMULATOR) && TARGET_OS_SIMULATOR)
108 # define OF_IOS
109 # else
110 # define OF_MACOS
111 # endif
112 #elif defined(__linux__)
113 # define OF_LINUX
114 #elif defined(_WIN32)
115 # define OF_WINDOWS
116 #elif defined(__FreeBSD__)
117 # define OF_FREEBSD
118 #elif defined(__NetBSD__)
119 # define OF_NETBSD
120 #elif defined(__OpenBSD__)
121 # define OF_OPENBSD
122 #elif defined(__DragonFly__)
123 # define OF_DRAGONFLYBSD
124 #elif defined(__ANDROID__)
125 # define OF_ANDROID
126 #elif defined(__HAIKU__)
127 # define OF_HAIKU
128 #elif defined(_AIX)
129 # define OF_AIX
130 #elif defined(__MORPHOS__)
131 # define OF_MORPHOS
132 # define OF_AMIGAOS
133 #elif defined(__amigaos4__)
134 # define OF_AMIGAOS4
135 # define OF_AMIGAOS
136 #elif defined(__amigaos__)
137 # define OF_AMIGAOS_M68K
138 # define OF_AMIGAOS
139 #elif defined(__sun__)
140 # define OF_SOLARIS
141 #elif defined(__QNX__)
142 # define OF_QNX
143 #elif defined(__hpux__)
144 # define OF_HPUX
145 #elif defined(_PSP)
146 # define OF_PSP
147 #elif defined(__DJGPP__)
148 # define OF_DJGPP
149 # define OF_MSDOS
150 #elif defined(__riscos__)
151 # define OF_ACORN_RISC_OS
152 #elif defined(__MINT__)
153 # define OF_MINT
154 #elif defined(__gnu_hurd__)
155 # define OF_HURD
156 #endif
157 
158 #ifdef __GLIBC__
159 # define OF_GLIBC
160 #endif
161 
162 #if defined(__ELF__)
163 # define OF_ELF
164 #elif defined(__MACH__)
165 # define OF_MACH_O
166 #endif
167 
168 #if defined(__PIC__) || defined(__pic__)
169 # define OF_PIC
170 #endif