ObjFW
 
Loading...
Searching...
No Matches
platform.h
1/*
2 * Copyright (c) 2008-2026 Jonathan Schleifer <js@nil.im>
3 *
4 * All rights reserved.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License version 3.0 only,
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 * version 3.0 for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * version 3.0 along with this program. If not, see
17 * <https://www.gnu.org/licenses/>.
18 */
19
20#include "objfw-defs.h"
21
22/* Required to build universal binaries on OS X */
23#ifdef OF_UNIVERSAL
24# if __BIG_ENDIAN__
25# define OF_BIG_ENDIAN
26# define OF_FLOAT_BIG_ENDIAN
27# elif !__LITTLE_ENDIAN__
28# error OF_UNIVERSAL defined, but neither __BIG_ENDIAN__ nor __LITTLE_ENDIAN__!
29# endif
30#endif
31
32#if (defined(__x86_64__) || defined(__amd64__)) && \
33 (defined(__LP64__) || defined(_WIN64))
34# define OF_AMD64
35#elif defined(__i386__)
36# define OF_X86
37#elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)
38# define OF_POWERPC64
39#elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__)
40# define OF_POWERPC
41#elif defined(__arm64__) || defined(__aarch64__) || defined(__ARM64_ARCH_8__)
42# define OF_ARM64
43#elif defined(__arm__) || defined(__ARM__)
44# define OF_ARM
45# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
46 defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || \
47 defined(__ARM_ARCH_7EM__)
48# define OF_ARMV7
49# endif
50# if defined(OF_ARMV7) || defined(__ARM_ARCH_6__) || \
51 defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || \
52 defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || \
53 defined(__ARM_ARCH_6T2__)
54# define OF_ARMV6
55# endif
56#elif defined(_MIPS_SIM)
57# if _MIPS_SIM == _ABI64
58# define OF_MIPS64
59# define OF_MIPS64_N64
60# elif _MIPS_SIM == _ABIN32
61# define OF_MIPS64
62# define OF_MIPS64_N32
63# elif _MIPS_SIM == _ABIO32
64# define OF_MIPS
65# define OF_MIPS_O32
66# endif
67#elif defined(__mips_eabi) && _MIPS_SZPTR == 32
68# define OF_MIPS
69# define OF_MIPS_EABI
70#elif defined(__sparc64__) || (defined(__sparc__) && defined(__arch64__))
71# define OF_SPARC64
72#elif defined(__sparc__) && !defined(__arch64__)
73# define OF_SPARC
74#elif defined(__hppa64__) || defined(_PA_RISC2_0)
75# define OF_PA_RISC_2_0
76#elif defined(__hppa__) || defined(_PA_RISC1_0) || defined(_PA_RISC1_1)
77# define OF_PA_RISC
78#elif defined(__ia64__) || defined(__IA64__)
79# define OF_ITANIUM
80#elif defined(__m68k__)
81# define OF_M68K
82# ifdef __mc68060__
83# define OF_M68060
84# endif
85# if defined(__mc68040__) || defined(OF_M68060)
86# define OF_M68040
87# endif
88# if defined(__mc68030__) || defined(OF_M68040)
89# define OF_M68030
90# endif
91# if defined(__mc68020__) || defined(OF_M68030)
92# define OF_M68020
93# endif
94# if defined(__mc68010__) || defined(OF_M68020)
95# define OF_M68010
96# endif
97#elif defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
98# define OF_RISCV64
99#elif defined(__riscv)
100# define OF_RISCV
101#elif defined(__s390x__)
102# define OF_S390X
103#elif defined(__s390__)
104# define OF_S390
105#elif defined(__sh__)
106# define OF_SUPERH
107#elif defined(__e2k__)
108# define OF_ELBRUS_2000
109#elif defined(__loongarch64)
110# define OF_LOONGARCH64
111#endif
112
113#if defined(__APPLE__)
114# include <TargetConditionals.h>
115# if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || \
116 (defined(TARGET_OS_SIMULATOR) && TARGET_OS_SIMULATOR)
117# define OF_IOS
118# else
119# define OF_MACOS
120# endif
121#elif defined(__linux__)
122# define OF_LINUX
123#elif defined(_WIN32)
124# define OF_WINDOWS
125#elif defined(__FreeBSD__)
126# define OF_FREEBSD
127#elif defined(__NetBSD__)
128# define OF_NETBSD
129#elif defined(__OpenBSD__)
130# define OF_OPENBSD
131#elif defined(__DragonFly__)
132# define OF_DRAGONFLYBSD
133#elif defined(__ANDROID__)
134# define OF_ANDROID
135#elif defined(__HAIKU__)
136# define OF_HAIKU
137#elif defined(_AIX)
138# define OF_AIX
139#elif defined(__MORPHOS__)
140# define OF_MORPHOS
141# define OF_AMIGAOS
142#elif defined(__amigaos4__)
143# define OF_AMIGAOS4
144# define OF_AMIGAOS
145#elif defined(__amigaos__)
146# define OF_AMIGAOS_M68K
147# define OF_AMIGAOS
148#elif defined(__sun__)
149# define OF_SOLARIS
150#elif defined(__QNX__)
151# define OF_QNX
152#elif defined(__hpux__)
153# define OF_HPUX
154#elif defined(_PSP)
155# define OF_PSP
156#elif defined(__DJGPP__)
157# define OF_DJGPP
158# define OF_MSDOS
159#elif defined(__riscos__)
160# define OF_ACORN_RISC_OS
161#elif defined(__MINT__)
162# define OF_MINT
163#elif defined(__gnu_hurd__)
164# define OF_HURD
165#elif defined(__serenity__)
166# define OF_SERENITYOS
167#endif
168
169#ifdef __GLIBC__
170# define OF_GLIBC
171#endif
172
173#if defined(__ELF__)
174# define OF_ELF
175#elif defined(__MACH__)
176# define OF_MACH_O
177#endif
178
179#if defined(__PIC__) || defined(__pic__)
180# define OF_PIC
181#endif