Blender V5.0
BLI_build_config.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11
51
52#pragma once
53
60
61/* -------------------------------------------------------------------- */
64
65#if defined(__native_client__)
66/* __native_client__ must be first, so that other OS_ defines are not set. */
67# define OS_NACL 1
68/* OS_NACL comes in two sand-boxing technology flavors, SFI or Non-SFI. PNaCl toolchain defines
69 * __native_client_nonsfi__ macro in Non-SFI build mode, while it does not in SFI build mode. */
70# if defined(__native_client_nonsfi__)
71# define OS_NACL_NONSFI
72# else
73# define OS_NACL_SFI
74# endif
75#elif defined(_AIX)
76# define OS_AIX 1
77#elif defined(ANDROID)
78# define OS_ANDROID 1
79#elif defined(__APPLE__)
80/* Only include TargetConditions after testing ANDROID as some android builds on mac don't have
81 * this header available and it's not needed unless the target is really mac/IOS. */
82# include <TargetConditionals.h>
83# define OS_MAC 1
84# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
85# define OS_IOS 1
86# endif
87#elif defined(__HAIKU__)
88# define OS_HAIKU 1
89#elif defined(__hpux)
90# define OS_HPUX 1
91#elif defined(__linux__)
92# define OS_LINUX 1
93/* Include a system header to pull in features.h for GLIBC/UCLIBC macros. */
94# include <unistd.h>
95# if defined(__GLIBC__) && !defined(__UCLIBC__)
96/* We really are using GLIBC, not UCLIBC pretending to be GLIBC. */
97# define LIBC_GLIBC 1
98# endif
99#elif defined(__sgi)
100# define OS_IRIX 1
101#elif defined(_WIN32)
102# define OS_WINDOWS 1
103#elif defined(__Fuchsia__)
104# define OS_FUCHSIA 1
105#elif defined(__DragonFly__)
106# define OS_DRAGONFLYBSD 1
107#elif defined(__FreeBSD__)
108# define OS_FREEBSD 1
109#elif defined(__NetBSD__)
110# define OS_NETBSD 1
111#elif defined(__OpenBSD__)
112# define OS_OPENBSD 1
113#elif defined(__sun)
114# define OS_SOLARIS 1
115#elif defined(__QNXNTO__)
116# define OS_QNX 1
117#elif defined(__asmjs__) || defined(__wasm__)
118# define OS_ASMJS 1
119#elif defined(__MVS__)
120# define OS_ZOS 1
121#else
122# error Please add support for your platform in BLI_build_config.h
123#endif
124
125#if !defined(OS_AIX)
126# define OS_AIX 0
127#endif
128#if !defined(OS_ASMJS)
129# define OS_ASMJS 0
130#endif
131#if !defined(OS_NACL)
132# define OS_NACL 0
133#endif
134#if !defined(OS_NACL_NONSFI)
135# define OS_NACL_NONSFI 0
136#endif
137#if !defined(OS_NACL_SFI)
138# define OS_NACL_SFI 0
139#endif
140#if !defined(OS_ANDROID)
141# define OS_ANDROID 0
142#endif
143#if !defined(OS_MAC)
144# define OS_MAC 0
145#endif
146#if !defined(OS_IOS)
147# define OS_IOS 0
148#endif
149#if !defined(OS_HAIKU)
150# define OS_HAIKU 0
151#endif
152#if !defined(OS_HPUX)
153# define OS_HPUX 0
154#endif
155#if !defined(OS_IRIX)
156# define OS_IRIX 0
157#endif
158#if !defined(OS_LINUX)
159# define OS_LINUX 0
160#endif
161#if !defined(LIBC_GLIBC)
162# define LIBC_GLIBC 0
163#endif
164#if !defined(OS_WINDOWS)
165# define OS_WINDOWS 0
166#endif
167#if !defined(OS_FUCHSIA)
168# define OS_FUCHSIA 0
169#endif
170#if !defined(OS_DRAGONFLYBSD)
171# define OS_DRAGONFLYBSD 0
172#endif
173#if !defined(OS_FREEBSD)
174# define OS_FREEBSD 0
175#endif
176#if !defined(OS_NETBSD)
177# define OS_NETBSD 0
178#endif
179#if !defined(OS_OPENBSD)
180# define OS_OPENBSD 0
181#endif
182#if !defined(OS_SOLARIS)
183# define OS_SOLARIS 0
184#endif
185#if !defined(OS_QNX)
186# define OS_QNX 0
187#endif
188#if !defined(OS_ZOS)
189# define OS_ZOS 0
190#endif
191
193
194/* -------------------------------------------------------------------- */
198
199#if OS_DRAGONFLYBSD || OS_FREEBSD || OS_OPENBSD || OS_NETBSD
200# define OS_BSD 1
201#else
202# define OS_BSD 0
203#endif
204
206
207/* -------------------------------------------------------------------- */
211
212#if OS_AIX || OS_ANDROID || OS_ASMJS || OS_FREEBSD || OS_LINUX || OS_MAC || OS_NACL || \
213 OS_NETBSD || OS_OPENBSD || OS_QNX || OS_SOLARIS
214# define OS_POSIX 1
215#else
216# define OS_POSIX 0
217#endif
218
220
221/* -------------------------------------------------------------------- */
224
225#if defined(__clang__)
226# define COMPILER_CLANG 1
227#elif defined(__GNUC__)
228# define COMPILER_GCC 1
229# define COMPILER_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
230#elif defined(_MSC_VER)
231# define COMPILER_MSVC 1
232# define COMPILER_MSVC_VERSION (_MSC_VER)
233#elif defined(__MINGW32__)
234# define COMPILER_MINGW32 1
235#elif defined(__MINGW64__)
236# define COMPILER_MINGW64 1
237#else
238# error Please add support for your compiler in BLI_build_config.h
239#endif
240
241#if !defined(COMPILER_CLANG)
242# define COMPILER_CLANG 0
243#endif
244#if !defined(COMPILER_GCC)
245# define COMPILER_GCC 0
246#endif
247#if !defined(COMPILER_MSVC)
248# define COMPILER_MSVC 0
249#endif
250#if !defined(COMPILER_MINGW32)
251# define COMPILER_MINGW32 0
252#endif
253#if !defined(COMPILER_MINGW64)
254# define COMPILER_MINGW64 0
255#endif
256
257/* Compiler is any of MinGW family. */
258#if COMPILER_MINGW32 || COMPILER_MINGW64
259# define COMPILER_MINGW 1
260#else
261# define COMPILER_MINGW 0
262#endif
263
265
266/* -------------------------------------------------------------------- */
275
276#if defined(_M_X64) || defined(__x86_64__)
277# define ARCH_CPU_X86_FAMILY 1
278# define ARCH_CPU_X86_64 1
279# define ARCH_CPU_64_BITS 1
280# define ARCH_CPU_LITTLE_ENDIAN 1
281#elif defined(_M_IX86) || defined(__i386__)
282# define ARCH_CPU_X86_FAMILY 1
283# define ARCH_CPU_X86 1
284# define ARCH_CPU_32_BITS 1
285# define ARCH_CPU_LITTLE_ENDIAN 1
286#elif defined(__s390x__)
287# define ARCH_CPU_S390_FAMILY 1
288# define ARCH_CPU_S390X 1
289# define ARCH_CPU_64_BITS 1
290# define ARCH_CPU_BIG_ENDIAN 1
291#elif defined(__s390__)
292# define ARCH_CPU_S390_FAMILY 1
293# define ARCH_CPU_S390 1
294# define ARCH_CPU_31_BITS 1
295# define ARCH_CPU_BIG_ENDIAN 1
296#elif (defined(__PPC64__) || defined(__PPC__)) && defined(__BIG_ENDIAN__)
297# define ARCH_CPU_PPC64_FAMILY 1
298# define ARCH_CPU_PPC64 1
299# define ARCH_CPU_64_BITS 1
300# define ARCH_CPU_BIG_ENDIAN 1
301#elif defined(__PPC64__)
302# define ARCH_CPU_PPC64_FAMILY 1
303# define ARCH_CPU_PPC64 1
304# define ARCH_CPU_64_BITS 1
305# define ARCH_CPU_LITTLE_ENDIAN 1
306#elif defined(__ARMEL__)
307# define ARCH_CPU_ARM_FAMILY 1
308# define ARCH_CPU_ARMEL 1
309# define ARCH_CPU_32_BITS 1
310# define ARCH_CPU_LITTLE_ENDIAN 1
311#elif defined(__aarch64__) || defined(_M_ARM64)
312# define ARCH_CPU_ARM_FAMILY 1
313# define ARCH_CPU_ARM64 1
314# define ARCH_CPU_64_BITS 1
315# define ARCH_CPU_LITTLE_ENDIAN 1
316#elif defined(__pnacl__) || defined(__asmjs__) || defined(__wasm__)
317# define ARCH_CPU_32_BITS 1
318# define ARCH_CPU_LITTLE_ENDIAN 1
319#elif defined(__MIPSEL__)
320# if defined(__LP64__)
321# define ARCH_CPU_MIPS_FAMILY 1
322# define ARCH_CPU_MIPS64EL 1
323# define ARCH_CPU_64_BITS 1
324# define ARCH_CPU_LITTLE_ENDIAN 1
325# else
326# define ARCH_CPU_MIPS_FAMILY 1
327# define ARCH_CPU_MIPSEL 1
328# define ARCH_CPU_32_BITS 1
329# define ARCH_CPU_LITTLE_ENDIAN 1
330# endif
331#elif defined(__MIPSEB__)
332# if defined(__LP64__)
333# define ARCH_CPU_MIPS_FAMILY 1
334# define ARCH_CPU_MIPS64 1
335# define ARCH_CPU_64_BITS 1
336# define ARCH_CPU_BIG_ENDIAN 1
337# else
338# define ARCH_CPU_MIPS_FAMILY 1
339# define ARCH_CPU_MIPS 1
340# define ARCH_CPU_32_BITS 1
341# define ARCH_CPU_BIG_ENDIAN 1
342# endif
343#elif defined(__riscv)
344# define ARCH_CPU_RISCV_FAMILY 1
345# if defined(__LP128__)
346# define ARCH_CPU_RISCV128 1
347# define ARCH_CPU_128_BITS 1
348# elif defined(__LP64__)
349# define ARCH_CPU_RISCV64 1
350# define ARCH_CPU_64_BITS 1
351# else
352# define ARCH_CPU_RISCV32 1
353# define ARCH_CPU_32_BITS 1
354# endif
355# if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
356# define ARCH_CPU_LITTLE_ENDIAN 1
357# else
358# define ARCH_CPU_BIG_ENDIAN 1
359# endif
360#elif defined(__loongarch_lp64)
361# define ARCH_CPU_LOONG_FAMILY 1
362# define ARCH_CPU_LOONG64 1
363# define ARCH_CPU_64_BITS 1
364# define ARCH_CPU_LITTLE_ENDIAN 1
365#else
366# error Please add support for your architecture in BLI_build_config.h
367#endif
368
369#if !defined(ARCH_CPU_LITTLE_ENDIAN)
370# define ARCH_CPU_LITTLE_ENDIAN 0
371#endif
372#if !defined(ARCH_CPU_BIG_ENDIAN)
373# define ARCH_CPU_BIG_ENDIAN 0
374#endif
375
376#if !defined(ARCH_CPU_31_BITS)
377# define ARCH_CPU_31_BITS 0
378#endif
379#if !defined(ARCH_CPU_32_BITS)
380# define ARCH_CPU_32_BITS 0
381#endif
382#if !defined(ARCH_CPU_64_BITS)
383# define ARCH_CPU_64_BITS 0
384#endif
385#if !defined(ARCH_CPU_128_BITS)
386# define ARCH_CPU_128_BITS 0
387#endif
388
389#if !defined(ARCH_CPU_X86_FAMILY)
390# define ARCH_CPU_X86_FAMILY 0
391#endif
392#if !defined(ARCH_CPU_ARM_FAMILY)
393# define ARCH_CPU_ARM_FAMILY 0
394#endif
395#if !defined(ARCH_CPU_MIPS_FAMILY)
396# define ARCH_CPU_MIPS_FAMILY 0
397#endif
398#if !defined(ARCH_CPU_PPC64_FAMILY)
399# define ARCH_CPU_PPC64_FAMILY 0
400#endif
401#if !defined(ARCH_CPU_S390_FAMILY)
402# define ARCH_CPU_S390_FAMILY 0
403#endif
404#if !defined(ARCH_CPU_RISCV_FAMILY)
405# define ARCH_CPU_RISCV_FAMILY 0
406#endif
407#if !defined(ARCH_CPU_LOONG_FAMILY)
408# define ARCH_CPU_LOONG_FAMILY 0
409#endif
410
411#if !defined(ARCH_CPU_ARM64)
412# define ARCH_CPU_ARM64 0
413#endif
414#if !defined(ARCH_CPU_ARMEL)
415# define ARCH_CPU_ARMEL 0
416#endif
417#if !defined(ARCH_CPU_MIPS)
418# define ARCH_CPU_MIPS 0
419#endif
420#if !defined(ARCH_CPU_MIPS64)
421# define ARCH_CPU_MIPS64 0
422#endif
423#if !defined(ARCH_CPU_MIPS64EL)
424# define ARCH_CPU_MIPS64EL 0
425#endif
426#if !defined(ARCH_CPU_MIPSEL)
427# define ARCH_CPU_MIPSEL 0
428#endif
429#if !defined(ARCH_CPU_PPC64)
430# define ARCH_CPU_PPC64 0
431#endif
432#if !defined(ARCH_CPU_S390)
433# define ARCH_CPU_S390 0
434#endif
435#if !defined(ARCH_CPU_S390X)
436# define ARCH_CPU_S390X 0
437#endif
438#if !defined(ARCH_CPU_X86)
439# define ARCH_CPU_X86 0
440#endif
441#if !defined(ARCH_CPU_X86_64)
442# define ARCH_CPU_X86_64 0
443#endif
444#if !defined(ARCH_CPU_RISCV32)
445# define ARCH_CPU_RISCV32 0
446#endif
447#if !defined(ARCH_CPU_RISCV64)
448# define ARCH_CPU_RISCV64 0
449#endif
450#if !defined(ARCH_CPU_RISCV128)
451# define ARCH_CPU_RISCV128 0
452#endif
453#if !defined(ARCH_CPU_LOONG64)
454# define ARCH_CPU_LOONG64 0
455#endif
456