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