4#if !defined(DEBUG) && !defined(_DEBUG)
11#define UNRAVEL_DEBUG 0
12#define UNRAVEL_RELEASE 1
14#define UNRAVEL_DEBUG 1
15#define UNRAVEL_RELEASE 0
20#define UNRAVEL_ARCH_32BIT 0
21#define UNRAVEL_ARCH_64BIT 0
24#define UNRAVEL_COMPILER_CLANG 0
25#define UNRAVEL_COMPILER_CLANG_ANALYZER 0
26#define UNRAVEL_COMPILER_GCC 0
27#define UNRAVEL_COMPILER_MSVC 0
30#define UNRAVEL_CPU_ENDIAN_BIG 0
31#define UNRAVEL_CPU_ENDIAN_LITTLE 0
34#define UNRAVEL_CPU_ARM 0
35#define UNRAVEL_CPU_JIT 0
36#define UNRAVEL_CPU_MIPS 0
37#define UNRAVEL_CPU_PPC 0
38#define UNRAVEL_CPU_RISCV 0
39#define UNRAVEL_CPU_X86 0
42#define UNRAVEL_CRT_BIONIC 0
43#define UNRAVEL_CRT_GLIBC 0
44#define UNRAVEL_CRT_LIBCXX 0
45#define UNRAVEL_CRT_MINGW 0
46#define UNRAVEL_CRT_MSVC 0
47#define UNRAVEL_CRT_NEWLIB 0
49#ifndef UNRAVEL_CRT_NONE
50# define UNRAVEL_CRT_NONE 0
54#define UNRAVEL_LANGUAGE_CPP17 201703L
55#define UNRAVEL_LANGUAGE_CPP20 202002L
56#define UNRAVEL_LANGUAGE_CPP23 202207L
59#define UNRAVEL_PLATFORM_ANDROID 0
60#define UNRAVEL_PLATFORM_BSD 0
61#define UNRAVEL_PLATFORM_EMSCRIPTEN 0
62#define UNRAVEL_PLATFORM_HAIKU 0
63#define UNRAVEL_PLATFORM_HURD 0
64#define UNRAVEL_PLATFORM_IOS 0
65#define UNRAVEL_PLATFORM_LINUX 0
66#define UNRAVEL_PLATFORM_NX 0
67#define UNRAVEL_PLATFORM_OSX 0
68#define UNRAVEL_PLATFORM_PS4 0
69#define UNRAVEL_PLATFORM_PS5 0
70#define UNRAVEL_PLATFORM_RPI 0
71#define UNRAVEL_PLATFORM_VISIONOS 0
72#define UNRAVEL_PLATFORM_WINDOWS 0
73#define UNRAVEL_PLATFORM_WINRT 0
74#define UNRAVEL_PLATFORM_XBOXONE 0
79# undef UNRAVEL_COMPILER_CLANG
80# define UNRAVEL_COMPILER_CLANG (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
81# if defined(__clang_analyzer__)
82# undef UNRAVEL_COMPILER_CLANG_ANALYZER
83# define UNRAVEL_COMPILER_CLANG_ANALYZER 1
85#elif defined(_MSC_VER)
86# undef UNRAVEL_COMPILER_MSVC
87# define UNRAVEL_COMPILER_MSVC _MSC_VER
88#elif defined(__GNUC__)
89# undef UNRAVEL_COMPILER_GCC
90# define UNRAVEL_COMPILER_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
92# error "UNRAVEL_COMPILER_* is not defined!"
97 || defined(__aarch64__) \
99# undef UNRAVEL_CPU_ARM
100# define UNRAVEL_CPU_ARM 1
101# define UNRAVEL_CACHE_LINE_SIZE 64
102#elif defined(__MIPSEL__) \
103 || defined(__mips_isa_rev) \
105# undef UNRAVEL_CPU_MIPS
106# define UNRAVEL_CPU_MIPS 1
107# define UNRAVEL_CACHE_LINE_SIZE 64
108#elif defined(_M_PPC) \
109 || defined(__powerpc__) \
110 || defined(__powerpc64__)
111# undef UNRAVEL_CPU_PPC
112# define UNRAVEL_CPU_PPC 1
113# define UNRAVEL_CACHE_LINE_SIZE 128
114#elif defined(__riscv) \
115 || defined(__riscv__) \
117# undef UNRAVEL_CPU_RISCV
118# define UNRAVEL_CPU_RISCV 1
119# define UNRAVEL_CACHE_LINE_SIZE 64
120#elif defined(_M_IX86) \
122 || defined(__i386__) \
123 || defined(__x86_64__)
124# undef UNRAVEL_CPU_X86
125# define UNRAVEL_CPU_X86 1
126# define UNRAVEL_CACHE_LINE_SIZE 64
128# undef UNRAVEL_CPU_JIT
129# define UNRAVEL_CPU_JIT 1
130# define UNRAVEL_CACHE_LINE_SIZE 64
133#if defined(__x86_64__) \
135 || defined(__aarch64__) \
136 || defined(__64BIT__) \
137 || defined(__mips64) \
138 || defined(__powerpc64__) \
139 || defined(__ppc64__) \
141# undef UNRAVEL_ARCH_64BIT
142# define UNRAVEL_ARCH_64BIT 64
144# undef UNRAVEL_ARCH_32BIT
145# define UNRAVEL_ARCH_32BIT 32
150# if defined(__BIG_ENDIAN__)
151# undef UNRAVEL_CPU_ENDIAN_BIG
152# define UNRAVEL_CPU_ENDIAN_BIG 1
154# undef UNRAVEL_CPU_ENDIAN_LITTLE
155# define UNRAVEL_CPU_ENDIAN_LITTLE 1
158# undef UNRAVEL_CPU_ENDIAN_LITTLE
159# define UNRAVEL_CPU_ENDIAN_LITTLE 1
163#if defined(_DURANGO) || defined(_XBOX_ONE)
164# undef UNRAVEL_PLATFORM_XBOXONE
165# define UNRAVEL_PLATFORM_XBOXONE 1
166#elif defined(_WIN32) || defined(_WIN64)
172# if defined(_MSC_VER) && (_MSC_VER >= 1700) && !defined(_USING_V110_SDK71_)
173# include <winapifamily.h>
175# if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
176# undef UNRAVEL_PLATFORM_WINDOWS
177# if !defined(WINVER) && !defined(_WIN32_WINNT)
178# if UNRAVEL_ARCH_64BIT
180# define WINVER 0x0601
181# define _WIN32_WINNT 0x0601
184# define WINVER 0x0502
185# define _WIN32_WINNT 0x0502
188# define UNRAVEL_PLATFORM_WINDOWS _WIN32_WINNT
190# undef UNRAVEL_PLATFORM_WINRT
191# define UNRAVEL_PLATFORM_WINRT 1
193#elif defined(__ANDROID__)
195# include <sys/cdefs.h>
196# undef UNRAVEL_PLATFORM_ANDROID
197# define UNRAVEL_PLATFORM_ANDROID __ANDROID_API__
198#elif defined(__VCCOREVER__)
200# undef UNRAVEL_PLATFORM_RPI
201# define UNRAVEL_PLATFORM_RPI 1
202#elif defined(__linux__)
203# undef UNRAVEL_PLATFORM_LINUX
204# define UNRAVEL_PLATFORM_LINUX 1
205#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \
206 || defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
207# undef UNRAVEL_PLATFORM_IOS
208# define UNRAVEL_PLATFORM_IOS 1
209#elif defined(__has_builtin) && __has_builtin(__is_target_os) && __is_target_os(xros)
210# undef UNRAVEL_PLATFORM_VISIONOS
211# define UNRAVEL_PLATFORM_VISIONOS 1
212#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
213# undef UNRAVEL_PLATFORM_OSX
214# define UNRAVEL_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
215#elif defined(__EMSCRIPTEN__)
216# include <emscripten/version.h>
217# undef UNRAVEL_PLATFORM_EMSCRIPTEN
218# define UNRAVEL_PLATFORM_EMSCRIPTEN (__EMSCRIPTEN_major__ * 10000 + __EMSCRIPTEN_minor__ * 100 + __EMSCRIPTEN_tiny__)
219#elif defined(__ORBIS__)
220# undef UNRAVEL_PLATFORM_PS4
221# define UNRAVEL_PLATFORM_PS4 1
222#elif defined(__PROSPERO__)
223# undef UNRAVEL_PLATFORM_PS5
224# define UNRAVEL_PLATFORM_PS5 1
225#elif defined(__FreeBSD__) \
226 || defined(__FreeBSD_kernel__) \
227 || defined(__NetBSD__) \
228 || defined(__OpenBSD__) \
229 || defined(__DragonFly__)
230# undef UNRAVEL_PLATFORM_BSD
231# define UNRAVEL_PLATFORM_BSD 1
232#elif defined(__GNU__)
233# undef UNRAVEL_PLATFORM_HURD
234# define UNRAVEL_PLATFORM_HURD 1
236# undef UNRAVEL_PLATFORM_NX
237# define UNRAVEL_PLATFORM_NX 1
238#elif defined(__HAIKU__)
239# undef UNRAVEL_PLATFORM_HAIKU
240# define UNRAVEL_PLATFORM_HAIKU 1
245# if defined(__BIONIC__)
246# undef UNRAVEL_CRT_BIONIC
247# define UNRAVEL_CRT_BIONIC 1
248# elif defined(__GLIBC__)
249# undef UNRAVEL_CRT_GLIBC
250# define UNRAVEL_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100)
251# elif defined(__apple_build_version__) || defined(__ORBIS__) || defined(__EMSCRIPTEN__) || defined(__llvm__) || defined(__HAIKU__)
252# undef UNRAVEL_CRT_LIBCXX
253# define UNRAVEL_CRT_LIBCXX 1
254# elif defined(__MINGW32__) || defined(__MINGW64__)
255# undef UNRAVEL_CRT_MINGW
256# define UNRAVEL_CRT_MINGW 1
257# elif defined(_MSC_VER)
258# undef UNRAVEL_CRT_MSVC
259# define UNRAVEL_CRT_MSVC 1
264#define UNRAVEL_PLATFORM_POSIX (0 \
265 || UNRAVEL_PLATFORM_ANDROID \
266 || UNRAVEL_PLATFORM_BSD \
267 || UNRAVEL_PLATFORM_EMSCRIPTEN \
268 || UNRAVEL_PLATFORM_HAIKU \
269 || UNRAVEL_PLATFORM_HURD \
270 || UNRAVEL_PLATFORM_IOS \
271 || UNRAVEL_PLATFORM_LINUX \
272 || UNRAVEL_PLATFORM_NX \
273 || UNRAVEL_PLATFORM_OSX \
274 || UNRAVEL_PLATFORM_PS4 \
275 || UNRAVEL_PLATFORM_PS5 \
276 || UNRAVEL_PLATFORM_RPI \
277 || UNRAVEL_PLATFORM_VISIONOS \
281#define UNRAVEL_PLATFORM_NONE !(0 \
282 || UNRAVEL_PLATFORM_ANDROID \
283 || UNRAVEL_PLATFORM_BSD \
284 || UNRAVEL_PLATFORM_EMSCRIPTEN \
285 || UNRAVEL_PLATFORM_HAIKU \
286 || UNRAVEL_PLATFORM_HURD \
287 || UNRAVEL_PLATFORM_IOS \
288 || UNRAVEL_PLATFORM_LINUX \
289 || UNRAVEL_PLATFORM_NX \
290 || UNRAVEL_PLATFORM_OSX \
291 || UNRAVEL_PLATFORM_PS4 \
292 || UNRAVEL_PLATFORM_PS5 \
293 || UNRAVEL_PLATFORM_RPI \
294 || UNRAVEL_PLATFORM_VISIONOS \
295 || UNRAVEL_PLATFORM_WINDOWS \
296 || UNRAVEL_PLATFORM_WINRT \
297 || UNRAVEL_PLATFORM_XBOXONE \
301#define UNRAVEL_PLATFORM_OS_CONSOLE (0 \
302 || UNRAVEL_PLATFORM_NX \
303 || UNRAVEL_PLATFORM_PS4 \
304 || UNRAVEL_PLATFORM_PS5 \
305 || UNRAVEL_PLATFORM_WINRT \
306 || UNRAVEL_PLATFORM_XBOXONE \
310#define UNRAVEL_PLATFORM_OS_DESKTOP (0 \
311 || UNRAVEL_PLATFORM_BSD \
312 || UNRAVEL_PLATFORM_HAIKU \
313 || UNRAVEL_PLATFORM_HURD \
314 || UNRAVEL_PLATFORM_LINUX \
315 || UNRAVEL_PLATFORM_OSX \
316 || UNRAVEL_PLATFORM_WINDOWS \
320#define UNRAVEL_PLATFORM_OS_EMBEDDED (0 \
321 || UNRAVEL_PLATFORM_RPI \
325#define UNRAVEL_PLATFORM_OS_MOBILE (0 \
326 || UNRAVEL_PLATFORM_ANDROID \
327 || UNRAVEL_PLATFORM_IOS \
331#define UNRAVEL_PLATFORM_OS_WEB (0 \
332 || UNRAVEL_PLATFORM_EMSCRIPTEN \
336#if UNRAVEL_COMPILER_GCC
337# define UNRAVEL_COMPILER_NAME "GCC " \
338 UNRAVEL_STRINGIZE(__GNUC__) "." \
339 UNRAVEL_STRINGIZE(__GNUC_MINOR__) "." \
340 UNRAVEL_STRINGIZE(__GNUC_PATCHLEVEL__)
341#elif UNRAVEL_COMPILER_CLANG
342# define UNRAVEL_COMPILER_NAME "Clang " \
343 UNRAVEL_STRINGIZE(__clang_major__) "." \
344 UNRAVEL_STRINGIZE(__clang_minor__) "." \
345 UNRAVEL_STRINGIZE(__clang_patchlevel__)
346#elif UNRAVEL_COMPILER_MSVC
347# if UNRAVEL_COMPILER_MSVC >= 1930
348# define UNRAVEL_COMPILER_NAME "MSVC 17.0"
349# elif UNRAVEL_COMPILER_MSVC >= 1920
350# define UNRAVEL_COMPILER_NAME "MSVC 16.0"
351# elif UNRAVEL_COMPILER_MSVC >= 1910
352# define UNRAVEL_COMPILER_NAME "MSVC 15.0"
353# elif UNRAVEL_COMPILER_MSVC >= 1900
354# define UNRAVEL_COMPILER_NAME "MSVC 14.0"
355# elif UNRAVEL_COMPILER_MSVC >= 1800
356# define UNRAVEL_COMPILER_NAME "MSVC 12.0"
357# elif UNRAVEL_COMPILER_MSVC >= 1700
358# define UNRAVEL_COMPILER_NAME "MSVC 11.0"
359# elif UNRAVEL_COMPILER_MSVC >= 1600
360# define UNRAVEL_COMPILER_NAME "MSVC 10.0"
361# elif UNRAVEL_COMPILER_MSVC >= 1500
362# define UNRAVEL_COMPILER_NAME "MSVC 9.0"
364# define UNRAVEL_COMPILER_NAME "MSVC"
368#if UNRAVEL_PLATFORM_ANDROID
369# define UNRAVEL_PLATFORM_NAME "Android " \
370 UNRAVEL_STRINGIZE(UNRAVEL_PLATFORM_ANDROID)
371#elif UNRAVEL_PLATFORM_BSD
372# define UNRAVEL_PLATFORM_NAME "BSD"
373#elif UNRAVEL_PLATFORM_EMSCRIPTEN
374# define UNRAVEL_PLATFORM_NAME "Emscripten " \
375 UNRAVEL_STRINGIZE(__EMSCRIPTEN_major__) "." \
376 UNRAVEL_STRINGIZE(__EMSCRIPTEN_minor__) "." \
377 UNRAVEL_STRINGIZE(__EMSCRIPTEN_tiny__)
378#elif UNRAVEL_PLATFORM_HAIKU
379# define UNRAVEL_PLATFORM_NAME "Haiku"
380#elif UNRAVEL_PLATFORM_HURD
381# define UNRAVEL_PLATFORM_NAME "Hurd"
382#elif UNRAVEL_PLATFORM_IOS
383# define UNRAVEL_PLATFORM_NAME "iOS"
384#elif UNRAVEL_PLATFORM_LINUX
385# define UNRAVEL_PLATFORM_NAME "Linux"
386#elif UNRAVEL_PLATFORM_NONE
387# define UNRAVEL_PLATFORM_NAME "None"
388#elif UNRAVEL_PLATFORM_NX
389# define UNRAVEL_PLATFORM_NAME "NX"
390#elif UNRAVEL_PLATFORM_OSX
391# define UNRAVEL_PLATFORM_NAME "macOS"
392#elif UNRAVEL_PLATFORM_PS4
393# define UNRAVEL_PLATFORM_NAME "PlayStation 4"
394#elif UNRAVEL_PLATFORM_PS5
395# define UNRAVEL_PLATFORM_NAME "PlayStation 5"
396#elif UNRAVEL_PLATFORM_RPI
397# define UNRAVEL_PLATFORM_NAME "RaspberryPi"
398#elif UNRAVEL_PLATFORM_VISIONOS
399# define UNRAVEL_PLATFORM_NAME "visionOS"
400#elif UNRAVEL_PLATFORM_WINDOWS
401# define UNRAVEL_PLATFORM_NAME "Windows"
402#elif UNRAVEL_PLATFORM_WINRT
403# define UNRAVEL_PLATFORM_NAME "WinRT"
404#elif UNRAVEL_PLATFORM_XBOXONE
405# define UNRAVEL_PLATFORM_NAME "Xbox One"
407# error "Unknown UNRAVEL_PLATFORM!"
411# define UNRAVEL_CPU_NAME "ARM"
413# define UNRAVEL_CPU_NAME "JIT-VM"
414#elif UNRAVEL_CPU_MIPS
415# define UNRAVEL_CPU_NAME "MIPS"
417# define UNRAVEL_CPU_NAME "PowerPC"
418#elif UNRAVEL_CPU_RISCV
419# define UNRAVEL_CPU_NAME "RISC-V"
421# define UNRAVEL_CPU_NAME "x86"
424#if UNRAVEL_CRT_BIONIC
425# define UNRAVEL_CRT_NAME "Bionic libc"
426#elif UNRAVEL_CRT_GLIBC
427# define UNRAVEL_CRT_NAME "GNU C Library"
428#elif UNRAVEL_CRT_MSVC
429# define UNRAVEL_CRT_NAME "MSVC C Runtime"
430#elif UNRAVEL_CRT_MINGW
431# define UNRAVEL_CRT_NAME "MinGW C Runtime"
432#elif UNRAVEL_CRT_LIBCXX
433# define UNRAVEL_CRT_NAME "Clang C Library"
434#elif UNRAVEL_CRT_NEWLIB
435# define UNRAVEL_CRT_NAME "Newlib"
436#elif UNRAVEL_CRT_NONE
437# define UNRAVEL_CRT_NAME "None"
439# define UNRAVEL_CRT_NAME "Unknown CRT"
442#if UNRAVEL_ARCH_32BIT
443# define UNRAVEL_ARCH_NAME "32-bit"
444#elif UNRAVEL_ARCH_64BIT
445# define UNRAVEL_ARCH_NAME "64-bit"
448#if defined(__cplusplus)
449# if UNRAVEL_COMPILER_MSVC && defined(_MSVC_LANG) && _MSVC_LANG != __cplusplus
450# error "When using MSVC you must set /Zc:__cplusplus compiler option."
453# if __cplusplus < UNRAVEL_LANGUAGE_CPP17
454# define UNRAVEL_CPP_NAME "C++Unsupported"
455# elif __cplusplus < UNRAVEL_LANGUAGE_CPP20
456# define UNRAVEL_CPP_NAME "C++17"
457# elif __cplusplus < UNRAVEL_LANGUAGE_CPP23
458# define UNRAVEL_CPP_NAME "C++20"
461# define UNRAVEL_CPP_NAME "C++WayTooModern"
464# define UNRAVEL_CPP_NAME "C++Unknown"
467#if defined(__cplusplus)
470 "\t** IMPORTANT! **\n\n"
471 "\tC++20 standard support is required to build.\n"
476 "\t** IMPORTANT! **\n\n"
477 "\tMinimum supported Clang version is 11.0 (October 12, 2020).\n"
482 "\t** IMPORTANT! **\n\n"
483 "\tMinimum supported GCC version is 8.4 (March 4, 2020).\n"
487 "\t** IMPORTANT! **\n\n"
488 "\tThe code was not tested for big endian, and big endian CPU is considered unsupported.\n"
492 "\t** IMPORTANT! **\n\n"
493 "\tYou're compiling for unsupported platform!\n"
494 "\tIf you wish to support this platform, make your own fork, and modify code for _yourself_.\n"
496 "\tDo not submit PR to main repo, it won't be considered, and it would code rot anyway. I have no ability\n"
497 "\tto test on these platforms, and over years there wasn't any serious contributor who wanted to take\n"
498 "\tburden of maintaining code for these platforms.\n"
#define UNRAVEL_COMPILER_CLANG
#define UNRAVEL_PLATFORM_HAIKU
#define UNRAVEL_PLATFORM_BSD
#define UNRAVEL_CPU_ENDIAN_BIG
#define UNRAVEL_PLATFORM_HURD
#define UNRAVEL_COMPILER_GCC
#define UNRAVEL_LANGUAGE_CPP20