UI: Rename "View Camera Center" Op to "Frame Camera Bounds"
[blender.git] / CMakeLists.txt
1 # ***** BEGIN GPL LICENSE BLOCK *****
2 #
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # The Original Code is Copyright (C) 2006, Blender Foundation
18 # All rights reserved.
19 #
20 # ***** END GPL LICENSE BLOCK *****
21
22 #-----------------------------------------------------------------------------
23 # We don't allow in-source builds. This causes no end of troubles because
24 # all out-of-source builds will use the CMakeCache.txt file there and even
25 # build the libs and objects in it.
26
27 if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
28   if(NOT DEFINED WITH_IN_SOURCE_BUILD)
29     message(FATAL_ERROR
30       "CMake generation for blender is not allowed within the source directory!"
31       "\n Remove \"${CMAKE_SOURCE_DIR}/CMakeCache.txt\" and try again from another folder, e.g.:"
32       "\n "
33       "\n rm CMakeCache.txt"
34       "\n cd .."
35       "\n mkdir cmake-make"
36       "\n cd cmake-make"
37       "\n cmake ../blender"
38       "\n "
39       "\n Alternately define WITH_IN_SOURCE_BUILD to force this option (not recommended!)"
40     )
41   endif()
42 endif()
43
44 cmake_minimum_required(VERSION 3.5)
45
46 # Prever LEGACY OpenGL to eb compatible with all the existing releases and
47 # platforms which don't hare GLVND yet. Only do it if preference was not set
48 # externally.
49 if(NOT DEFINED OpenGL_GL_PREFERENCE)
50   set(OpenGL_GL_PREFERENCE "LEGACY")
51 endif()
52
53 if(NOT EXECUTABLE_OUTPUT_PATH)
54   set(FIRST_RUN TRUE)
55 else()
56   set(FIRST_RUN FALSE)
57 endif()
58
59 # this starts out unset
60 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
61 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/platform")
62
63 # avoid having empty buildtype
64 if(NOT DEFINED CMAKE_BUILD_TYPE_INIT)
65   set(CMAKE_BUILD_TYPE_INIT "Release")
66 endif()
67
68 # Omit superfluous "Up-to-date" messages.
69 if(NOT DEFINED CMAKE_INSTALL_MESSAGE)
70   set(CMAKE_INSTALL_MESSAGE "LAZY")
71 endif()
72
73 # quiet output for Makefiles, 'make -s' helps too
74 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
75
76 # global compile definitions since add_definitions() adds for all.
77 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
78   $<$<CONFIG:Debug>:DEBUG;_DEBUG>
79   $<$<CONFIG:Release>:NDEBUG>
80   $<$<CONFIG:MinSizeRel>:NDEBUG>
81   $<$<CONFIG:RelWithDebInfo>:NDEBUG>
82 )
83
84 #-----------------------------------------------------------------------------
85 # Set policy
86
87 # see "cmake --help-policy CMP0003"
88 # So library linking is more sane
89 cmake_policy(SET CMP0003 NEW)
90
91 # So BUILDINFO and BLENDERPATH strings are automatically quoted
92 cmake_policy(SET CMP0005 NEW)
93
94 # So syntax problems are errors
95 cmake_policy(SET CMP0010 NEW)
96
97 # Input directories must have CMakeLists.txt
98 cmake_policy(SET CMP0014 NEW)
99
100 # Silence draco warning on macOS, new policy works fine.
101 if(POLICY CMP0068)
102   cmake_policy(SET CMP0068 NEW)
103 endif()
104
105 #-----------------------------------------------------------------------------
106 # Load some macros.
107 include(build_files/cmake/macros.cmake)
108
109
110 #-----------------------------------------------------------------------------
111 # Initialize project.
112
113 blender_project_hack_pre()
114
115 project(Blender)
116
117 blender_project_hack_post()
118
119 enable_testing()
120
121 #-----------------------------------------------------------------------------
122 # Redirect output files
123
124 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
125 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
126 if(MSVC)
127   set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests/$<CONFIG>/ CACHE INTERNAL "" FORCE)
128 else()
129   set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests/ CACHE INTERNAL "" FORCE)
130 endif()
131
132 #-----------------------------------------------------------------------------
133 # Set default config options
134
135 get_blender_version()
136
137
138 #-----------------------------------------------------------------------------
139 # Options
140
141 # Blender internal features
142 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
143 mark_as_advanced(WITH_BLENDER)
144
145 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
146
147 option(WITH_PYTHON        "Enable Embedded Python API  (only disable for development)" ON)
148 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON)
149 mark_as_advanced(WITH_PYTHON)  # don't want people disabling this unless they really know what they are doing.
150 mark_as_advanced(WITH_PYTHON_SECURITY)  # some distributions see this as a security issue, rather than have them patch it, make a build option.
151
152 option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some efficiency, only enable for development)." OFF)
153 mark_as_advanced(WITH_PYTHON_SAFETY)
154 option(WITH_PYTHON_MODULE "Enable building as a python module which runs without a user interface, like running regular blender in background mode (experimental, only enable for development), installs to PYTHON_SITE_PACKAGES (or CMAKE_INSTALL_PREFIX if WITH_INSTALL_PORTABLE is enabled)." OFF)
155 if(APPLE)
156   option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
157 endif()
158
159 option(WITH_BUILDINFO     "Include extra build details (only disable for development & faster builds)" ON)
160 if(${CMAKE_VERSION} VERSION_LESS 2.8.8)
161   # add_library OBJECT arg unsupported
162   set(WITH_BUILDINFO OFF)
163 endif()
164 set(BUILDINFO_OVERRIDE_DATE "" CACHE STRING "Use instead of the current date for reproducible builds (empty string disables this option)")
165 set(BUILDINFO_OVERRIDE_TIME "" CACHE STRING "Use instead of the current time for reproducible builds (empty string disables this option)")
166 set(CPACK_OVERRIDE_PACKAGENAME "" CACHE STRING "Use instead of the standard packagename (empty string disables this option)")
167 mark_as_advanced(CPACK_OVERRIDE_PACKAGENAME)
168 mark_as_advanced(BUILDINFO_OVERRIDE_DATE)
169 mark_as_advanced(BUILDINFO_OVERRIDE_TIME)
170
171 option(WITH_IK_ITASC      "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
172 option(WITH_IK_SOLVER     "Enable Legacy IK solver (only disable for development)" ON)
173 option(WITH_FFTW3         "Enable FFTW3 support (Used for smoke, ocean sim, and audio effects)" ON)
174 option(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
175 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
176 mark_as_advanced(WITH_SYSTEM_BULLET)
177 option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ON)
178 if(APPLE)
179   # There's no OpenXR runtime in sight for macOS, neither is code well
180   # tested there -> disable it by default.
181   option(WITH_XR_OPENXR   "Enable VR features through the OpenXR specification" OFF)
182   mark_as_advanced(WITH_XR_OPENXR)
183 else()
184   option(WITH_XR_OPENXR   "Enable VR features through the OpenXR specification" ON)
185 endif()
186
187 # Compositor
188 option(WITH_COMPOSITOR         "Enable the tile based nodal compositor" ON)
189 option(WITH_OPENIMAGEDENOISE   "Enable the OpenImageDenoise compositing node" ON)
190
191 option(WITH_OPENSUBDIV    "Enable OpenSubdiv for surface subdivision" ON)
192
193 option(WITH_OPENVDB       "Enable features relying on OpenVDB" ON)
194 option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" ON)
195 option(WITH_OPENVDB_3_ABI_COMPATIBLE "Assume OpenVDB library has been compiled with version 3 ABI compatibility" OFF)
196 mark_as_advanced(WITH_OPENVDB_3_ABI_COMPATIBLE)
197
198 # GHOST Windowing Library Options
199 option(WITH_GHOST_DEBUG   "Enable debugging output for the GHOST library" OFF)
200 mark_as_advanced(WITH_GHOST_DEBUG)
201
202 option(WITH_GHOST_SDL    "Enable building Blender against SDL for windowing rather than the native APIs" OFF)
203 mark_as_advanced(WITH_GHOST_SDL)
204
205 if(UNIX AND NOT (APPLE OR HAIKU))
206   option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
207   mark_as_advanced(WITH_GHOST_X11)
208
209   option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for windowing (under development)" OFF)
210   mark_as_advanced(WITH_GHOST_WAYLAND)
211 endif()
212
213 if(WITH_GHOST_X11)
214   option(WITH_GHOST_XDND    "Enable drag'n'drop support on X11 using XDND protocol" ON)
215 endif()
216
217 # Misc...
218 option(WITH_HEADLESS      "Build without graphical support (renderfarm, server mode only)" OFF)
219 mark_as_advanced(WITH_HEADLESS)
220
221 option(WITH_QUADRIFLOW    "Build with quadriflow remesher support" ON)
222
223 option(WITH_AUDASPACE    "Build with blenders audio library (only disable if you know what you're doing!)" ON)
224 option(WITH_SYSTEM_AUDASPACE "Build with external audaspace library installed on the system (only enable if you know what you're doing!)" OFF)
225 mark_as_advanced(WITH_AUDASPACE)
226 mark_as_advanced(WITH_SYSTEM_AUDASPACE)
227
228 if(NOT WITH_AUDASPACE)
229   set(WITH_SYSTEM_AUDASPACE OFF)
230 endif()
231
232 option(WITH_OPENMP        "Enable OpenMP (has to be supported by the compiler)" ON)
233 if(UNIX AND NOT APPLE)
234   option(WITH_OPENMP_STATIC "Link OpenMP statically (only used by the release environment)" OFF)
235   mark_as_advanced(WITH_OPENMP_STATIC)
236 endif()
237
238 if(WITH_GHOST_X11)
239   option(WITH_X11_XINPUT    "Enable X11 Xinput (tablet support and unicode input)"  ON)
240   option(WITH_X11_XF86VMODE "Enable X11 video mode switching"                       ON)
241   option(WITH_X11_XFIXES    "Enable X11 XWayland cursor warping workaround"         ON)
242   option(WITH_X11_ALPHA     "Enable X11 transparent background"                     ON)
243 endif()
244
245 if(UNIX AND NOT APPLE)
246   option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" OFF)
247   option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system"           ON)
248 else()
249   # not an option for other OS's
250   set(WITH_SYSTEM_GLEW OFF)
251   set(WITH_SYSTEM_GLES OFF)
252 endif()
253
254
255 if(UNIX AND NOT APPLE)
256   option(WITH_SYSTEM_EIGEN3 "Use the systems Eigen3 library" OFF)
257 endif()
258
259
260 # Modifiers
261 option(WITH_MOD_FLUID           "Enable Mantaflow Fluid Simulation Framework" ON)
262 option(WITH_MOD_REMESH          "Enable Remesh Modifier" ON)
263 option(WITH_MOD_OCEANSIM        "Enable Ocean Modifier" ON)
264
265 # Image format support
266 option(WITH_OPENIMAGEIO         "Enable OpenImageIO Support (http://www.openimageio.org)" ON)
267 option(WITH_IMAGE_OPENEXR       "Enable OpenEXR Support (http://www.openexr.com)" ON)
268 option(WITH_IMAGE_OPENJPEG      "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
269 option(WITH_IMAGE_TIFF          "Enable LibTIFF Support" ON)
270 option(WITH_IMAGE_DDS           "Enable DDS Image Support" ON)
271 option(WITH_IMAGE_CINEON        "Enable CINEON and DPX Image Support" ON)
272 option(WITH_IMAGE_HDR           "Enable HDR Image Support" ON)
273
274 # Audio/Video format support
275 option(WITH_CODEC_AVI           "Enable Blenders own AVI file support (raw/jpeg)" ON)
276 option(WITH_CODEC_FFMPEG        "Enable FFMPeg Support (http://ffmpeg.org)" ON)
277 option(WITH_CODEC_SNDFILE       "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" ON)
278
279 # Alembic support
280 option(WITH_ALEMBIC             "Enable Alembic Support" ON)
281 option(WITH_ALEMBIC_HDF5        "Enable Legacy Alembic Support (not officially supported)" OFF)
282
283 # Universal Scene Description support
284 option(WITH_USD                 "Enable Universal Scene Description (USD) Support" ON)
285
286 # 3D format support
287 # Disable opencollada when we don't have precompiled libs
288 option(WITH_OPENCOLLADA   "Enable OpenCollada Support (http://www.opencollada.org)" ON)
289
290 # Sound output
291 option(WITH_SDL           "Enable SDL for sound and joystick support" ON)
292 option(WITH_OPENAL        "Enable OpenAL Support (http://www.openal.org)" ON)
293 if(NOT WIN32)
294   option(WITH_JACK          "Enable JACK Support (http://www.jackaudio.org)" ON)
295   if(UNIX AND NOT APPLE)
296     option(WITH_JACK_DYNLOAD  "Enable runtime dynamic JACK libraries loading" OFF)
297   endif()
298 endif()
299 if(UNIX AND NOT APPLE)
300   option(WITH_SDL_DYNLOAD  "Enable runtime dynamic SDL libraries loading" OFF)
301 endif()
302
303 # Compression
304 option(WITH_LZO           "Enable fast LZO compression (used for pointcache)" ON)
305 option(WITH_LZMA          "Enable best LZMA compression, (used for pointcache)" ON)
306 if(UNIX AND NOT APPLE)
307   option(WITH_SYSTEM_LZO    "Use the system LZO library" OFF)
308 endif()
309 option(WITH_DRACO         "Enable Draco mesh compression Python module (used for glTF)" ON)
310
311 # Camera/motion tracking
312 option(WITH_LIBMV         "Enable Libmv structure from motion library" ON)
313 option(WITH_LIBMV_SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." ON)
314 mark_as_advanced(WITH_LIBMV_SCHUR_SPECIALIZATIONS)
315
316 # Logging/unbit test libraries.
317 option(WITH_SYSTEM_GFLAGS   "Use system-wide Gflags instead of a bundled one" OFF)
318 option(WITH_SYSTEM_GLOG     "Use system-wide Glog instead of a bundled one" OFF)
319 mark_as_advanced(WITH_SYSTEM_GFLAGS)
320 mark_as_advanced(WITH_SYSTEM_GLOG)
321
322 # Freestyle
323 option(WITH_FREESTYLE     "Enable Freestyle (advanced edges rendering)" ON)
324
325 # New object types
326 option(WITH_NEW_OBJECT_TYPES "Enable new hair and pointcloud objects (use for development only, don't save in files)" OFF)
327 mark_as_advanced(WITH_NEW_OBJECT_TYPES)
328
329 # New simulation data block
330 option(WITH_NEW_SIMULATION_TYPE "Enable simulation data block (use for development only, don't save in files)" OFF)
331 mark_as_advanced(WITH_NEW_SIMULATION_TYPE)
332
333 # Misc
334 if(WIN32)
335   option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
336 endif()
337 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
338 if(UNIX AND NOT APPLE)
339   option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
340   option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
341   if(WITH_STATIC_LIBS)
342     option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
343     mark_as_advanced(WITH_BOOST_ICU)
344   endif()
345 endif()
346
347 option(WITH_PYTHON_INSTALL       "Copy system python into the blender install folder" ON)
348 if(WIN32 OR APPLE)
349   # Windows and macOS have this bundled with Python libraries.
350 elseif(WITH_PYTHON_INSTALL OR (WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE))
351   set(PYTHON_NUMPY_PATH            "" CACHE PATH "Path to python site-packages or dist-packages containing 'numpy' module")
352   mark_as_advanced(PYTHON_NUMPY_PATH)
353   set(PYTHON_NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_PATH}/numpy/core/include CACHE PATH "Path to the include directory of the numpy module")
354   mark_as_advanced(PYTHON_NUMPY_INCLUDE_DIRS)
355 endif()
356 if(WITH_PYTHON_INSTALL)
357   option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder"  ON)
358
359   if(UNIX AND NOT APPLE)
360     option(WITH_PYTHON_INSTALL_REQUESTS "Copy system requests into the blender install folder" ON)
361     set(PYTHON_REQUESTS_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'requests' module")
362     mark_as_advanced(PYTHON_REQUESTS_PATH)
363   endif()
364 endif()
365
366 option(WITH_CPU_SSE              "Enable SIMD instruction if they're detected on the host machine" ON)
367 mark_as_advanced(WITH_CPU_SSE)
368
369 # Cycles
370 option(WITH_CYCLES                  "Enable Cycles Render Engine" ON)
371 option(WITH_CYCLES_STANDALONE       "Build Cycles standalone application" OFF)
372 option(WITH_CYCLES_STANDALONE_GUI   "Build Cycles standalone with GUI" OFF)
373 option(WITH_CYCLES_OSL              "Build Cycles with OSL support" ON)
374 option(WITH_CYCLES_EMBREE           "Build Cycles with Embree support" OFF)
375 option(WITH_CYCLES_CUDA_BINARIES    "Build Cycles CUDA binaries" OFF)
376 option(WITH_CYCLES_CUBIN_COMPILER   "Build cubins with nvrtc based compiler instead of nvcc" OFF)
377 option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF)
378 mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL)
379 set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 CACHE STRING "CUDA architectures to build binaries for")
380 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
381 unset(PLATFORM_DEFAULT)
382 option(WITH_CYCLES_LOGGING  "Build Cycles with logging support" ON)
383 option(WITH_CYCLES_DEBUG    "Build Cycles with extra debug capabilities" OFF)
384 option(WITH_CYCLES_NATIVE_ONLY  "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
385 option(WITH_CYCLES_KERNEL_ASAN  "Build Cycles kernels with address sanitizer when WITH_COMPILER_ASAN is on, even if it's very slow" OFF)
386 mark_as_advanced(WITH_CYCLES_KERNEL_ASAN)
387 mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
388 mark_as_advanced(WITH_CYCLES_LOGGING)
389 mark_as_advanced(WITH_CYCLES_DEBUG)
390 mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
391
392 option(WITH_CYCLES_DEVICE_CUDA              "Enable Cycles CUDA compute support" ON)
393 option(WITH_CYCLES_DEVICE_OPTIX             "Enable Cycles OptiX support" OFF)
394 option(WITH_CYCLES_DEVICE_OPENCL            "Enable Cycles OpenCL compute support" ON)
395 option(WITH_CYCLES_NETWORK              "Enable Cycles compute over network support (EXPERIMENTAL and unfinished)" OFF)
396 mark_as_advanced(WITH_CYCLES_DEVICE_CUDA)
397 mark_as_advanced(WITH_CYCLES_DEVICE_OPENCL)
398 mark_as_advanced(WITH_CYCLES_NETWORK)
399
400 option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
401 mark_as_advanced(WITH_CUDA_DYNLOAD)
402
403 # LLVM
404 option(WITH_LLVM                    "Use LLVM" OFF)
405 if(APPLE)
406   option(LLVM_STATIC                  "Link with LLVM static libraries" ON) # we prefer static llvm build on Apple, dyn build possible though
407 else()
408   option(LLVM_STATIC                  "Link with LLVM static libraries" OFF)
409 endif()
410 mark_as_advanced(LLVM_STATIC)
411
412 # disable for now, but plan to support on all platforms eventually
413 option(WITH_MEM_JEMALLOC   "Enable malloc replacement (http://www.canonware.com/jemalloc)" ON)
414 mark_as_advanced(WITH_MEM_JEMALLOC)
415
416 # currently only used for BLI_mempool
417 option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
418 mark_as_advanced(WITH_MEM_VALGRIND)
419
420 # Debug
421 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
422 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
423
424 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" ON)
425 mark_as_advanced(WITH_ASSERT_ABORT)
426
427 option(WITH_BOOST "Enable features depending on boost" ON)
428 option(WITH_TBB   "Enable features depending on TBB (OpenVDB, OpenImageDenoise, sculpt multithreading)" ON)
429
430 # TBB malloc is only supported on for windows currently
431 if(WIN32)
432   option(WITH_TBB_MALLOC_PROXY "Enable the TBB malloc replacement" ON)
433 endif()
434
435 # Unit testsing
436 option(WITH_GTESTS "Enable GTest unit testing" OFF)
437 option(WITH_OPENGL_RENDER_TESTS "Enable OpenGL render related unit testing (Experimental)" OFF)
438 option(WITH_OPENGL_DRAW_TESTS "Enable OpenGL UI drawing related unit testing (Experimental)" OFF)
439 set(TEST_PYTHON_EXE "" CACHE PATH "Python executable to run unit tests")
440 mark_as_advanced(TEST_PYTHON_EXE)
441
442 # Documentation
443 if(UNIX AND NOT APPLE)
444   option(WITH_DOC_MANPAGE "Create a manual page (Unix manpage)" OFF)
445 endif()
446
447
448 # OpenGL
449
450 option(WITH_OPENGL              "When off limits visibility of the opengl headers to just bf_gpu and gawain (temporary option for development purposes)" ON)
451 option(WITH_GLEW_ES             "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
452 option(WITH_GL_EGL              "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)"       OFF)
453 option(WITH_GL_PROFILE_ES20     "Support using OpenGL ES 2.0. (through either EGL or the AGL/WGL/XGL 'es20' profile)"                               OFF)
454
455 mark_as_advanced(
456   WITH_OPENGL
457   WITH_GLEW_ES
458   WITH_GL_EGL
459   WITH_GL_PROFILE_ES20
460 )
461
462 if(WIN32)
463   option(WITH_GL_ANGLE "Link with the ANGLE library, an OpenGL ES 2.0 implementation based on Direct3D, instead of the system OpenGL library." OFF)
464   mark_as_advanced(WITH_GL_ANGLE)
465 endif()
466
467 if(WITH_GLEW_ES AND WITH_SYSTEM_GLEW)
468   message(WARNING Ignoring WITH_SYSTEM_GLEW and using WITH_GLEW_ES)
469   set(WITH_SYSTEM_GLEW OFF)
470 endif()
471
472 if(WIN32)
473   getDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
474   set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
475 endif()
476
477 # Compiler toolchain
478 if(CMAKE_COMPILER_IS_GNUCC)
479   option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON)
480   mark_as_advanced(WITH_LINKER_GOLD)
481   option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF)
482   mark_as_advanced(WITH_LINKER_LLD)
483 endif()
484
485 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
486   option(WITH_COMPILER_ASAN "Build and link against address sanitizer (only for Debug & RelWithDebInfo targets)." OFF)
487   mark_as_advanced(WITH_COMPILER_ASAN)
488
489   if(WITH_COMPILER_ASAN)
490     set(_asan_defaults "\
491 -fsanitize=address \
492 -fsanitize=bool \
493 -fsanitize=bounds \
494 -fsanitize=enum \
495 -fsanitize=float-cast-overflow \
496 -fsanitize=float-divide-by-zero \
497 -fsanitize=nonnull-attribute \
498 -fsanitize=returns-nonnull-attribute \
499 -fsanitize=signed-integer-overflow \
500 -fsanitize=undefined \
501 -fsanitize=vla-bound \
502 -fno-sanitize=alignment \
503 ")
504
505     if(NOT MSVC) # not all sanitizers are supported with clang-cl, these two however are very vocal about it
506       set(_asan_defaults "${_asan_defaults} -fsanitize=leak -fsanitize=object-size" )
507     endif()
508     set(COMPILER_ASAN_CFLAGS "${_asan_defaults}" CACHE STRING "C flags for address sanitizer")
509     mark_as_advanced(COMPILER_ASAN_CFLAGS)
510     set(COMPILER_ASAN_CXXFLAGS "${_asan_defaults}" CACHE STRING "C++ flags for address sanitizer")
511     mark_as_advanced(COMPILER_ASAN_CXXFLAGS)
512
513     unset(_asan_defaults)
514
515     if(NOT MSVC)
516       find_library(COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
517     else()
518       find_library(
519         COMPILER_ASAN_LIBRARY NAMES clang_rt.asan-x86_64
520         PATHS
521         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/7.0.0/lib/windows
522         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\LLVM\\LLVM;]/lib/clang/6.0.0/lib/windows
523       )
524     endif()
525     mark_as_advanced(COMPILER_ASAN_LIBRARY)
526   endif()
527 endif()
528
529 if(WIN32)
530   # Use hardcoded paths or find_package to find externals
531   option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF)
532   mark_as_advanced(WITH_WINDOWS_FIND_MODULES)
533
534   option(WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS "Organize the visual studio projects according to source folder structure." ON)
535   mark_as_advanced(WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS)
536
537   option(WINDOWS_USE_VISUAL_STUDIO_SOURCE_FOLDERS "Organize the source files in filters matching the source folders." ON)
538   mark_as_advanced(WINDOWS_USE_VISUAL_STUDIO_SOURCE_FOLDERS)
539
540   option(WINDOWS_PYTHON_DEBUG "Include the files needed for debugging python scripts with visual studio 2017+." OFF)
541   mark_as_advanced(WINDOWS_PYTHON_DEBUG)
542
543   option(WITH_WINDOWS_BUNDLE_CRT "Bundle the C runtime for install free distribution." ON)
544   mark_as_advanced(WITH_WINDOWS_BUNDLE_CRT)
545
546   option(WITH_WINDOWS_SCCACHE "Use sccache to speed up builds (Ninja builder only)" OFF)
547   mark_as_advanced(WITH_WINDOWS_SCCACHE)
548
549   option(WITH_WINDOWS_PDB "Generate a pdb file for client side stacktraces" ON)
550   mark_as_advanced(WITH_WINDOWS_PDB)
551
552   option(WITH_WINDOWS_STRIPPED_PDB "Use a stripped PDB file" On)
553   mark_as_advanced(WITH_WINDOWS_STRIPPED_PDB)
554
555 endif()
556
557 # The following only works with the Ninja generator in CMake >= 3.0.
558 if("${CMAKE_GENERATOR}" MATCHES "Ninja")
559   option(WITH_NINJA_POOL_JOBS
560          "Enable Ninja pools of jobs, to try to ease building on machines with 16GB of RAM or less (if not yet defined, will try to set best values based on detected machine specifications)."
561          OFF)
562   mark_as_advanced(WITH_NINJA_POOL_JOBS)
563 endif()
564
565 if(UNIX AND NOT APPLE)
566   option(WITH_CXX11_ABI "Use native C++11 ABI of compiler" ON)
567   mark_as_advanced(WITH_CXX11_ABI)
568 endif()
569
570 # Installation process.
571 option(POSTINSTALL_SCRIPT "Run given CMake script after installation process" OFF)
572 mark_as_advanced(POSTINSTALL_SCRIPT)
573
574 # end option(...)
575
576
577
578 # By default we want to install to the directory we are compiling our executables
579 # unless specified otherwise, which we currently do not allow
580 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
581   if(WIN32)
582     set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
583   elseif(APPLE)
584     set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
585   else()
586     if(WITH_INSTALL_PORTABLE)
587       set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH} CACHE PATH "default install path" FORCE)
588     endif()
589   endif()
590 endif()
591
592
593
594 # Apple
595
596 if(APPLE)
597   include(platform_apple_xcode)
598 endif()
599
600
601 #-----------------------------------------------------------------------------
602 # Check for conflicting/unsupported configurations
603
604 if(NOT WITH_BLENDER AND NOT WITH_CYCLES_STANDALONE)
605   message(FATAL_ERROR
606     "At least one of WITH_BLENDER or WITH_CYCLES_STANDALONE "
607     "must be enabled, nothing to do!"
608   )
609 endif()
610
611 if(NOT WITH_AUDASPACE)
612   if(WITH_OPENAL)
613     message(WARNING "WITH_OPENAL requires WITH_AUDASPACE which is disabled")
614     set(WITH_OPENAL OFF)
615   endif()
616   if(WITH_JACK)
617     message(WARNING "WITH_JACK requires WITH_AUDASPACE which is disabled")
618     set(WITH_JACK OFF)
619   endif()
620 endif()
621
622 if(NOT WITH_SDL AND WITH_GHOST_SDL)
623   message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
624 endif()
625
626 # python module, needs some different options
627 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
628   message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
629 endif()
630
631 if(NOT WITH_PYTHON)
632   set(WITH_CYCLES OFF)
633   set(WITH_DRACO OFF)
634 endif()
635
636 if(WITH_DRACO AND NOT WITH_PYTHON_INSTALL)
637   message(STATUS "WITH_DRACO requires WITH_PYTHON_INSTALL to be ON, disabling WITH_DRACO for now")
638   set(WITH_DRACO OFF)
639 endif()
640
641 # enable boost for cycles, audaspace or i18n
642 # otherwise if the user disabled
643
644 set_and_warn_dependency(WITH_BOOST WITH_CYCLES         OFF)
645 set_and_warn_dependency(WITH_BOOST WITH_INTERNATIONAL  OFF)
646 set_and_warn_dependency(WITH_BOOST WITH_OPENVDB        OFF)
647 set_and_warn_dependency(WITH_BOOST WITH_OPENCOLORIO    OFF)
648 set_and_warn_dependency(WITH_BOOST WITH_QUADRIFLOW     OFF)
649 set_and_warn_dependency(WITH_BOOST WITH_USD            OFF)
650 set_and_warn_dependency(WITH_BOOST WITH_ALEMBIC        OFF)
651
652 if(WITH_BOOST AND NOT (WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_INTERNATIONAL OR
653    WITH_OPENVDB OR WITH_OPENCOLORIO OR WITH_USD OR WITH_ALEMBIC))
654   message(STATUS "No dependencies need 'WITH_BOOST' forcing WITH_BOOST=OFF")
655   set(WITH_BOOST OFF)
656 endif()
657
658 set_and_warn_dependency(WITH_TBB WITH_USD               OFF)
659 set_and_warn_dependency(WITH_TBB WITH_OPENIMAGEDENOISE  OFF)
660 set_and_warn_dependency(WITH_TBB WITH_OPENVDB           OFF)
661 set_and_warn_dependency(WITH_TBB WITH_MOD_FLUID         OFF)
662
663 # OpenVDB uses 'half' type from OpenEXR & fails to link without OpenEXR enabled.
664 set_and_warn_dependency(WITH_IMAGE_OPENEXR WITH_OPENVDB OFF)
665
666 # auto enable openimageio for cycles
667 if(WITH_CYCLES)
668   set(WITH_OPENIMAGEIO ON)
669
670   # auto enable llvm for cycles_osl
671   if(WITH_CYCLES_OSL)
672     set(WITH_LLVM ON CACHE BOOL "" FORCE)
673   endif()
674 else()
675   set(WITH_CYCLES_OSL OFF)
676 endif()
677
678 # auto enable openimageio linking dependencies
679 if(WITH_OPENIMAGEIO)
680   set(WITH_IMAGE_OPENEXR ON)
681   set(WITH_IMAGE_TIFF ON)
682 endif()
683
684 # auto enable alembic linking dependencies
685 if(WITH_ALEMBIC)
686   set(WITH_IMAGE_OPENEXR ON)
687 endif()
688
689 # don't store paths to libs for portable distribution
690 if(WITH_INSTALL_PORTABLE)
691   set(CMAKE_SKIP_BUILD_RPATH TRUE)
692 endif()
693
694 if(WITH_GHOST_SDL OR WITH_HEADLESS)
695   set(WITH_GHOST_WAYLAND OFF)
696   set(WITH_GHOST_X11     OFF)
697   set(WITH_X11_XINPUT    OFF)
698   set(WITH_X11_XF86VMODE OFF)
699   set(WITH_X11_XFIXES    OFF)
700   set(WITH_X11_ALPHA     OFF)
701   set(WITH_GHOST_XDND    OFF)
702   set(WITH_INPUT_IME     OFF)
703   set(WITH_XR_OPENXR     OFF)
704 endif()
705
706 if(WITH_CPU_SSE)
707   TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
708 else()
709   message(STATUS "SSE and SSE2 optimizations are DISABLED!")
710   set(COMPILER_SSE_FLAG)
711   set(COMPILER_SSE2_FLAG)
712 endif()
713
714 if(WITH_BUILDINFO)
715   find_package(Git)
716   if(NOT GIT_FOUND)
717     message(WARNING "Git was not found, disabling WITH_BUILDINFO")
718     set(WITH_BUILDINFO OFF)
719   endif()
720 endif()
721
722 if(WITH_AUDASPACE)
723   if(NOT WITH_SYSTEM_AUDASPACE)
724     set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/audaspace/bindings/C" "${CMAKE_BINARY_DIR}/extern/audaspace")
725     set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/audaspace/bindings")
726   endif()
727 endif()
728
729 # Auto-enable CUDA dynload if toolkit is not found.
730 if(NOT WITH_CUDA_DYNLOAD)
731   find_package(CUDA)
732   if(NOT CUDA_FOUND)
733     message("CUDA toolkit not found, using dynamic runtime loading of libraries instead")
734     set(WITH_CUDA_DYNLOAD ON)
735   endif()
736 endif()
737
738 #-----------------------------------------------------------------------------
739 # Check check if submodules are cloned
740
741 if(WITH_INTERNATIONAL)
742   file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/datafiles/locale")
743   list(LENGTH RESULT DIR_LEN)
744   if(DIR_LEN EQUAL 0)
745     message(WARNING
746       "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
747       "This is a 'git submodule', which are known not to work with bridges to other version "
748       "control systems, disabling 'WITH_INTERNATIONAL'."
749     )
750     set(WITH_INTERNATIONAL OFF)
751   endif()
752 endif()
753
754 if(WITH_PYTHON)
755   # While we have this as an '#error' in 'bpy_capi_utils.h',
756   # upgrading Python tends to cause confusion for users who build.
757   # Give the error message early to make this more obvious.
758   #
759   # Do this before main 'platform_*' checks,
760   # because UNIX will search for the old Python paths which may not exist.
761   # giving errors about missing paths before this case is met.
762   if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.7")
763     message(FATAL_ERROR "At least Python 3.7 is required to build")
764   endif()
765
766   file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
767   list(LENGTH RESULT DIR_LEN)
768   if(DIR_LEN EQUAL 0)
769     message(WARNING
770       "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
771       "This is a 'git submodule', which are known not to work with bridges to other version "
772       "control systems: * CONTINUING WITHOUT ADDONS *"
773     )
774   endif()
775 endif()
776
777 #-----------------------------------------------------------------------------
778 # Initialize un-cached vars, avoid unused warning
779
780 # linux only, not cached
781 set(WITH_BINRELOC OFF)
782
783 # MACOSX only, set to avoid uninitialized
784 set(EXETYPE "")
785
786 # C/C++ flags
787 set(PLATFORM_CFLAGS)
788
789 # these are added to later on.
790 set(C_WARNINGS)
791 set(CXX_WARNINGS)
792
793 # for gcc -Wno-blah-blah
794 set(C_REMOVE_STRICT_FLAGS)
795 set(CXX_REMOVE_STRICT_FLAGS)
796
797 # libraries to link the binary with passed to target_link_libraries()
798 # known as LLIBS to scons
799 set(PLATFORM_LINKLIBS "")
800
801 # Added to linker flags in setup_liblinks
802 # - CMAKE_EXE_LINKER_FLAGS
803 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
804 set(PLATFORM_LINKFLAGS "")
805 set(PLATFORM_LINKFLAGS_DEBUG "")
806
807 if(NOT CMAKE_BUILD_TYPE MATCHES "Release")
808   if(WITH_COMPILER_ASAN)
809     set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMPILER_ASAN_CFLAGS}")
810     set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CFLAGS}")
811
812     set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMPILER_ASAN_CXXFLAGS}")
813     set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CXXFLAGS}")
814     if(MSVC)
815       set(COMPILER_ASAN_LINKER_FLAGS "/FUNCTIONPADMIN:6")
816     endif()
817     if(COMPILER_ASAN_LIBRARY)
818       set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS};${COMPILER_ASAN_LIBRARY}")
819       set(PLATFORM_LINKFLAGS "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
820       set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY} ${COMPILER_ASAN_LINKER_FLAGS}")
821     endif()
822   endif()
823 endif()
824
825 # ----------------------------------------------------------------------------
826 # Main Platform Checks
827 #
828 # - UNIX
829 # - WIN32
830 # - APPLE
831
832 if(UNIX AND NOT APPLE)
833   include(platform_unix)
834 elseif(WIN32)
835   include(platform_win32)
836 elseif(APPLE)
837   include(platform_apple)
838 endif()
839
840 #-----------------------------------------------------------------------------
841 # Common.
842
843 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
844   message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
845 endif()
846
847 if(WITH_CYCLES)
848   if(NOT WITH_OPENIMAGEIO)
849     message(FATAL_ERROR
850       "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. "
851       "Configure OIIO or disable WITH_CYCLES"
852     )
853   endif()
854   if(NOT WITH_BOOST)
855     message(FATAL_ERROR
856       "Cycles requires WITH_BOOST, the library may not have been found. "
857       "Configure BOOST or disable WITH_CYCLES"
858     )
859   endif()
860
861   if(WITH_CYCLES_OSL)
862     if(NOT WITH_LLVM)
863       message(FATAL_ERROR
864         "Cycles OSL requires WITH_LLVM, the library may not have been found. "
865         "Configure LLVM or disable WITH_CYCLES_OSL"
866       )
867     endif()
868   endif()
869 endif()
870
871 if(WITH_INTERNATIONAL)
872   if(NOT WITH_BOOST)
873     message(FATAL_ERROR
874       "Internationalization requires WITH_BOOST, the library may not have been found. "
875       "Configure BOOST or disable WITH_INTERNATIONAL"
876     )
877   endif()
878 endif()
879
880 # See TEST_SSE_SUPPORT() for how this is defined.
881
882 # Do it globally, SSE2 is required for quite some time now.
883 # Doing it now allows to use SSE/SSE2 in inline headers.
884 if(SUPPORT_SSE_BUILD)
885   set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
886   add_definitions(-D__SSE__ -D__MMX__)
887 endif()
888 if(SUPPORT_SSE2_BUILD)
889   set(PLATFORM_CFLAGS " ${PLATFORM_CFLAGS} ${COMPILER_SSE2_FLAG}")
890   add_definitions(-D__SSE2__)
891   if(NOT SUPPORT_SSE_BUILD) # don't double up
892     add_definitions(-D__MMX__)
893   endif()
894 endif()
895
896
897 # set the endian define
898 if(MSVC)
899   # for some reason this fails on msvc
900   add_definitions(-D__LITTLE_ENDIAN__)
901
902   # OSX-Note: as we do cross-compiling with specific set architecture,
903   # endianess-detection and auto-setting is counterproductive
904   # so we just set endianness according CMAKE_OSX_ARCHITECTURES
905
906 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
907   add_definitions(-D__LITTLE_ENDIAN__)
908 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)
909   add_definitions(-D__BIG_ENDIAN__)
910
911 else()
912   include(TestBigEndian)
913   test_big_endian(_SYSTEM_BIG_ENDIAN)
914   if(_SYSTEM_BIG_ENDIAN)
915     add_definitions(-D__BIG_ENDIAN__)
916   else()
917     add_definitions(-D__LITTLE_ENDIAN__)
918   endif()
919   unset(_SYSTEM_BIG_ENDIAN)
920 endif()
921 if(WITH_IMAGE_OPENJPEG)
922   # Special handling of Windows platform where openjpeg is always static.
923   if(WIN32)
924     set(OPENJPEG_DEFINES "-DOPJ_STATIC")
925   else()
926     set(OPENJPEG_DEFINES "")
927   endif()
928 endif()
929
930 if(NOT WITH_SYSTEM_EIGEN3)
931   set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
932 endif()
933
934 if(WITH_OPENVDB)
935   list(APPEND OPENVDB_DEFINITIONS -DWITH_OPENVDB)
936
937   if(WITH_OPENVDB_3_ABI_COMPATIBLE)
938     list(APPEND OPENVDB_DEFINITIONS -DOPENVDB_3_ABI_COMPATIBLE)
939   endif()
940
941   list(APPEND OPENVDB_INCLUDE_DIRS
942     ${BOOST_INCLUDE_DIR}
943     ${TBB_INCLUDE_DIRS}
944     ${OPENEXR_INCLUDE_DIRS})
945
946   list(APPEND OPENVDB_LIBRARIES ${OPENEXR_LIBRARIES} ${ZLIB_LIBRARIES})
947
948   if(WITH_OPENVDB_BLOSC)
949     list(APPEND OPENVDB_DEFINITIONS -DWITH_OPENVDB_BLOSC)
950     list(APPEND OPENVDB_LIBRARIES ${BLOSC_LIBRARIES} ${ZLIB_LIBRARIES})
951   endif()
952
953   list(APPEND OPENVDB_LIBRARIES ${BOOST_LIBRARIES} ${TBB_LIBRARIES})
954 endif()
955
956 #-----------------------------------------------------------------------------
957 # Configure OpenGL.
958
959 find_package(OpenGL)
960 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
961
962 if(WITH_OPENGL)
963   add_definitions(-DWITH_OPENGL)
964 endif()
965
966 if(WITH_SYSTEM_GLES)
967   find_package_wrapper(OpenGLES)
968 endif()
969
970 if(WITH_GL_PROFILE_ES20)
971   if(WITH_SYSTEM_GLES)
972     if(NOT OPENGLES_LIBRARY)
973       message(FATAL_ERROR
974         "Unable to find OpenGL ES libraries. "
975         "Install them or disable WITH_SYSTEM_GLES."
976       )
977     endif()
978
979     list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
980
981   else()
982     set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
983     mark_as_advanced(OPENGLES_LIBRARY)
984
985     list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
986
987     if(NOT OPENGLES_LIBRARY)
988       message(FATAL_ERROR
989         "To compile WITH_GL_EGL you need to set OPENGLES_LIBRARY "
990         "to the file path of an OpenGL ES 2.0 library."
991       )
992     endif()
993
994   endif()
995
996   if(WIN32)
997     # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
998
999     set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
1000     mark_as_advanced(OPENGLES_DLL)
1001
1002     if(NOT OPENGLES_DLL)
1003       message(FATAL_ERROR
1004         "To compile WITH_GL_PROFILE_ES20 you need to set OPENGLES_DLL to the file "
1005         "path of an OpenGL ES 2.0 runtime dynamic link library (DLL)."
1006       )
1007     endif()
1008
1009     if(WITH_GL_ANGLE)
1010       list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
1011
1012       set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
1013
1014       get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
1015       list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
1016
1017       mark_as_advanced(D3DCOMPILER_DLL)
1018
1019       if(D3DCOMPILER_DLL STREQUAL "")
1020         message(FATAL_ERROR
1021           "To compile WITH_GL_ANGLE you need to set D3DCOMPILER_DLL to the file "
1022           "path of a copy of the DirectX redistributable DLL file: D3DCompiler_46.dll"
1023         )
1024       endif()
1025
1026     endif()
1027
1028   endif()
1029
1030 else()
1031   if(OpenGL_GL_PREFERENCE STREQUAL "LEGACY" AND OPENGL_gl_LIBRARY)
1032     list(APPEND BLENDER_GL_LIBRARIES ${OPENGL_gl_LIBRARY})
1033   else()
1034     list(APPEND BLENDER_GL_LIBRARIES ${OPENGL_opengl_LIBRARY} ${OPENGL_glx_LIBRARY})
1035   endif()
1036 endif()
1037
1038 if(WITH_GL_EGL)
1039   find_package(OpenGL REQUIRED EGL)
1040   list(APPEND BLENDER_GL_LIBRARIES OpenGL::EGL)
1041
1042   list(APPEND GL_DEFINITIONS -DWITH_GL_EGL -DGLEW_EGL -DGLEW_INC_EGL)
1043
1044   if(WITH_SYSTEM_GLES)
1045     if(NOT OPENGLES_EGL_LIBRARY)
1046       message(FATAL_ERROR
1047         "Unable to find OpenGL ES libraries. "
1048         "Install them or disable WITH_SYSTEM_GLES."
1049       )
1050     endif()
1051
1052     list(APPEND BLENDER_GL_LIBRARIES ${OPENGLES_EGL_LIBRARY})
1053
1054   else()
1055     set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
1056     mark_as_advanced(OPENGLES_EGL_LIBRARY)
1057
1058     list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
1059
1060     if(NOT OPENGLES_EGL_LIBRARY)
1061       message(FATAL_ERROR
1062         "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY "
1063         "to the file path of an EGL library."
1064       )
1065     endif()
1066
1067   endif()
1068
1069   if(WIN32)
1070     # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
1071
1072     set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
1073     mark_as_advanced(OPENGLES_EGL_DLL)
1074
1075     if(NOT OPENGLES_EGL_DLL)
1076       message(FATAL_ERROR
1077         "To compile WITH_GL_EGL you need to set OPENGLES_EGL_DLL "
1078         "to the file path of an EGL runtime dynamic link library (DLL)."
1079       )
1080     endif()
1081
1082   endif()
1083
1084 endif()
1085
1086 if(WITH_GL_PROFILE_ES20)
1087   list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
1088 else()
1089   list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
1090 endif()
1091
1092 #-----------------------------------------------------------------------------
1093 # Configure OpenMP.
1094 if(WITH_OPENMP)
1095   if(NOT OPENMP_CUSTOM)
1096     find_package(OpenMP)
1097   endif()
1098
1099   if(OPENMP_FOUND)
1100     if(NOT WITH_OPENMP_STATIC)
1101       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
1102       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
1103     else()
1104       # Typically avoid adding flags as defines but we can't
1105       # pass OpenMP flags to the linker for static builds, meaning
1106       # we can't add any OpenMP related flags to CFLAGS variables
1107       # since they're passed to the linker as well.
1108       add_definitions("${OpenMP_C_FLAGS}")
1109
1110       find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
1111     endif()
1112   else()
1113     set(WITH_OPENMP OFF)
1114   endif()
1115
1116   mark_as_advanced(
1117     OpenMP_C_FLAGS
1118     OpenMP_CXX_FLAGS
1119   )
1120 endif()
1121
1122 #-----------------------------------------------------------------------------
1123 # Configure GLEW
1124
1125 if(WITH_SYSTEM_GLEW)
1126   find_package(GLEW)
1127
1128   # Note: There is an assumption here that the system GLEW is not a static library.
1129
1130   if(NOT GLEW_FOUND)
1131     message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
1132   endif()
1133
1134   set(GLEW_INCLUDE_PATH "${GLEW_INCLUDE_DIR}")
1135   set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
1136 else()
1137   if(WITH_GLEW_ES)
1138     set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
1139
1140     list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
1141
1142     # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
1143     if(WITH_GL_PROFILE_ES20)
1144       list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
1145     else()
1146       # No ES functions are needed
1147       list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
1148     endif()
1149
1150     if(WITH_GL_PROFILE_ES20)
1151       if(WITH_GL_EGL)
1152         list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
1153       endif()
1154
1155       # ToDo: This is an experiment to eliminate ES 1 symbols,
1156       # GLEW doesn't really properly provide this level of control
1157       # (for example, without modification it eliminates too many symbols)
1158       # so there are lots of modifications to GLEW to make this work,
1159       # and no attempt to make it work beyond Blender at this point.
1160       list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
1161     endif()
1162
1163     set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
1164
1165   else()
1166     set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
1167
1168     list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
1169
1170     # This won't affect the non-experimental glew library,
1171     # but is used for conditional compilation elsewhere.
1172     list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
1173
1174     set(BLENDER_GLEW_LIBRARIES extern_glew)
1175
1176   endif()
1177
1178 endif()
1179
1180 list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
1181
1182 #-----------------------------------------------------------------------------
1183 # Configure Bullet
1184
1185 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
1186   find_package(Bullet)
1187   if(NOT BULLET_FOUND)
1188     set(WITH_BULLET OFF)
1189   endif()
1190 else()
1191   set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
1192   # set(BULLET_LIBRARIES "")
1193 endif()
1194
1195 #-----------------------------------------------------------------------------
1196 # Configure Python.
1197
1198 if(WITH_PYTHON_MODULE)
1199   add_definitions(-DPy_ENABLE_SHARED)
1200 endif()
1201
1202 #-----------------------------------------------------------------------------
1203 # Configure GLog/GFlags
1204
1205 if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
1206   if(WITH_SYSTEM_GFLAGS)
1207     find_package(Gflags)
1208     if(NOT GFLAGS_FOUND)
1209       message(FATAL_ERROR "System wide Gflags is requested but was not found")
1210     endif()
1211     # FindGflags does not define this, and we are not even sure what to use here.
1212     set(GFLAGS_DEFINES)
1213   else()
1214     set(GFLAGS_DEFINES
1215       -DGFLAGS_DLL_DEFINE_FLAG=
1216       -DGFLAGS_DLL_DECLARE_FLAG=
1217       -DGFLAGS_DLL_DECL=
1218     )
1219     set(GFLAGS_NAMESPACE "gflags")
1220     set(GFLAGS_LIBRARIES extern_gflags)
1221     set(GFLAGS_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/extern/gflags/src")
1222   endif()
1223
1224   if(WITH_SYSTEM_GLOG)
1225     find_package(Glog)
1226     if(NOT GLOG_FOUND)
1227       message(FATAL_ERROR "System wide Glog is requested but was not found")
1228     endif()
1229     # FindGlog does not define this, and we are not even sure what to use here.
1230     set(GLOG_DEFINES)
1231   else()
1232     set(GLOG_DEFINES
1233       -DGOOGLE_GLOG_DLL_DECL=
1234     )
1235     set(GLOG_LIBRARIES extern_glog)
1236     if(WIN32)
1237       set(GLOG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/glog/src/windows)
1238     else()
1239       set(GLOG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/glog/include)
1240     endif()
1241   endif()
1242 endif()
1243
1244 #-----------------------------------------------------------------------------
1245 # Configure Ceres
1246
1247 if(WITH_LIBMV)
1248   # We always have C++11 which includes unordered_map.
1249   set(CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
1250 endif()
1251
1252 #-----------------------------------------------------------------------------
1253 # Extra limits to number of jobs running in parallel for some kind os tasks.
1254 # Only supported by Ninja build system currently.
1255 if("${CMAKE_GENERATOR}" MATCHES "Ninja" AND WITH_NINJA_POOL_JOBS)
1256   if(NOT NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS AND
1257      NOT NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS AND
1258      NOT NINJA_MAX_NUM_PARALLEL_LINK_JOBS)
1259     # Try to define good default values.
1260     # Max mem of heavy cpp files compilation: about 2.5GB
1261     # Max mem during linking: about 3.3GB
1262     cmake_host_system_information(RESULT _NUM_CORES QUERY NUMBER_OF_LOGICAL_CORES)
1263     # Note: this gives mem in MB.
1264     cmake_host_system_information(RESULT _TOT_MEM QUERY TOTAL_PHYSICAL_MEMORY)
1265
1266     # Heuristics... the more cores we have, the more free mem we have to keep for the non-heavy tasks too.
1267     if(${_TOT_MEM} LESS 8000 AND ${_NUM_CORES} GREATER 2)
1268       set(_compile_heavy_jobs "1")
1269     elseif(${_TOT_MEM} LESS 16000 AND ${_NUM_CORES} GREATER 4)
1270       set(_compile_heavy_jobs "2")
1271     elseif(${_TOT_MEM} LESS 24000 AND ${_NUM_CORES} GREATER 8)
1272       set(_compile_heavy_jobs "3")
1273     elseif(${_TOT_MEM} LESS 32000 AND ${_NUM_CORES} GREATER 16)
1274       set(_compile_heavy_jobs "4")
1275     elseif(${_TOT_MEM} LESS 64000 AND ${_NUM_CORES} GREATER 32)
1276       set(_compile_heavy_jobs "8")
1277     else()
1278       set(_compile_heavy_jobs "")
1279     endif()
1280
1281     set(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS "${_compile_heavy_jobs}" CACHE STRING
1282         "Define the maximum number of concurrent heavy compilation jobs, for ninja build system (used for some targets which cpp files can take several GB each during compilation)." FORCE)
1283     mark_as_advanced(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
1284     set(_compile_heavy_jobs)
1285
1286     # Only set regular compile jobs if we set heavy jobs, otherwise default (using all cores) if fine.
1287     if(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
1288       math(EXPR _compile_jobs "${_NUM_CORES} - 1")
1289     else()
1290       set(_compile_jobs "")
1291     endif()
1292     set(NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS "${_compile_jobs}" CACHE STRING
1293         "Define the maximum number of concurrent compilation jobs, for ninja build system." FORCE)
1294     mark_as_advanced(NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS)
1295     set(_compile_jobs)
1296
1297     # In practice, even when there is RAM available, this proves to be quicker than running in parallel
1298     # (due to slow disks accesses).
1299     set(NINJA_MAX_NUM_PARALLEL_LINK_JOBS "1" CACHE STRING
1300         "Define the maximum number of concurrent link jobs, for ninja build system." FORCE)
1301     mark_as_advanced(NINJA_MAX_NUM_PARALLEL_LINK_JOBS)
1302
1303     set(_NUM_CORES)
1304     set(_TOT_MEM)
1305   endif()
1306
1307   if(NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS)
1308     set_property(GLOBAL APPEND PROPERTY JOB_POOLS compile_job_pool=${NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS})
1309     set(CMAKE_JOB_POOL_COMPILE compile_job_pool)
1310   endif()
1311
1312   if(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
1313     set_property(GLOBAL APPEND PROPERTY JOB_POOLS compile_heavy_job_pool=${NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS})
1314   endif()
1315
1316   if(NINJA_MAX_NUM_PARALLEL_LINK_JOBS)
1317     set_property(GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool=${NINJA_MAX_NUM_PARALLEL_LINK_JOBS})
1318     set(CMAKE_JOB_POOL_LINK link_job_pool)
1319   endif()
1320 endif()
1321
1322 #-----------------------------------------------------------------------------
1323 # Extra compile flags
1324
1325 if(CMAKE_COMPILER_IS_GNUCC)
1326
1327   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1328   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
1329   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1330   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1331   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_VLA -Werror=vla)
1332   # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
1333   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
1334   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
1335   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1336   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1337   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
1338   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
1339   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
1340   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
1341   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
1342   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
1343   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
1344   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
1345   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
1346   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness)
1347   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_RESTRICT -Wrestrict)
1348
1349   # C-only.
1350   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)
1351   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ABSOLUTE_VALUE -Wabsolute-value)
1352
1353   # gcc 4.2 gives annoying warnings on every file with this
1354   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
1355     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
1356   endif()
1357
1358   # versions before gcc4.6 give many BLI_math warnings
1359   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
1360     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS       -Wredundant-decls)
1361     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
1362   endif()
1363
1364   # versions before gcc4.8 include global name-space.
1365   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.8")
1366     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_SHADOW -Wshadow)
1367   endif()
1368
1369   # disable because it gives warnings for printf() & friends.
1370   # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
1371
1372   if(NOT APPLE)
1373     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
1374   endif()
1375
1376   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1377   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
1378   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
1379   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
1380   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
1381   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
1382   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
1383   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
1384   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1385   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1386   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1387   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith)
1388   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter)
1389   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings)
1390   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
1391   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness)
1392   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_RESTRICT -Wrestrict)
1393
1394   # gcc 4.2 gives annoying warnings on every file with this
1395   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
1396     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
1397   endif()
1398
1399   # causes too many warnings
1400   if(NOT APPLE)
1401     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
1402     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
1403   endif()
1404
1405   # Use 'ATTR_FALLTHROUGH' macro to suppress.
1406   if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "7.0"))
1407     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_IMPLICIT_FALLTHROUGH -Wimplicit-fallthrough=5)
1408     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_IMPLICIT_FALLTHROUGH -Wimplicit-fallthrough=5)
1409   endif()
1410
1411   # flags to undo strict flags
1412   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
1413   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER        -Wno-unused-parameter)
1414   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION         -Wno-unused-function)
1415   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_TYPE_LIMITS             -Wno-type-limits)
1416   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INT_IN_BOOL_CONTEXT     -Wno-int-in-bool-context)
1417   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_FORMAT                  -Wno-format)
1418   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_SWITCH                  -Wno-switch)
1419
1420   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CLASS_MEMACCESS     -Wno-class-memaccess)
1421   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_COMMENT             -Wno-comment)
1422   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_TYPEDEFS     -Wno-unused-local-typedefs)
1423
1424   if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "7.0"))
1425     ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_IMPLICIT_FALLTHROUGH    -Wno-implicit-fallthrough)
1426   endif()
1427
1428   if(NOT APPLE)
1429     ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
1430   endif()
1431
1432 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1433
1434   # strange, clang complains these are not supported, but then uses them.
1435   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1436   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1437   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1438   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
1439   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1440   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1441   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
1442   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
1443   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
1444
1445   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1446   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
1447   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS     -Wno-unknown-pragmas)
1448   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS     -Wno-char-subscripts)
1449   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_OVERLOADED_VIRTUAL  -Wno-overloaded-virtual)  # we get a lot of these, if its a problem a dev needs to look into it.
1450   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE        -Wno-sign-compare)
1451   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF    -Wno-invalid-offsetof)
1452
1453   # gives too many unfixable warnings
1454   # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS      -Wunused-macros)
1455   # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS          -Wunused-macros)
1456
1457   # flags to undo strict flags
1458   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
1459   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_VARIABLE  -Wno-unused-variable)
1460   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS    -Wno-unused-macros)
1461
1462   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
1463   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
1464   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
1465   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
1466   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
1467   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
1468   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
1469   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
1470
1471   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
1472   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
1473   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
1474   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
1475   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
1476   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_COMMENT -Wno-comment)
1477   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_TYPEDEFS -Wno-unused-local-typedefs)
1478   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNDEFINED_VAR_TEMPLATE -Wno-undefined-var-template)
1479   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_INSTANTIATION_AFTER_SPECIALIZATION -Wno-instantiation-after-specialization)
1480
1481 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1482
1483   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1484   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
1485   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1486
1487   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1488   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
1489   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
1490
1491   # disable numbered, false positives
1492   set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556,858,597,177,1292,167,279,592,94,2722,3199")
1493   set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556,858,597,177,1292,167,279,592,94,2722,3199")
1494 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
1495   # most msvc warnings are C & C++
1496   set(_WARNINGS
1497     # warning level:
1498     "/W3"
1499     "/w34062"  # switch statement contains 'default' but no 'case' labels
1500     "/w34115"  # 'type' : named type definition in parentheses
1501     "/w34189"  # local variable is initialized but not referenced
1502     # disable:
1503     "/wd4018"  # signed/unsigned mismatch
1504     "/wd4146"  # unary minus operator applied to unsigned type, result still unsigned
1505     "/wd4065"  # switch statement contains 'default' but no 'case' labels
1506     "/wd4127"  # conditional expression is constant
1507     "/wd4181"  # qualifier applied to reference type; ignored
1508     "/wd4200"  # zero-sized array in struct/union
1509     "/wd4244"  # conversion from 'type1' to 'type2', possible loss of data
1510     "/wd4267"  # conversion from 'size_t' to 'type', possible loss of data
1511     "/wd4305"  # truncation from 'type1' to 'type2'
1512     "/wd4800"  # forcing value to bool 'true' or 'false'
1513     "/wd4828"  # The file contains a character that is illegal
1514     "/wd4996"  # identifier was declared deprecated
1515     "/wd4661"  # no suitable definition provided for explicit template instantiation request
1516     # errors:
1517     "/we4013"  # 'function' undefined; assuming extern returning int
1518     "/we4133"  # incompatible pointer types
1519     "/we4431"  # missing type specifier - int assumed
1520   )
1521
1522   if(MSVC_VERSION GREATER_EQUAL 1911)
1523     # see https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/c5038?view=vs-2017
1524     set(_WARNINGS "${_WARNINGS} /w35038") # order of initialization in c++ constructors
1525   endif()
1526
1527   string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
1528   set(C_WARNINGS "${_WARNINGS}")
1529   set(CXX_WARNINGS "${_WARNINGS}")
1530   unset(_WARNINGS)
1531 endif()
1532
1533 # ensure python header is found since detection can fail, this could happen
1534 # with _any_ library but since we used a fixed python version this tends to
1535 # be most problematic.
1536 if(WITH_PYTHON)
1537   if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
1538     message(FATAL_ERROR
1539       "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
1540       "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
1541       "to a valid python include path. Containing "
1542       "Python.h for python version \"${PYTHON_VERSION}\""
1543     )
1544   endif()
1545
1546   if(WIN32 OR APPLE)
1547     # Windows and macOS have this bundled with Python libraries.
1548   elseif((WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY) OR (WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE))
1549     if(("${PYTHON_NUMPY_PATH}" STREQUAL "") OR (${PYTHON_NUMPY_PATH} MATCHES NOTFOUND))
1550       find_python_package(numpy)
1551       unset(PYTHON_NUMPY_INCLUDE_DIRS CACHE)
1552       set(PYTHON_NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_PATH}/numpy/core/include CACHE PATH "Path to the include directory of the numpy module")
1553       mark_as_advanced(PYTHON_NUMPY_INCLUDE_DIRS)
1554     endif()
1555   endif()
1556
1557   if(WIN32 OR APPLE)
1558     # pass, we have this in lib/python/site-packages
1559   elseif(WITH_PYTHON_INSTALL_REQUESTS)
1560     find_python_package(requests)
1561   endif()
1562 endif()
1563
1564 if(MSVC)
1565   # MSVC needs to be tested first, since clang on windows will
1566   # match the compiler test below but clang-cl does not accept -std=c++11
1567   # since it is on by default and cannot be turned off.
1568   #
1569   # Nothing special is needed, C++11 features are available by default.
1570 elseif(
1571   CMAKE_COMPILER_IS_GNUCC OR
1572   CMAKE_C_COMPILER_ID MATCHES "Clang" OR
1573   CMAKE_C_COMPILER_ID MATCHES "Intel"
1574 )
1575   # TODO(sergey): Do we want c++11 or gnu-c++11 here?
1576   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
1577 else()
1578   message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++11 build")
1579 endif()
1580
1581 # Visual Studio has all standards it supports available by default
1582 # Clang on windows copies this behavior and does not support these switches
1583 if(
1584   CMAKE_COMPILER_IS_GNUCC OR
1585   (CMAKE_C_COMPILER_ID MATCHES "Clang" AND (NOT MSVC)) OR
1586   (CMAKE_C_COMPILER_ID MATCHES "Intel")
1587 )
1588   # Use C11 + GNU extensions, works with GCC, Clang, ICC
1589   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
1590 endif()
1591
1592 if(UNIX AND NOT APPLE)
1593   if(NOT WITH_CXX11_ABI)
1594     set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
1595   endif()
1596 endif()
1597
1598 # Include warnings first, so its possible to disable them with user defined flags
1599 # eg: -Wno-uninitialized
1600 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
1601 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
1602
1603 # defined above, platform specific but shared names
1604 mark_as_advanced(
1605   CYCLES_OSL
1606   OSL_LIB_EXEC
1607   OSL_COMPILER
1608   OSL_LIB_COMP
1609   OSL_LIB_QUERY
1610   OSL_INCLUDE_DIR
1611 )
1612
1613 mark_as_advanced(
1614   LLVM_CONFIG
1615   LLVM_ROOT_DIR
1616   LLVM_LIBRARY
1617   LLVM_VERSION
1618 )
1619
1620 #-------------------------------------------------------------------------------
1621 # Global Defines
1622
1623 # better not set includes here but this debugging option is off by default.
1624 if(WITH_CXX_GUARDEDALLOC)
1625   include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
1626   add_definitions(-DWITH_CXX_GUARDEDALLOC)
1627 endif()
1628
1629 if(WITH_ASSERT_ABORT)
1630   add_definitions(-DWITH_ASSERT_ABORT)
1631 endif()
1632
1633 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
1634 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
1635
1636 #-----------------------------------------------------------------------------
1637 # Libraries
1638
1639 if(WITH_GTESTS)
1640   include(GTestTesting)
1641 endif()
1642
1643 if(WITH_BLENDER)
1644   add_subdirectory(intern)
1645   add_subdirectory(extern)
1646
1647   # source after intern and extern to gather all
1648   # internal and external library information first, for test linking
1649   add_subdirectory(source)
1650 elseif(WITH_CYCLES_STANDALONE)
1651   add_subdirectory(intern/cycles)
1652   add_subdirectory(extern/clew)
1653   if(WITH_CUDA_DYNLOAD)
1654     add_subdirectory(extern/cuew)
1655   endif()
1656   if(NOT WITH_SYSTEM_GLEW)
1657     add_subdirectory(extern/glew)
1658   endif()
1659 endif()
1660
1661 #-----------------------------------------------------------------------------
1662 # Blender Application
1663 if(WITH_BLENDER)
1664   add_subdirectory(source/creator)
1665 endif()
1666
1667
1668 #-----------------------------------------------------------------------------
1669 # Testing
1670 add_subdirectory(tests)
1671
1672
1673 #-----------------------------------------------------------------------------
1674 # Define 'heavy' submodules (for Ninja builder when using pools).
1675 setup_heavy_lib_pool()
1676
1677
1678 #-----------------------------------------------------------------------------
1679 # CPack for generating packages
1680 include(build_files/cmake/packaging.cmake)
1681
1682 #-----------------------------------------------------------------------------
1683 # Use dynamic loading for OpenMP
1684 if(WITH_BLENDER)
1685   openmp_delayload(blender)
1686 endif()
1687
1688 #-----------------------------------------------------------------------------
1689 # Print Final Configuration
1690
1691 if(FIRST_RUN)
1692
1693   set(_config_msg "\nBlender Configuration\n=====================")
1694
1695   function(info_cfg_option
1696     _setting
1697     )
1698
1699     set(_msg "  - ${_setting}")
1700     string(LENGTH "${_msg}" _len)
1701     while("32" GREATER "${_len}")
1702       set(_msg "${_msg} ")
1703       math(EXPR _len "${_len} + 1")
1704     endwhile()
1705
1706     set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE)
1707   endfunction()
1708
1709   function(info_cfg_text
1710     _text
1711     )
1712
1713     set(_config_msg "${_config_msg}\n\n  ${_text}" PARENT_SCOPE)
1714   endfunction()
1715
1716   message(STATUS "C Compiler:   \"${CMAKE_C_COMPILER_ID}\"")
1717   message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
1718
1719   info_cfg_text("Build Options:")
1720   info_cfg_option(WITH_BULLET)
1721   info_cfg_option(WITH_IK_SOLVER)
1722   info_cfg_option(WITH_IK_ITASC)
1723   info_cfg_option(WITH_OPENCOLLADA)
1724   info_cfg_option(WITH_FFTW3)
1725   info_cfg_option(WITH_INTERNATIONAL)
1726   info_cfg_option(WITH_INPUT_NDOF)
1727   info_cfg_option(WITH_CYCLES)
1728   info_cfg_option(WITH_FREESTYLE)
1729   info_cfg_option(WITH_OPENCOLORIO)
1730   info_cfg_option(WITH_XR_OPENXR)
1731   info_cfg_option(WITH_OPENIMAGEDENOISE)
1732   info_cfg_option(WITH_OPENVDB)
1733   info_cfg_option(WITH_ALEMBIC)
1734   info_cfg_option(WITH_QUADRIFLOW)
1735   info_cfg_option(WITH_USD)
1736   info_cfg_option(WITH_TBB)
1737
1738   info_cfg_text("Compiler Options:")
1739   info_cfg_option(WITH_BUILDINFO)
1740   info_cfg_option(WITH_OPENMP)
1741
1742   info_cfg_text("System Options:")
1743   info_cfg_option(WITH_INSTALL_PORTABLE)
1744   info_cfg_option(WITH_X11_ALPHA)
1745   info_cfg_option(WITH_X11_XF86VMODE)
1746   info_cfg_option(WITH_X11_XFIXES)
1747   info_cfg_option(WITH_X11_XINPUT)
1748   info_cfg_option(WITH_MEM_JEMALLOC)
1749   info_cfg_option(WITH_MEM_VALGRIND)
1750   info_cfg_option(WITH_SYSTEM_GLEW)
1751
1752   info_cfg_text("Image Formats:")
1753   info_cfg_option(WITH_OPENIMAGEIO)
1754   info_cfg_option(WITH_IMAGE_CINEON)
1755   info_cfg_option(WITH_IMAGE_DDS)
1756   info_cfg_option(WITH_IMAGE_HDR)
1757   info_cfg_option(WITH_IMAGE_OPENEXR)
1758   info_cfg_option(WITH_IMAGE_OPENJPEG)
1759   info_cfg_option(WITH_IMAGE_TIFF)
1760
1761   info_cfg_text("Audio:")
1762   info_cfg_option(WITH_OPENAL)
1763   info_cfg_option(WITH_SDL)
1764   info_cfg_option(WITH_SDL_DYNLOAD)
1765   info_cfg_option(WITH_JACK)
1766   info_cfg_option(WITH_JACK_DYNLOAD)
1767   info_cfg_option(WITH_CODEC_AVI)
1768   info_cfg_option(WITH_CODEC_FFMPEG)
1769   info_cfg_option(WITH_CODEC_SNDFILE)
1770
1771   info_cfg_text("Compression:")
1772   info_cfg_option(WITH_LZMA)
1773   info_cfg_option(WITH_LZO)
1774
1775   info_cfg_text("Python:")
1776   info_cfg_option(WITH_PYTHON_INSTALL)
1777   info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
1778   info_cfg_option(WITH_PYTHON_MODULE)
1779   info_cfg_option(WITH_PYTHON_SAFETY)
1780   if(APPLE)
1781     info_cfg_option(WITH_PYTHON_FRAMEWORK)
1782   endif()
1783
1784   info_cfg_text("Modifiers:")
1785   info_cfg_option(WITH_MOD_REMESH)
1786   info_cfg_option(WITH_MOD_FLUID)
1787   info_cfg_option(WITH_MOD_OCEANSIM)
1788
1789   info_cfg_text("OpenGL:")
1790   info_cfg_option(WITH_GLEW_ES)
1791   info_cfg_option(WITH_GL_EGL)
1792   info_cfg_option(WITH_GL_PROFILE_ES20)
1793   if(WIN32)
1794     info_cfg_option(WITH_GL_ANGLE)
1795   endif()
1796
1797   info_cfg_text("")
1798
1799   message("${_config_msg}")
1800 endif()
1801
1802 if(0)
1803   print_all_vars()
1804 endif()