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