ObjFW
Loading...
Searching...
No Matches
platform.h
1/*
2 * Copyright (c) 2008-2024 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