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