4#if !defined(DEBUG) && !defined(_DEBUG)
15#define UNRAVEL_ARCH_32BIT 0
16#define UNRAVEL_ARCH_64BIT 0
19#define UNRAVEL_COMPILER_CLANG 0
20#define UNRAVEL_COMPILER_CLANG_ANALYZER 0
21#define UNRAVEL_COMPILER_GCC 0
22#define UNRAVEL_COMPILER_MSVC 0
25#define UNRAVEL_CPU_ENDIAN_BIG 0
26#define UNRAVEL_CPU_ENDIAN_LITTLE 0
29#define UNRAVEL_CPU_ARM 0
30#define UNRAVEL_CPU_JIT 0
31#define UNRAVEL_CPU_MIPS 0
32#define UNRAVEL_CPU_PPC 0
33#define UNRAVEL_CPU_RISCV 0
34#define UNRAVEL_CPU_X86 0
37#define UNRAVEL_CRT_BIONIC 0
38#define UNRAVEL_CRT_GLIBC 0
39#define UNRAVEL_CRT_LIBCXX 0
40#define UNRAVEL_CRT_MINGW 0
41#define UNRAVEL_CRT_MSVC 0
42#define UNRAVEL_CRT_NEWLIB 0
44#ifndef UNRAVEL_CRT_NONE
45# define UNRAVEL_CRT_NONE 0
49#define UNRAVEL_LANGUAGE_CPP17 201703L
50#define UNRAVEL_LANGUAGE_CPP20 202002L
51#define UNRAVEL_LANGUAGE_CPP23 202207L
54#define UNRAVEL_PLATFORM_ANDROID 0
55#define UNRAVEL_PLATFORM_BSD 0
56#define UNRAVEL_PLATFORM_EMSCRIPTEN 0
57#define UNRAVEL_PLATFORM_HAIKU 0
58#define UNRAVEL_PLATFORM_HURD 0
59#define UNRAVEL_PLATFORM_IOS 0
60#define UNRAVEL_PLATFORM_LINUX 0
61#define UNRAVEL_PLATFORM_NX 0
62#define UNRAVEL_PLATFORM_OSX 0
63#define UNRAVEL_PLATFORM_PS4 0
64#define UNRAVEL_PLATFORM_PS5 0
65#define UNRAVEL_PLATFORM_RPI 0
66#define UNRAVEL_PLATFORM_VISIONOS 0
67#define UNRAVEL_PLATFORM_WINDOWS 0
68#define UNRAVEL_PLATFORM_WINRT 0
69#define UNRAVEL_PLATFORM_XBOXONE 0
74# undef UNRAVEL_COMPILER_CLANG
75# define UNRAVEL_COMPILER_CLANG (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
76# if defined(__clang_analyzer__)
77# undef UNRAVEL_COMPILER_CLANG_ANALYZER
78# define UNRAVEL_COMPILER_CLANG_ANALYZER 1
80#elif defined(_MSC_VER)
81# undef UNRAVEL_COMPILER_MSVC
82# define UNRAVEL_COMPILER_MSVC _MSC_VER
83#elif defined(__GNUC__)
84# undef UNRAVEL_COMPILER_GCC
85# define UNRAVEL_COMPILER_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
87# error "UNRAVEL_COMPILER_* is not defined!"
92 || defined(__aarch64__) \
94# undef UNRAVEL_CPU_ARM
95# define UNRAVEL_CPU_ARM 1
96# define UNRAVEL_CACHE_LINE_SIZE 64
97#elif defined(__MIPSEL__) \
98 || defined(__mips_isa_rev) \
100# undef UNRAVEL_CPU_MIPS
101# define UNRAVEL_CPU_MIPS 1
102# define UNRAVEL_CACHE_LINE_SIZE 64
103#elif defined(_M_PPC) \
104 || defined(__powerpc__) \
105 || defined(__powerpc64__)
106# undef UNRAVEL_CPU_PPC
107# define UNRAVEL_CPU_PPC 1
108# define UNRAVEL_CACHE_LINE_SIZE 128
109#elif defined(__riscv) \
110 || defined(__riscv__) \
112# undef UNRAVEL_CPU_RISCV
113# define UNRAVEL_CPU_RISCV 1
114# define UNRAVEL_CACHE_LINE_SIZE 64
115#elif defined(_M_IX86) \
117 || defined(__i386__) \
118 || defined(__x86_64__)
119# undef UNRAVEL_CPU_X86
120# define UNRAVEL_CPU_X86 1
121# define UNRAVEL_CACHE_LINE_SIZE 64
123# undef UNRAVEL_CPU_JIT
124# define UNRAVEL_CPU_JIT 1
125# define UNRAVEL_CACHE_LINE_SIZE 64
128#if defined(__x86_64__) \
130 || defined(__aarch64__) \
131 || defined(__64BIT__) \
132 || defined(__mips64) \
133 || defined(__powerpc64__) \
134 || defined(__ppc64__) \
136# undef UNRAVEL_ARCH_64BIT
137# define UNRAVEL_ARCH_64BIT 64
139# undef UNRAVEL_ARCH_32BIT
140# define UNRAVEL_ARCH_32BIT 32
145# if defined(__BIG_ENDIAN__)
146# undef UNRAVEL_CPU_ENDIAN_BIG
147# define UNRAVEL_CPU_ENDIAN_BIG 1
149# undef UNRAVEL_CPU_ENDIAN_LITTLE
150# define UNRAVEL_CPU_ENDIAN_LITTLE 1
153# undef UNRAVEL_CPU_ENDIAN_LITTLE
154# define UNRAVEL_CPU_ENDIAN_LITTLE 1
158#if defined(_DURANGO) || defined(_XBOX_ONE)
159# undef UNRAVEL_PLATFORM_XBOXONE
160# define UNRAVEL_PLATFORM_XBOXONE 1
161#elif defined(_WIN32) || defined(_WIN64)
167# if defined(_MSC_VER) && (_MSC_VER >= 1700) && !defined(_USING_V110_SDK71_)
168# include <winapifamily.h>
170# if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
171# undef UNRAVEL_PLATFORM_WINDOWS
172# if !defined(WINVER) && !defined(_WIN32_WINNT)
173# if UNRAVEL_ARCH_64BIT
175# define WINVER 0x0601
176# define _WIN32_WINNT 0x0601
179# define WINVER 0x0502
180# define _WIN32_WINNT 0x0502
183# define UNRAVEL_PLATFORM_WINDOWS _WIN32_WINNT
185# undef UNRAVEL_PLATFORM_WINRT
186# define UNRAVEL_PLATFORM_WINRT 1
188#elif defined(__ANDROID__)
190# include <sys/cdefs.h>
191# undef UNRAVEL_PLATFORM_ANDROID
192# define UNRAVEL_PLATFORM_ANDROID __ANDROID_API__
193#elif defined(__VCCOREVER__)
195# undef UNRAVEL_PLATFORM_RPI
196# define UNRAVEL_PLATFORM_RPI 1
197#elif defined(__linux__)
198# undef UNRAVEL_PLATFORM_LINUX
199# define UNRAVEL_PLATFORM_LINUX 1
200#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \
201 || defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
202# undef UNRAVEL_PLATFORM_IOS
203# define UNRAVEL_PLATFORM_IOS 1
204#elif defined(__has_builtin) && __has_builtin(__is_target_os) && __is_target_os(xros)
205# undef UNRAVEL_PLATFORM_VISIONOS
206# define UNRAVEL_PLATFORM_VISIONOS 1
207#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
208# undef UNRAVEL_PLATFORM_OSX
209# define UNRAVEL_PLATFORM_OSX __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
210#elif defined(__EMSCRIPTEN__)
211# include <emscripten/version.h>
212# undef UNRAVEL_PLATFORM_EMSCRIPTEN
213# define UNRAVEL_PLATFORM_EMSCRIPTEN (__EMSCRIPTEN_major__ * 10000 + __EMSCRIPTEN_minor__ * 100 + __EMSCRIPTEN_tiny__)
214#elif defined(__ORBIS__)
215# undef UNRAVEL_PLATFORM_PS4
216# define UNRAVEL_PLATFORM_PS4 1
217#elif defined(__PROSPERO__)
218# undef UNRAVEL_PLATFORM_PS5
219# define UNRAVEL_PLATFORM_PS5 1
220#elif defined(__FreeBSD__) \
221 || defined(__FreeBSD_kernel__) \
222 || defined(__NetBSD__) \
223 || defined(__OpenBSD__) \
224 || defined(__DragonFly__)
225# undef UNRAVEL_PLATFORM_BSD
226# define UNRAVEL_PLATFORM_BSD 1
227#elif defined(__GNU__)
228# undef UNRAVEL_PLATFORM_HURD
229# define UNRAVEL_PLATFORM_HURD 1
231# undef UNRAVEL_PLATFORM_NX
232# define UNRAVEL_PLATFORM_NX 1
233#elif defined(__HAIKU__)
234# undef UNRAVEL_PLATFORM_HAIKU
235# define UNRAVEL_PLATFORM_HAIKU 1
240# if defined(__BIONIC__)
241# undef UNRAVEL_CRT_BIONIC
242# define UNRAVEL_CRT_BIONIC 1
243# elif defined(__GLIBC__)
244# undef UNRAVEL_CRT_GLIBC
245# define UNRAVEL_CRT_GLIBC (__GLIBC__ * 10000 + __GLIBC_MINOR__ * 100)
246# elif defined(__apple_build_version__) || defined(__ORBIS__) || defined(__EMSCRIPTEN__) || defined(__llvm__) || defined(__HAIKU__)
247# undef UNRAVEL_CRT_LIBCXX
248# define UNRAVEL_CRT_LIBCXX 1
249# elif defined(__MINGW32__) || defined(__MINGW64__)
250# undef UNRAVEL_CRT_MINGW
251# define UNRAVEL_CRT_MINGW 1
252# elif defined(_MSC_VER)
253# undef UNRAVEL_CRT_MSVC
254# define UNRAVEL_CRT_MSVC 1
259#define UNRAVEL_PLATFORM_POSIX (0 \
260 || UNRAVEL_PLATFORM_ANDROID \
261 || UNRAVEL_PLATFORM_BSD \
262 || UNRAVEL_PLATFORM_EMSCRIPTEN \
263 || UNRAVEL_PLATFORM_HAIKU \
264 || UNRAVEL_PLATFORM_HURD \
265 || UNRAVEL_PLATFORM_IOS \
266 || UNRAVEL_PLATFORM_LINUX \
267 || UNRAVEL_PLATFORM_NX \
268 || UNRAVEL_PLATFORM_OSX \
269 || UNRAVEL_PLATFORM_PS4 \
270 || UNRAVEL_PLATFORM_PS5 \
271 || UNRAVEL_PLATFORM_RPI \
272 || UNRAVEL_PLATFORM_VISIONOS \
276#define UNRAVEL_PLATFORM_NONE !(0 \
277 || UNRAVEL_PLATFORM_ANDROID \
278 || UNRAVEL_PLATFORM_BSD \
279 || UNRAVEL_PLATFORM_EMSCRIPTEN \
280 || UNRAVEL_PLATFORM_HAIKU \
281 || UNRAVEL_PLATFORM_HURD \
282 || UNRAVEL_PLATFORM_IOS \
283 || UNRAVEL_PLATFORM_LINUX \
284 || UNRAVEL_PLATFORM_NX \
285 || UNRAVEL_PLATFORM_OSX \
286 || UNRAVEL_PLATFORM_PS4 \
287 || UNRAVEL_PLATFORM_PS5 \
288 || UNRAVEL_PLATFORM_RPI \
289 || UNRAVEL_PLATFORM_VISIONOS \
290 || UNRAVEL_PLATFORM_WINDOWS \
291 || UNRAVEL_PLATFORM_WINRT \
292 || UNRAVEL_PLATFORM_XBOXONE \
296#define UNRAVEL_PLATFORM_OS_CONSOLE (0 \
297 || UNRAVEL_PLATFORM_NX \
298 || UNRAVEL_PLATFORM_PS4 \
299 || UNRAVEL_PLATFORM_PS5 \
300 || UNRAVEL_PLATFORM_WINRT \
301 || UNRAVEL_PLATFORM_XBOXONE \
305#define UNRAVEL_PLATFORM_OS_DESKTOP (0 \
306 || UNRAVEL_PLATFORM_BSD \
307 || UNRAVEL_PLATFORM_HAIKU \
308 || UNRAVEL_PLATFORM_HURD \
309 || UNRAVEL_PLATFORM_LINUX \
310 || UNRAVEL_PLATFORM_OSX \
311 || UNRAVEL_PLATFORM_WINDOWS \
315#define UNRAVEL_PLATFORM_OS_EMBEDDED (0 \
316 || UNRAVEL_PLATFORM_RPI \
320#define UNRAVEL_PLATFORM_OS_MOBILE (0 \
321 || UNRAVEL_PLATFORM_ANDROID \
322 || UNRAVEL_PLATFORM_IOS \
326#define UNRAVEL_PLATFORM_OS_WEB (0 \
327 || UNRAVEL_PLATFORM_EMSCRIPTEN \
331#if UNRAVEL_COMPILER_GCC
332# define UNRAVEL_COMPILER_NAME "GCC " \
333 UNRAVEL_STRINGIZE(__GNUC__) "." \
334 UNRAVEL_STRINGIZE(__GNUC_MINOR__) "." \
335 UNRAVEL_STRINGIZE(__GNUC_PATCHLEVEL__)
336#elif UNRAVEL_COMPILER_CLANG
337# define UNRAVEL_COMPILER_NAME "Clang " \
338 UNRAVEL_STRINGIZE(__clang_major__) "." \
339 UNRAVEL_STRINGIZE(__clang_minor__) "." \
340 UNRAVEL_STRINGIZE(__clang_patchlevel__)
341#elif UNRAVEL_COMPILER_MSVC
342# if UNRAVEL_COMPILER_MSVC >= 1930
343# define UNRAVEL_COMPILER_NAME "MSVC 17.0"
344# elif UNRAVEL_COMPILER_MSVC >= 1920
345# define UNRAVEL_COMPILER_NAME "MSVC 16.0"
346# elif UNRAVEL_COMPILER_MSVC >= 1910
347# define UNRAVEL_COMPILER_NAME "MSVC 15.0"
348# elif UNRAVEL_COMPILER_MSVC >= 1900
349# define UNRAVEL_COMPILER_NAME "MSVC 14.0"
350# elif UNRAVEL_COMPILER_MSVC >= 1800
351# define UNRAVEL_COMPILER_NAME "MSVC 12.0"
352# elif UNRAVEL_COMPILER_MSVC >= 1700
353# define UNRAVEL_COMPILER_NAME "MSVC 11.0"
354# elif UNRAVEL_COMPILER_MSVC >= 1600
355# define UNRAVEL_COMPILER_NAME "MSVC 10.0"
356# elif UNRAVEL_COMPILER_MSVC >= 1500
357# define UNRAVEL_COMPILER_NAME "MSVC 9.0"
359# define UNRAVEL_COMPILER_NAME "MSVC"
363#if UNRAVEL_PLATFORM_ANDROID
364# define UNRAVEL_PLATFORM_NAME "Android " \
365 UNRAVEL_STRINGIZE(UNRAVEL_PLATFORM_ANDROID)
366#elif UNRAVEL_PLATFORM_BSD
367# define UNRAVEL_PLATFORM_NAME "BSD"
368#elif UNRAVEL_PLATFORM_EMSCRIPTEN
369# define UNRAVEL_PLATFORM_NAME "Emscripten " \
370 UNRAVEL_STRINGIZE(__EMSCRIPTEN_major__) "." \
371 UNRAVEL_STRINGIZE(__EMSCRIPTEN_minor__) "." \
372 UNRAVEL_STRINGIZE(__EMSCRIPTEN_tiny__)
373#elif UNRAVEL_PLATFORM_HAIKU
374# define UNRAVEL_PLATFORM_NAME "Haiku"
375#elif UNRAVEL_PLATFORM_HURD
376# define UNRAVEL_PLATFORM_NAME "Hurd"
377#elif UNRAVEL_PLATFORM_IOS
378# define UNRAVEL_PLATFORM_NAME "iOS"
379#elif UNRAVEL_PLATFORM_LINUX
380# define UNRAVEL_PLATFORM_NAME "Linux"
381#elif UNRAVEL_PLATFORM_NONE
382# define UNRAVEL_PLATFORM_NAME "None"
383#elif UNRAVEL_PLATFORM_NX
384# define UNRAVEL_PLATFORM_NAME "NX"
385#elif UNRAVEL_PLATFORM_OSX
386# define UNRAVEL_PLATFORM_NAME "macOS"
387#elif UNRAVEL_PLATFORM_PS4
388# define UNRAVEL_PLATFORM_NAME "PlayStation 4"
389#elif UNRAVEL_PLATFORM_PS5
390# define UNRAVEL_PLATFORM_NAME "PlayStation 5"
391#elif UNRAVEL_PLATFORM_RPI
392# define UNRAVEL_PLATFORM_NAME "RaspberryPi"
393#elif UNRAVEL_PLATFORM_VISIONOS
394# define UNRAVEL_PLATFORM_NAME "visionOS"
395#elif UNRAVEL_PLATFORM_WINDOWS
396# define UNRAVEL_PLATFORM_NAME "Windows"
397#elif UNRAVEL_PLATFORM_WINRT
398# define UNRAVEL_PLATFORM_NAME "WinRT"
399#elif UNRAVEL_PLATFORM_XBOXONE
400# define UNRAVEL_PLATFORM_NAME "Xbox One"
402# error "Unknown UNRAVEL_PLATFORM!"
406# define UNRAVEL_CPU_NAME "ARM"
408# define UNRAVEL_CPU_NAME "JIT-VM"
409#elif UNRAVEL_CPU_MIPS
410# define UNRAVEL_CPU_NAME "MIPS"
412# define UNRAVEL_CPU_NAME "PowerPC"
413#elif UNRAVEL_CPU_RISCV
414# define UNRAVEL_CPU_NAME "RISC-V"
416# define UNRAVEL_CPU_NAME "x86"
419#if UNRAVEL_CRT_BIONIC
420# define UNRAVEL_CRT_NAME "Bionic libc"
421#elif UNRAVEL_CRT_GLIBC
422# define UNRAVEL_CRT_NAME "GNU C Library"
423#elif UNRAVEL_CRT_MSVC
424# define UNRAVEL_CRT_NAME "MSVC C Runtime"
425#elif UNRAVEL_CRT_MINGW
426# define UNRAVEL_CRT_NAME "MinGW C Runtime"
427#elif UNRAVEL_CRT_LIBCXX
428# define UNRAVEL_CRT_NAME "Clang C Library"
429#elif UNRAVEL_CRT_NEWLIB
430# define UNRAVEL_CRT_NAME "Newlib"
431#elif UNRAVEL_CRT_NONE
432# define UNRAVEL_CRT_NAME "None"
434# define UNRAVEL_CRT_NAME "Unknown CRT"
437#if UNRAVEL_ARCH_32BIT
438# define UNRAVEL_ARCH_NAME "32-bit"
439#elif UNRAVEL_ARCH_64BIT
440# define UNRAVEL_ARCH_NAME "64-bit"
443#if defined(__cplusplus)
444# if UNRAVEL_COMPILER_MSVC && defined(_MSVC_LANG) && _MSVC_LANG != __cplusplus
445# error "When using MSVC you must set /Zc:__cplusplus compiler option."
448# if __cplusplus < UNRAVEL_LANGUAGE_CPP17
449# define UNRAVEL_CPP_NAME "C++Unsupported"
450# elif __cplusplus < UNRAVEL_LANGUAGE_CPP20
451# define UNRAVEL_CPP_NAME "C++17"
452# elif __cplusplus < UNRAVEL_LANGUAGE_CPP23
453# define UNRAVEL_CPP_NAME "C++20"
456# define UNRAVEL_CPP_NAME "C++WayTooModern"
459# define UNRAVEL_CPP_NAME "C++Unknown"
462#if defined(__cplusplus)
465 "\t** IMPORTANT! **\n\n"
466 "\tC++17 standard support is required to build.\n"
471 "\t** IMPORTANT! **\n\n"
472 "\tMinimum supported Clang version is 11.0 (October 12, 2020).\n"
477 "\t** IMPORTANT! **\n\n"
478 "\tMinimum supported GCC version is 8.4 (March 4, 2020).\n"
482 "\t** IMPORTANT! **\n\n"
483 "\tThe code was not tested for big endian, and big endian CPU is considered unsupported.\n"
487 "\t** IMPORTANT! **\n\n"
488 "\tYou're compiling for unsupported platform!\n"
489 "\tIf you wish to support this platform, make your own fork, and modify code for _yourself_.\n"
491 "\tDo not submit PR to main repo, it won't be considered, and it would code rot anyway. I have no ability\n"
492 "\tto test on these platforms, and over years there wasn't any serious contributor who wanted to take\n"
493 "\tburden of maintaining code for these platforms.\n"
#define UNRAVEL_COMPILER_CLANG
#define UNRAVEL_PLATFORM_HAIKU
#define UNRAVEL_PLATFORM_BSD
#define UNRAVEL_LANGUAGE_CPP17
#define UNRAVEL_CPU_ENDIAN_BIG
#define UNRAVEL_PLATFORM_HURD
#define UNRAVEL_COMPILER_GCC