DDNet documentation
Loading...
Searching...
No Matches
detect.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef BASE_DETECT_H
4#define BASE_DETECT_H
5
6/*
7 this file detected the family, platform and architecture
8 to compile for.
9*/
10
11/* platforms */
12
13/* windows Family */
14#if defined(WIN64) || defined(_WIN64)
15/* Hmm, is this IA64 or x86-64? */
16#define CONF_FAMILY_WINDOWS 1
17#define CONF_FAMILY_STRING "windows"
18#define CONF_PLATFORM_WIN64 1
19#define PLATFORM_STRING "win64"
20#elif defined(WIN32) || defined(_WIN32) || defined(__CYGWIN32__) || defined(__MINGW32__)
21#define CONF_FAMILY_WINDOWS 1
22#define CONF_FAMILY_STRING "windows"
23#define CONF_PLATFORM_WIN32 1
24#define PLATFORM_STRING "win32"
25#endif
26
27/* unix family */
28#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
29#define CONF_FAMILY_UNIX 1
30#define CONF_FAMILY_STRING "unix"
31#define CONF_PLATFORM_FREEBSD 1
32#define PLATFORM_STRING "freebsd"
33#endif
34
35#if defined(__NetBSD__)
36#define CONF_FAMILY_UNIX 1
37#define CONF_FAMILY_STRING "unix"
38#define CONF_PLATFORM_NETBSD 1
39#define PLATFORM_STRING "netbsd"
40#endif
41
42#if defined(__OpenBSD__)
43#define CONF_FAMILY_UNIX 1
44#define CONF_FAMILY_STRING "unix"
45#define CONF_PLATFORM_OPENBSD 1
46#define PLATFORM_STRING "openbsd"
47#endif
48
49#if defined(__ANDROID__)
50#define CONF_FAMILY_UNIX 1
51#define CONF_FAMILY_STRING "unix"
52#define CONF_PLATFORM_ANDROID 1
53#define PLATFORM_STRING "android"
54#define CONF_BACKEND_OPENGL_ES 1
55#define CONF_BACKEND_OPENGL_ES3 1
56#elif defined(__EMSCRIPTEN__)
57#define CONF_FAMILY_UNIX 1
58#define CONF_FAMILY_STRING "unix"
59#define CONF_PLATFORM_EMSCRIPTEN 1
60#define PLATFORM_STRING "emscripten"
61#define CONF_BACKEND_OPENGL_ES3 1
62#define CONF_BACKEND_OPENGL_ES 1
63#elif defined(__LINUX__) || defined(__linux__)
64#define CONF_FAMILY_UNIX 1
65#define CONF_FAMILY_STRING "unix"
66#define CONF_PLATFORM_LINUX 1
67#define PLATFORM_STRING "linux"
68#define CONF_BACKEND_OPENGL_ES3 1
69#endif
70
71#if defined(__GNU__) || defined(__gnu__)
72#define CONF_FAMILY_UNIX 1
73#define CONF_FAMILY_STRING "unix"
74#define CONF_PLATFORM_HURD 1
75#define PLATFORM_STRING "gnu"
76#endif
77
78#if defined(MACOSX) || defined(__APPLE__) || defined(__DARWIN__)
79#include <TargetConditionals.h>
80#define CONF_FAMILY_UNIX 1
81#define CONF_FAMILY_STRING "unix"
82#if TARGET_OS_IPHONE
83#define CONF_PLATFORM_IOS 1
84#define PLATFORM_STRING "ios"
85#define CONF_BACKEND_OPENGL_ES 1
86#define CONF_BACKEND_OPENGL_ES3 1
87#else
88#define CONF_PLATFORM_MACOS 1
89#define PLATFORM_STRING "macos"
90#endif
91#endif
92
93#if defined(__sun)
94#define CONF_FAMILY_UNIX 1
95#define CONF_FAMILY_STRING "unix"
96#define CONF_PLATFORM_SOLARIS 1
97#define PLATFORM_STRING "solaris"
98#endif
99
100/* beos family */
101#if defined(__BeOS) || defined(__BEOS__)
102#define CONF_FAMILY_BEOS 1
103#define CONF_FAMILY_STRING "beos"
104#define CONF_PLATFORM_BEOS 1
105#define PLATFORM_STRING "beos"
106#endif
107
108#if defined(__HAIKU__)
109#define CONF_FAMILY_UNIX 1
110#define CONF_FAMILY_STRING "unix"
111#define CONF_PLATFORM_HAIKU 1
112#define PLATFORM_STRING "haiku"
113#endif
114
115/* use gcc endianness definitions when available */
116#if defined(__GNUC__) && !defined(__APPLE__) && !defined(__MINGW32__) && !defined(__sun)
117#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
118#include <sys/endian.h>
119#else
120#include <endian.h>
121#endif
122
123#if __BYTE_ORDER == __LITTLE_ENDIAN
124#define CONF_ARCH_ENDIAN_LITTLE 1
125#elif __BYTE_ORDER == __BIG_ENDIAN
126#define CONF_ARCH_ENDIAN_BIG 1
127#endif
128#endif
129
130/* architectures */
131#if defined(i386) || defined(__i386__) || defined(__x86__) || defined(CONF_PLATFORM_WIN32)
132#define CONF_ARCH_IA32 1
133#define CONF_ARCH_STRING "ia32"
134#if !defined(CONF_ARCH_ENDIAN_LITTLE) && !defined(CONF_ARCH_ENDIAN_BIG)
135#define CONF_ARCH_ENDIAN_LITTLE 1
136#endif
137#endif
138
139#if defined(__ia64__) || defined(_M_IA64)
140#define CONF_ARCH_IA64 1
141#define CONF_ARCH_STRING "ia64"
142#if !defined(CONF_ARCH_ENDIAN_LITTLE) && !defined(CONF_ARCH_ENDIAN_BIG)
143#define CONF_ARCH_ENDIAN_LITTLE 1
144#endif
145#endif
146
147#if defined(__amd64__) || defined(__x86_64__) || defined(_M_X64)
148#define CONF_ARCH_AMD64 1
149#define CONF_ARCH_STRING "amd64"
150#if !defined(CONF_ARCH_ENDIAN_LITTLE) && !defined(CONF_ARCH_ENDIAN_BIG)
151#define CONF_ARCH_ENDIAN_LITTLE 1
152#endif
153#endif
154
155#if defined(__powerpc__) || defined(__ppc__)
156#define CONF_ARCH_PPC 1
157#define CONF_ARCH_STRING "ppc"
158#if !defined(CONF_ARCH_ENDIAN_LITTLE) && !defined(CONF_ARCH_ENDIAN_BIG)
159#define CONF_ARCH_ENDIAN_BIG 1
160#endif
161#endif
162
163#if defined(__sparc__)
164#define CONF_ARCH_SPARC 1
165#define CONF_ARCH_STRING "sparc"
166#if !defined(CONF_ARCH_ENDIAN_LITTLE) && !defined(CONF_ARCH_ENDIAN_BIG)
167#define CONF_ARCH_ENDIAN_BIG 1
168#endif
169#endif
170
171#if defined(__ARMEB__)
172#define CONF_ARCH_ARM 1
173#define CONF_ARCH_STRING "arm"
174#define CONF_ARCH_ENDIAN_BIG 1
175#elif defined(__ARMEL__)
176#define CONF_ARCH_ARM 1
177#define CONF_ARCH_STRING "arm"
178#define CONF_ARCH_ENDIAN_LITTLE 1
179#elif defined(__aarch64__) || defined(__arm64__) || defined(__ARM_ARCH_ISA_A64)
180#define CONF_ARCH_ARM64 1
181#define CONF_ARCH_STRING "arm64"
182#if defined(__ARM_BIG_ENDIAN)
183#define CONF_ARCH_ENDIAN_BIG 1
184#else
185#define CONF_ARCH_ENDIAN_LITTLE 1
186#endif
187#endif
188
189#if defined(__EMSCRIPTEN__)
190#define CONF_ARCH_WASM 1
191#define CONF_ARCH_STRING "wasm32"
192#endif
193
194#ifndef CONF_FAMILY_STRING
195#define CONF_FAMILY_STRING "unknown"
196#endif
197
198#ifndef PLATFORM_STRING
199#define PLATFORM_STRING "unknown"
200#endif
201
202#define STRINGIFY2(x) #x
203#define STRINGIFY(x) STRINGIFY2(x)
204
205#if defined(PLATFORM_SUFFIX)
206#define CONF_PLATFORM_STRING PLATFORM_STRING STRINGIFY(PLATFORM_SUFFIX)
207#else
208#define CONF_PLATFORM_STRING PLATFORM_STRING
209#endif
210
211#ifndef CONF_ARCH_STRING
212#define CONF_ARCH_STRING "unknown"
213#endif
214
215#if defined(CONF_ARCH_ENDIAN_LITTLE)
216#define CONF_ARCH_ENDIAN_STRING "little endian"
217#elif defined(CONF_ARCH_ENDIAN_BIG)
218#define CONF_ARCH_ENDIAN_STRING "big endian"
219#else
220#error "Unsupported endianness"
221#endif
222
223#endif