ObjFW
platform.h
1 /*
2  * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
3  * Jonathan Schleifer <js@heap.zone>
4  *
5  * All rights reserved.
6  *
7  * This file is part of ObjFW. It may be distributed under the terms of the
8  * Q Public License 1.0, which can be found in the file LICENSE.QPL included in
9  * the packaging of this file.
10  *
11  * Alternatively, it may be distributed under the terms of the GNU General
12  * Public License, either version 2 or 3, which can be found in the file
13  * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
14  * file.
15  */
16 
17 #include "objfw-defs.h"
18 
19 /* Required to build universal binaries on OS X */
20 #ifdef OF_UNIVERSAL
21 # if __BIG_ENDIAN__
22 # define OF_BIG_ENDIAN
23 # define OF_FLOAT_BIG_ENDIAN
24 # elif !__LITTLE_ENDIAN__
25 # error OF_UNIVERSAL defined, but neither __BIG_ENDIAN__ nor __LITTLE_ENDIAN__!
26 # endif
27 #endif
28 
29 #if defined(__x86_64__) || defined(__amd64__)
30 # define OF_X86_64
31 #elif defined(__i386__)
32 # define OF_X86
33 #elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)
34 # define OF_POWERPC64
35 #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)
36 # define OF_POWERPC
37 #elif defined(__arm64__) || defined(__aarch64__) || defined(__ARM64_ARCH_8__)
38 # define OF_ARM64
39 #elif defined(__arm__) || defined(__ARM__)
40 # define OF_ARM
41 # if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
42  defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || \
43  defined(__ARM_ARCH_7EM__)
44 # define OF_ARMV7
45 # endif
46 # if defined(OF_ARMV7) || defined(__ARM_ARCH_6__) || \
47  defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \
48  defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || \
49  defined(__ARM_ARCH_6T2__)
50 # define OF_ARMV6
51 # endif
52 #elif defined(_MIPS_SIM)
53 # if _MIPS_SIM == _ABI64
54 # define OF_MIPS64
55 # define OF_MIPS64_N64
56 # elif _MIPS_SIM == _ABIN32
57 # define OF_MIPS64
58 # define OF_MIPS64_N32
59 # elif _MIPS_SIM == _ABIO32
60 # define OF_MIPS
61 # define OF_MIPS_O32
62 # endif
63 #elif defined(__mips_eabi) && _MIPS_SZPTR == 32
64 # define OF_MIPS
65 # define OF_MIPS_EABI
66 #elif defined(__sparc64__) || (defined(__sparc__) && defined(__arch64__))
67 # define OF_SPARC64
68 #elif defined(__sparc__) && !defined(__arch64__)
69 # define OF_SPARC
70 #endif
71 
72 #if defined(__APPLE__)
73 # include <TargetConditionals.h>
74 # if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
75 # define OF_IOS
76 # else
77 # define OF_MACOS
78 # endif
79 #elif defined(__linux__)
80 # define OF_LINUX
81 #elif defined(_WIN32)
82 # define OF_WINDOWS
83 #elif defined(__FreeBSD__)
84 # define OF_FREEBSD
85 #elif defined(__NetBSD__)
86 # define OF_NETBSD
87 #elif defined(__OpenBSD__)
88 # define OF_OPENBSD
89 #elif defined(__DragonFly__)
90 # define OF_DRAGONFLYBSD
91 #elif defined(__ANDROID__)
92 # define OF_ANDROID
93 #elif defined(__HAIKU__)
94 # define OF_HAIKU
95 #elif defined(__MORPHOS__)
96 # ifndef __ixemul__
97 # define OF_MORPHOS
98 # define OF_AMIGAOS_LIKE
99 # else
100 # define OF_MORPHOS_IXEMUL
101 # endif
102 #elif defined(__sun__)
103 # define OF_SOLARIS
104 #elif defined(__QNX__)
105 # define OF_QNX
106 #elif defined(__wii__)
107 # define OF_WII
108 #elif defined(_PSP)
109 # define OF_PSP
110 #elif defined(__DJGPP__)
111 # define OF_DJGPP
112 # define OF_MSDOS
113 #endif
114 
115 #if defined(__ELF__)
116 # define OF_ELF
117 #elif defined(__MACH__)
118 # define OF_MACH_O
119 #endif
120 
121 #if defined(__PIC__) || defined(__pic__)
122 # define OF_PIC
123 #endif