Cleanup: misc spelling fixes
[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 smoke, 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_FLUID           "Enable Elbeem Modifier (Fluid Simulation)" ON)
302 option(WITH_MOD_SMOKE           "Enable Smoke Modifier (Smoke Simulation)" ON)
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. (through 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, which 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       message(FATAL_ERROR "LibXi not found. Disable WITH_X11_XINPUT if you
856       want to build without tablet support")
857     endif()
858   endif()
859
860   if(WITH_X11_XF86VMODE)
861     # XXX, why doesn't cmake make this available?
862     find_library(X11_Xxf86vmode_LIB Xxf86vm   ${X11_LIB_SEARCH_PATH})
863     mark_as_advanced(X11_Xxf86vmode_LIB)
864     if(X11_Xxf86vmode_LIB)
865       list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
866     else()
867       message(FATAL_ERROR "libXxf86vm not found. Disable WITH_X11_XF86VMODE if you
868       want to build without")
869     endif()
870   endif()
871
872   if(WITH_X11_XFIXES)
873     if(X11_Xfixes_LIB)
874       list(APPEND PLATFORM_LINKLIBS ${X11_Xfixes_LIB})
875     else()
876       message(FATAL_ERROR "libXfixes not found. Disable WITH_X11_XFIXES if you
877       want to build without")
878     endif()
879   endif()
880
881   if(WITH_X11_ALPHA)
882     find_library(X11_Xrender_LIB Xrender  ${X11_LIB_SEARCH_PATH})
883     mark_as_advanced(X11_Xrender_LIB)
884     if(X11_Xrender_LIB)
885       list(APPEND PLATFORM_LINKLIBS ${X11_Xrender_LIB})
886     else()
887       message(FATAL_ERROR "libXrender not found. Disable WITH_X11_ALPHA if you
888       want to build without")
889     endif()
890   endif()
891
892 endif()
893
894
895 # ----------------------------------------------------------------------------
896 # Main Platform Checks
897 #
898 # - UNIX
899 # - WIN32
900 # - APPLE
901
902 if(UNIX AND NOT APPLE)
903   include(platform_unix)
904 elseif(WIN32)
905   include(platform_win32)
906 elseif(APPLE)
907   include(platform_apple)
908 endif()
909
910 #-----------------------------------------------------------------------------
911 # Common.
912
913 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
914   message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
915 endif()
916
917 if(WITH_CYCLES)
918   if(NOT WITH_OPENIMAGEIO)
919     message(FATAL_ERROR
920       "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. "
921       "Configure OIIO or disable WITH_CYCLES"
922     )
923   endif()
924   if(NOT WITH_BOOST)
925     message(FATAL_ERROR
926       "Cycles requires WITH_BOOST, the library may not have been found. "
927       "Configure BOOST or disable WITH_CYCLES"
928     )
929   endif()
930
931   if(WITH_CYCLES_OSL)
932     if(NOT WITH_LLVM)
933       message(FATAL_ERROR
934         "Cycles OSL requires WITH_LLVM, the library may not have been found. "
935         "Configure LLVM or disable WITH_CYCLES_OSL"
936       )
937     endif()
938   endif()
939 endif()
940
941 if(WITH_INTERNATIONAL)
942   if(NOT WITH_BOOST)
943     message(FATAL_ERROR
944       "Internationalization requires WITH_BOOST, the library may not have been found. "
945       "Configure BOOST or disable WITH_INTERNATIONAL"
946     )
947   endif()
948 endif()
949
950 # See TEST_SSE_SUPPORT() for how this is defined.
951
952 # Do it globally, SSE2 is required for quite some time now.
953 # Doing it now allows to use SSE/SSE2 in inline headers.
954 if(SUPPORT_SSE_BUILD)
955   set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
956   add_definitions(-D__SSE__ -D__MMX__)
957 endif()
958 if(SUPPORT_SSE2_BUILD)
959   set(PLATFORM_CFLAGS " ${PLATFORM_CFLAGS} ${COMPILER_SSE2_FLAG}")
960   add_definitions(-D__SSE2__)
961   if(NOT SUPPORT_SSE_BUILD) # don't double up
962     add_definitions(-D__MMX__)
963   endif()
964 endif()
965
966
967 # set the endian define
968 if(MSVC)
969   # for some reason this fails on msvc
970   add_definitions(-D__LITTLE_ENDIAN__)
971
972   # OSX-Note: as we do cross-compiling with specific set architecture,
973   # endianess-detection and auto-setting is counterproductive
974   # so we just set endianness according CMAKE_OSX_ARCHITECTURES
975
976 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
977   add_definitions(-D__LITTLE_ENDIAN__)
978 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)
979   add_definitions(-D__BIG_ENDIAN__)
980
981 else()
982   include(TestBigEndian)
983   test_big_endian(_SYSTEM_BIG_ENDIAN)
984   if(_SYSTEM_BIG_ENDIAN)
985     add_definitions(-D__BIG_ENDIAN__)
986   else()
987     add_definitions(-D__LITTLE_ENDIAN__)
988   endif()
989   unset(_SYSTEM_BIG_ENDIAN)
990 endif()
991 if(WITH_IMAGE_OPENJPEG)
992   # Special handling of Windows platform where openjpeg is always static.
993   if(WIN32)
994     set(OPENJPEG_DEFINES "-DOPJ_STATIC")
995   else()
996     set(OPENJPEG_DEFINES "")
997   endif()
998 endif()
999
1000 if(NOT WITH_SYSTEM_EIGEN3)
1001   set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
1002 endif()
1003
1004 #-----------------------------------------------------------------------------
1005 # Configure OpenGL.
1006
1007 find_package(OpenGL)
1008 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
1009
1010 if(WITH_OPENGL)
1011   add_definitions(-DWITH_OPENGL)
1012 endif()
1013
1014 if(WITH_SYSTEM_GLES)
1015   find_package_wrapper(OpenGLES)
1016 endif()
1017
1018 if(WITH_GL_PROFILE_ES20)
1019   if(WITH_SYSTEM_GLES)
1020     if(NOT OPENGLES_LIBRARY)
1021       message(FATAL_ERROR
1022         "Unable to find OpenGL ES libraries. "
1023         "Install them or disable WITH_SYSTEM_GLES."
1024       )
1025     endif()
1026
1027     list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
1028
1029   else()
1030     set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
1031     mark_as_advanced(OPENGLES_LIBRARY)
1032
1033     list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
1034
1035     if(NOT OPENGLES_LIBRARY)
1036       message(FATAL_ERROR
1037         "To compile WITH_GL_EGL you need to set OPENGLES_LIBRARY "
1038         "to the file path of an OpenGL ES 2.0 library."
1039       )
1040     endif()
1041
1042   endif()
1043
1044   if(WIN32)
1045     # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
1046
1047     set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
1048     mark_as_advanced(OPENGLES_DLL)
1049
1050     if(NOT OPENGLES_DLL)
1051       message(FATAL_ERROR
1052         "To compile WITH_GL_PROFILE_ES20 you need to set OPENGLES_DLL to the file "
1053         "path of an OpenGL ES 2.0 runtime dynamic link library (DLL)."
1054       )
1055     endif()
1056
1057     if(WITH_GL_ANGLE)
1058       list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
1059
1060       set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
1061
1062       get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
1063       list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
1064
1065       mark_as_advanced(D3DCOMPILER_DLL)
1066
1067       if(D3DCOMPILER_DLL STREQUAL "")
1068         message(FATAL_ERROR
1069           "To compile WITH_GL_ANGLE you need to set D3DCOMPILER_DLL to the file "
1070           "path of a copy of the DirectX redistributable DLL file: D3DCompiler_46.dll"
1071         )
1072       endif()
1073
1074     endif()
1075
1076   endif()
1077
1078 else()
1079   if(OpenGL_GL_PREFERENCE STREQUAL "LEGACY" AND OPENGL_gl_LIBRARY)
1080     list(APPEND BLENDER_GL_LIBRARIES ${OPENGL_gl_LIBRARY})
1081   else()
1082     list(APPEND BLENDER_GL_LIBRARIES ${OPENGL_opengl_LIBRARY} ${OPENGL_glx_LIBRARY})
1083   endif()
1084 endif()
1085
1086 if(WITH_GL_EGL)
1087   list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
1088
1089   if(WITH_SYSTEM_GLES)
1090     if(NOT OPENGLES_EGL_LIBRARY)
1091       message(FATAL_ERROR
1092         "Unable to find OpenGL ES libraries. "
1093         "Install them or disable WITH_SYSTEM_GLES."
1094       )
1095     endif()
1096
1097     list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
1098
1099   else()
1100     set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
1101     mark_as_advanced(OPENGLES_EGL_LIBRARY)
1102
1103     list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
1104
1105     if(NOT OPENGLES_EGL_LIBRARY)
1106       message(FATAL_ERROR
1107         "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY "
1108         "to the file path of an EGL library."
1109       )
1110     endif()
1111
1112   endif()
1113
1114   if(WIN32)
1115     # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
1116
1117     set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
1118     mark_as_advanced(OPENGLES_EGL_DLL)
1119
1120     if(NOT OPENGLES_EGL_DLL)
1121       message(FATAL_ERROR
1122         "To compile WITH_GL_EGL you need to set OPENGLES_EGL_DLL "
1123         "to the file path of an EGL runtime dynamic link library (DLL)."
1124       )
1125     endif()
1126
1127   endif()
1128
1129 endif()
1130
1131 if(WITH_GL_PROFILE_ES20)
1132   list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
1133 else()
1134   list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
1135 endif()
1136
1137 if(WITH_GL_EGL)
1138   list(APPEND GL_DEFINITIONS -DWITH_EGL)
1139 endif()
1140
1141 #-----------------------------------------------------------------------------
1142 # Configure OpenMP.
1143 if(WITH_OPENMP)
1144   if(NOT OPENMP_CUSTOM)
1145     find_package(OpenMP)
1146   endif()
1147
1148   if(OPENMP_FOUND)
1149     if(NOT WITH_OPENMP_STATIC)
1150       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
1151       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
1152     else()
1153       # Typically avoid adding flags as defines but we can't
1154       # pass OpenMP flags to the linker for static builds, meaning
1155       # we can't add any OpenMP related flags to CFLAGS variables
1156       # since they're passed to the linker as well.
1157       add_definitions("${OpenMP_C_FLAGS}")
1158
1159       find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
1160     endif()
1161   else()
1162     set(WITH_OPENMP OFF)
1163   endif()
1164
1165   mark_as_advanced(
1166     OpenMP_C_FLAGS
1167     OpenMP_CXX_FLAGS
1168   )
1169 endif()
1170
1171 #-----------------------------------------------------------------------------
1172 # Configure GLEW
1173
1174 if(WITH_SYSTEM_GLEW)
1175   find_package(GLEW)
1176
1177   # Note: There is an assumption here that the system GLEW is not a static library.
1178
1179   if(NOT GLEW_FOUND)
1180     message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
1181   endif()
1182
1183   set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
1184 else()
1185   if(WITH_GLEW_ES)
1186     set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
1187
1188     list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
1189
1190     # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
1191     if(WITH_GL_PROFILE_ES20)
1192       list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
1193     else()
1194       # No ES functions are needed
1195       list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
1196     endif()
1197
1198     if(WITH_GL_PROFILE_ES20)
1199       if(WITH_GL_EGL)
1200         list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
1201       endif()
1202
1203       # ToDo: This is an experiment to eliminate ES 1 symbols,
1204       # GLEW doesn't really properly provide this level of control
1205       # (for example, without modification it eliminates too many symbols)
1206       # so there are lots of modifications to GLEW to make this work,
1207       # and no attempt to make it work beyond Blender at this point.
1208       list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
1209     endif()
1210
1211     if(WITH_GL_EGL)
1212       list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
1213     endif()
1214
1215     set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
1216
1217   else()
1218     set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
1219
1220     list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
1221
1222     # This won't affect the non-experimental glew library,
1223     # but is used for conditional compilation elsewhere.
1224     list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
1225
1226     set(BLENDER_GLEW_LIBRARIES extern_glew)
1227
1228   endif()
1229
1230 endif()
1231
1232 list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
1233
1234 #-----------------------------------------------------------------------------
1235 # Configure Bullet
1236
1237 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
1238   find_package(Bullet)
1239   if(NOT BULLET_FOUND)
1240     set(WITH_BULLET OFF)
1241   endif()
1242 else()
1243   set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
1244   # set(BULLET_LIBRARIES "")
1245 endif()
1246
1247 #-----------------------------------------------------------------------------
1248 # Configure Python.
1249
1250 if(WITH_PYTHON_MODULE)
1251   add_definitions(-DPy_ENABLE_SHARED)
1252 endif()
1253
1254 #-----------------------------------------------------------------------------
1255 # Configure GLog/GFlags
1256
1257 if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
1258   if(WITH_SYSTEM_GFLAGS)
1259     find_package(Gflags)
1260     if(NOT GFLAGS_FOUND)
1261       message(FATAL_ERROR "System wide Gflags is requested but was not found")
1262     endif()
1263     # FindGflags does not define this, and we are not even sure what to use here.
1264     set(GFLAGS_DEFINES)
1265   else()
1266     set(GFLAGS_DEFINES
1267       -DGFLAGS_DLL_DEFINE_FLAG=
1268       -DGFLAGS_DLL_DECLARE_FLAG=
1269       -DGFLAGS_DLL_DECL=
1270     )
1271     set(GFLAGS_NAMESPACE "gflags")
1272     set(GFLAGS_LIBRARIES extern_gflags)
1273     set(GFLAGS_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/extern/gflags/src")
1274   endif()
1275
1276   if(WITH_SYSTEM_GLOG)
1277     find_package(Glog)
1278     if(NOT GLOG_FOUND)
1279       message(FATAL_ERROR "System wide Glog is requested but was not found")
1280     endif()
1281     # FindGlog does not define this, and we are not even sure what to use here.
1282     set(GLOG_DEFINES)
1283   else()
1284     set(GLOG_DEFINES
1285       -DGOOGLE_GLOG_DLL_DECL=
1286     )
1287     set(GLOG_LIBRARIES extern_glog)
1288     if(WIN32)
1289       set(GLOG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/glog/src/windows)
1290     else()
1291       set(GLOG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/glog/include)
1292     endif()
1293   endif()
1294 endif()
1295
1296 #-----------------------------------------------------------------------------
1297 # Configure Ceres
1298
1299 if(WITH_LIBMV)
1300   # We always have C++11 which includes unordered_map.
1301   set(CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
1302 endif()
1303
1304 #-----------------------------------------------------------------------------
1305 # Extra limits to number of jobs running in parallel for some kind os tasks.
1306 # Only supported by Ninja build system currently.
1307 if("${CMAKE_GENERATOR}" MATCHES "Ninja" AND WITH_NINJA_POOL_JOBS)
1308   if(NOT NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS AND
1309      NOT NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS AND
1310      NOT NINJA_MAX_NUM_PARALLEL_LINK_JOBS)
1311     # Try to define good default values.
1312     # Max mem of heavy cpp files compilation: about 2.5GB
1313     # Max mem during linking: about 3.3GB
1314     cmake_host_system_information(RESULT _NUM_CORES QUERY NUMBER_OF_LOGICAL_CORES)
1315     # Note: this gives mem in MB.
1316     cmake_host_system_information(RESULT _TOT_MEM QUERY TOTAL_PHYSICAL_MEMORY)
1317
1318     # Heuristics... the more cores we have, the more free mem we have to keep for the non-heavy tasks too.
1319     if(${_TOT_MEM} LESS 8000 AND ${_NUM_CORES} GREATER 2)
1320       set(_compile_heavy_jobs "1")
1321     elseif(${_TOT_MEM} LESS 16000 AND ${_NUM_CORES} GREATER 4)
1322       set(_compile_heavy_jobs "2")
1323     elseif(${_TOT_MEM} LESS 24000 AND ${_NUM_CORES} GREATER 8)
1324       set(_compile_heavy_jobs "3")
1325     elseif(${_TOT_MEM} LESS 32000 AND ${_NUM_CORES} GREATER 16)
1326       set(_compile_heavy_jobs "4")
1327     elseif(${_TOT_MEM} LESS 64000 AND ${_NUM_CORES} GREATER 32)
1328       set(_compile_heavy_jobs "8")
1329     else()
1330       set(_compile_heavy_jobs "")
1331     endif()
1332
1333     set(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS "${_compile_heavy_jobs}" CACHE STRING
1334         "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)
1335     mark_as_advanced(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
1336     set(_compile_heavy_jobs)
1337
1338     # Only set regular compile jobs if we set heavy jobs, otherwise default (using all cores) if fine.
1339     if(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
1340       math(EXPR _compile_jobs "${_NUM_CORES} - 1")
1341     else()
1342       set(_compile_jobs "")
1343     endif()
1344     set(NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS "${_compile_jobs}" CACHE STRING
1345         "Define the maximum number of concurrent compilation jobs, for ninja build system." FORCE)
1346     mark_as_advanced(NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS)
1347     set(_compile_jobs)
1348
1349     # In practice, even when there is RAM available, this proves to be quicker than running in parallel
1350     # (due to slow disks accesses).
1351     set(NINJA_MAX_NUM_PARALLEL_LINK_JOBS "1" CACHE STRING
1352         "Define the maximum number of concurrent link jobs, for ninja build system." FORCE)
1353     mark_as_advanced(NINJA_MAX_NUM_PARALLEL_LINK_JOBS)
1354
1355     set(_NUM_CORES)
1356     set(_TOT_MEM)
1357   endif()
1358
1359   if(NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS)
1360     set_property(GLOBAL APPEND PROPERTY JOB_POOLS compile_job_pool=${NINJA_MAX_NUM_PARALLEL_COMPILE_JOBS})
1361     set(CMAKE_JOB_POOL_COMPILE compile_job_pool)
1362   endif()
1363
1364   if(NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS)
1365     set_property(GLOBAL APPEND PROPERTY JOB_POOLS compile_heavy_job_pool=${NINJA_MAX_NUM_PARALLEL_COMPILE_HEAVY_JOBS})
1366   endif()
1367
1368   if(NINJA_MAX_NUM_PARALLEL_LINK_JOBS)
1369     set_property(GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool=${NINJA_MAX_NUM_PARALLEL_LINK_JOBS})
1370     set(CMAKE_JOB_POOL_LINK link_job_pool)
1371   endif()
1372 endif()
1373
1374 #-----------------------------------------------------------------------------
1375 # Extra compile flags
1376
1377 if(CMAKE_COMPILER_IS_GNUCC)
1378
1379   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1380   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
1381   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1382   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1383   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_VLA -Werror=vla)
1384   # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
1385   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
1386   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
1387   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1388   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1389   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
1390   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
1391   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
1392   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
1393   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
1394   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
1395   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)  # C only
1396   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
1397   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
1398   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
1399   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness)
1400   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_RESTRICT -Wrestrict)
1401
1402   # gcc 4.2 gives annoying warnings on every file with this
1403   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
1404     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
1405   endif()
1406
1407   # versions before gcc4.6 give many BLI_math warnings
1408   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
1409     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS       -Wredundant-decls)
1410     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
1411   endif()
1412
1413   # versions before gcc4.8 include global name-space.
1414   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.8")
1415     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_SHADOW -Wshadow)
1416   endif()
1417
1418   # disable because it gives warnings for printf() & friends.
1419   # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
1420
1421   if(NOT APPLE)
1422     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
1423   endif()
1424
1425   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1426   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
1427   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
1428   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
1429   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
1430   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
1431   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
1432   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
1433   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1434   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1435   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1436   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1437   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith)
1438   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter)
1439   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings)
1440   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
1441   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness)
1442   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_RESTRICT -Wrestrict)
1443
1444   # gcc 4.2 gives annoying warnings on every file with this
1445   if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
1446     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
1447   endif()
1448
1449   # causes too many warnings
1450   if(NOT APPLE)
1451     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
1452     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
1453   endif()
1454
1455   # Use 'ATTR_FALLTHROUGH' macro to suppress.
1456   if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "7.0"))
1457     ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_IMPLICIT_FALLTHROUGH -Wimplicit-fallthrough=5)
1458     ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_IMPLICIT_FALLTHROUGH -Wimplicit-fallthrough=5)
1459   endif()
1460
1461   # flags to undo strict flags
1462   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
1463   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER        -Wno-unused-parameter)
1464   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION         -Wno-unused-function)
1465   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_TYPE_LIMITS             -Wno-type-limits)
1466   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INT_IN_BOOL_CONTEXT     -Wno-int-in-bool-context)
1467   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_FORMAT                  -Wno-format)
1468   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_SWITCH                  -Wno-switch)
1469
1470   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CLASS_MEMACCESS     -Wno-class-memaccess)
1471   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_COMMENT             -Wno-comment)
1472   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_TYPEDEFS     -Wno-unused-local-typedefs)
1473
1474   if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "7.0"))
1475     ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_IMPLICIT_FALLTHROUGH    -Wno-implicit-fallthrough)
1476   endif()
1477
1478   if(NOT APPLE)
1479     ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
1480   endif()
1481
1482 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1483
1484   # strange, clang complains these are not supported, but then uses them.
1485   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1486   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1487   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1488   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
1489   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1490   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1491   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
1492   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
1493   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
1494
1495   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1496   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
1497   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS     -Wno-unknown-pragmas)
1498   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS     -Wno-char-subscripts)
1499   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.
1500   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE        -Wno-sign-compare)
1501   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF    -Wno-invalid-offsetof)
1502
1503   # gives too many unfixable warnings
1504   # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS      -Wunused-macros)
1505   # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS          -Wunused-macros)
1506
1507   # flags to undo strict flags
1508   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
1509   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS    -Wno-unused-macros)
1510
1511   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
1512   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
1513   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
1514   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
1515   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
1516   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
1517   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
1518   ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
1519
1520   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
1521   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
1522   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
1523   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
1524   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
1525   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_COMMENT -Wno-comment)
1526   ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_TYPEDEFS -Wno-unused-local-typedefs)
1527
1528 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1529
1530   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1531   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
1532   ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1533
1534   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1535   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
1536   ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
1537
1538   # disable numbered, false positives
1539   set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556,858,597,177,1292,167,279,592,94,2722,3199")
1540   set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556,858,597,177,1292,167,279,592,94,2722,3199")
1541 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
1542   # most msvc warnings are C & C++
1543   set(_WARNINGS
1544     # warning level:
1545     "/W3"
1546     "/w34062"  # switch statement contains 'default' but no 'case' labels
1547     "/w34115"  # 'type' : named type definition in parentheses
1548     "/w34189"  # local variable is initialized but not referenced
1549     # disable:
1550     "/wd4018"  # signed/unsigned mismatch
1551     "/wd4146"  # unary minus operator applied to unsigned type, result still unsigned
1552     "/wd4065"  # switch statement contains 'default' but no 'case' labels
1553     "/wd4127"  # conditional expression is constant
1554     "/wd4181"  # qualifier applied to reference type; ignored
1555     "/wd4200"  # zero-sized array in struct/union
1556     "/wd4244"  # conversion from 'type1' to 'type2', possible loss of data
1557     "/wd4267"  # conversion from 'size_t' to 'type', possible loss of data
1558     "/wd4305"  # truncation from 'type1' to 'type2'
1559     "/wd4800"  # forcing value to bool 'true' or 'false'
1560     "/wd4828"  # The file contains a character that is illegal
1561     "/wd4996"  # identifier was declared deprecated
1562     "/wd4661"  # no suitable definition provided for explicit template instantiation request
1563     # errors:
1564     "/we4013"  # 'function' undefined; assuming extern returning int
1565     "/we4133"  # incompatible pointer types
1566     "/we4431"  # missing type specifier - int assumed
1567   )
1568
1569   if(MSVC_VERSION GREATER_EQUAL 1911)
1570     # see https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/c5038?view=vs-2017
1571     set(_WARNINGS "${_WARNINGS} /w35038") #order of initialisation in c++ constructors
1572   endif()
1573
1574   string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
1575   set(C_WARNINGS "${_WARNINGS}")
1576   set(CXX_WARNINGS "${_WARNINGS}")
1577   unset(_WARNINGS)
1578 endif()
1579
1580 # ensure python header is found since detection can fail, this could happen
1581 # with _any_ library but since we used a fixed python version this tends to
1582 # be most problematic.
1583 if(WITH_PYTHON)
1584   if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
1585     message(FATAL_ERROR
1586       "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
1587       "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
1588       "to a valid python include path. Containing "
1589       "Python.h for python version \"${PYTHON_VERSION}\""
1590     )
1591   endif()
1592
1593   if(WIN32 OR APPLE)
1594     # Windows and macOS have this bundled with Python libraries.
1595   elseif((WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY) OR (WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE))
1596     if(("${PYTHON_NUMPY_PATH}" STREQUAL "") OR (${PYTHON_NUMPY_PATH} MATCHES NOTFOUND))
1597       find_python_package(numpy)
1598       unset(PYTHON_NUMPY_INCLUDE_DIRS CACHE)
1599       set(PYTHON_NUMPY_INCLUDE_DIRS ${PYTHON_NUMPY_PATH}/numpy/core/include CACHE PATH "Path to the include directory of the numpy module")
1600       mark_as_advanced(PYTHON_NUMPY_INCLUDE_DIRS)
1601     endif()
1602   endif()
1603
1604   if(WIN32 OR APPLE)
1605     # pass, we have this in lib/python/site-packages
1606   elseif(WITH_PYTHON_INSTALL_REQUESTS)
1607     find_python_package(requests)
1608   endif()
1609 endif()
1610
1611 if(
1612   CMAKE_COMPILER_IS_GNUCC OR
1613   CMAKE_C_COMPILER_ID MATCHES "Clang" OR
1614   CMAKE_C_COMPILER_ID MATCHES "Intel"
1615 )
1616   # TODO(sergey): Do we want c++11 or gnu-c++11 here?
1617   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
1618 elseif(MSVC)
1619   # Nothing special is needed, C++11 features are available by default.
1620 else()
1621   message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++11 build")
1622 endif()
1623
1624 # Visual Studio has all standards it supports available by default
1625 # Clang on windows copies this behavior and does not support these switches
1626 if(
1627   CMAKE_COMPILER_IS_GNUCC OR
1628   (CMAKE_C_COMPILER_ID MATCHES "Clang" AND (NOT MSVC)) OR
1629   (CMAKE_C_COMPILER_ID MATCHES "Intel")
1630 )
1631   # Use C11 + GNU extensions, works with GCC, Clang, ICC
1632   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
1633 endif()
1634
1635 # Include warnings first, so its possible to disable them with user defined flags
1636 # eg: -Wno-uninitialized
1637 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
1638 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
1639
1640 # defined above, platform specific but shared names
1641 mark_as_advanced(
1642   CYCLES_OSL
1643   OSL_LIB_EXEC
1644   OSL_COMPILER
1645   OSL_LIB_COMP
1646   OSL_LIB_QUERY
1647   OSL_INCLUDE_DIR
1648 )
1649
1650 mark_as_advanced(
1651   LLVM_CONFIG
1652   LLVM_ROOT_DIR
1653   LLVM_LIBRARY
1654   LLVM_VERSION
1655 )
1656
1657 #-------------------------------------------------------------------------------
1658 # Global Defines
1659
1660 # better not set includes here but this debugging option is off by default.
1661 if(WITH_CXX_GUARDEDALLOC)
1662   include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
1663   add_definitions(-DWITH_CXX_GUARDEDALLOC)
1664 endif()
1665
1666 if(WITH_ASSERT_ABORT)
1667   add_definitions(-DWITH_ASSERT_ABORT)
1668 endif()
1669
1670 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
1671 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
1672
1673 #-----------------------------------------------------------------------------
1674 # Libraries
1675
1676 if(WITH_GTESTS)
1677   include(GTestTesting)
1678 endif()
1679
1680 if(WITH_BLENDER)
1681   add_subdirectory(intern)
1682   add_subdirectory(extern)
1683
1684   # source after intern and extern to gather all
1685   # internal and external library information first, for test linking
1686   add_subdirectory(source)
1687 elseif(WITH_CYCLES_STANDALONE)
1688   add_subdirectory(intern/cycles)
1689   add_subdirectory(extern/clew)
1690   if(WITH_CUDA_DYNLOAD)
1691     add_subdirectory(extern/cuew)
1692   endif()
1693   if(NOT WITH_SYSTEM_GLEW)
1694     add_subdirectory(extern/glew)
1695   endif()
1696 endif()
1697
1698 #-----------------------------------------------------------------------------
1699 # Blender Application
1700 if(WITH_BLENDER)
1701   add_subdirectory(source/creator)
1702 endif()
1703
1704
1705 #-----------------------------------------------------------------------------
1706 # Testing
1707 add_subdirectory(tests)
1708
1709
1710 #-----------------------------------------------------------------------------
1711 # Define 'heavy' submodules (for Ninja builder when using pools).
1712 setup_heavy_lib_pool()
1713
1714
1715 #-----------------------------------------------------------------------------
1716 # CPack for generating packages
1717 include(build_files/cmake/packaging.cmake)
1718
1719 #-----------------------------------------------------------------------------
1720 # Use dynamic loading for OpenMP
1721 if(WITH_BLENDER)
1722   openmp_delayload(blender)
1723 endif()
1724
1725 #-----------------------------------------------------------------------------
1726 # Print Final Configuration
1727
1728 if(FIRST_RUN)
1729
1730   set(_config_msg "\nBlender Configuration\n=====================")
1731
1732   function(info_cfg_option
1733     _setting
1734     )
1735
1736     set(_msg "  - ${_setting}")
1737     string(LENGTH "${_msg}" _len)
1738     while("32" GREATER "${_len}")
1739       set(_msg "${_msg} ")
1740       math(EXPR _len "${_len} + 1")
1741     endwhile()
1742
1743     set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE)
1744   endfunction()
1745
1746   function(info_cfg_text
1747     _text
1748     )
1749
1750     set(_config_msg "${_config_msg}\n\n  ${_text}" PARENT_SCOPE)
1751   endfunction()
1752
1753   message(STATUS "C Compiler:   \"${CMAKE_C_COMPILER_ID}\"")
1754   message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
1755
1756   info_cfg_text("Build Options:")
1757   info_cfg_option(WITH_BULLET)
1758   info_cfg_option(WITH_IK_SOLVER)
1759   info_cfg_option(WITH_IK_ITASC)
1760   info_cfg_option(WITH_OPENCOLLADA)
1761   info_cfg_option(WITH_FFTW3)
1762   info_cfg_option(WITH_INTERNATIONAL)
1763   info_cfg_option(WITH_INPUT_NDOF)
1764   info_cfg_option(WITH_CYCLES)
1765   info_cfg_option(WITH_FREESTYLE)
1766   info_cfg_option(WITH_OPENCOLORIO)
1767   info_cfg_option(WITH_OPENVDB)
1768   info_cfg_option(WITH_ALEMBIC)
1769
1770   info_cfg_text("Compiler Options:")
1771   info_cfg_option(WITH_BUILDINFO)
1772   info_cfg_option(WITH_OPENMP)
1773   info_cfg_option(WITH_RAYOPTIMIZATION)
1774
1775   info_cfg_text("System Options:")
1776   info_cfg_option(WITH_INSTALL_PORTABLE)
1777   info_cfg_option(WITH_X11_ALPHA)
1778   info_cfg_option(WITH_X11_XF86VMODE)
1779   info_cfg_option(WITH_X11_XFIXES)
1780   info_cfg_option(WITH_X11_XINPUT)
1781   info_cfg_option(WITH_MEM_JEMALLOC)
1782   info_cfg_option(WITH_MEM_VALGRIND)
1783   info_cfg_option(WITH_SYSTEM_GLEW)
1784
1785   info_cfg_text("Image Formats:")
1786   info_cfg_option(WITH_OPENIMAGEIO)
1787   info_cfg_option(WITH_IMAGE_CINEON)
1788   info_cfg_option(WITH_IMAGE_DDS)
1789   info_cfg_option(WITH_IMAGE_HDR)
1790   info_cfg_option(WITH_IMAGE_OPENEXR)
1791   info_cfg_option(WITH_IMAGE_OPENJPEG)
1792   info_cfg_option(WITH_IMAGE_TIFF)
1793
1794   info_cfg_text("Audio:")
1795   info_cfg_option(WITH_OPENAL)
1796   info_cfg_option(WITH_SDL)
1797   info_cfg_option(WITH_SDL_DYNLOAD)
1798   info_cfg_option(WITH_JACK)
1799   info_cfg_option(WITH_JACK_DYNLOAD)
1800   info_cfg_option(WITH_CODEC_AVI)
1801   info_cfg_option(WITH_CODEC_FFMPEG)
1802   info_cfg_option(WITH_CODEC_SNDFILE)
1803
1804   info_cfg_text("Compression:")
1805   info_cfg_option(WITH_LZMA)
1806   info_cfg_option(WITH_LZO)
1807
1808   info_cfg_text("Python:")
1809   info_cfg_option(WITH_PYTHON_INSTALL)
1810   info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
1811   info_cfg_option(WITH_PYTHON_MODULE)
1812   info_cfg_option(WITH_PYTHON_SAFETY)
1813   if(APPLE)
1814     info_cfg_option(WITH_PYTHON_FRAMEWORK)
1815   endif()
1816
1817   info_cfg_text("Modifiers:")
1818   info_cfg_option(WITH_MOD_REMESH)
1819   info_cfg_option(WITH_MOD_FLUID)
1820   info_cfg_option(WITH_MOD_OCEANSIM)
1821
1822   info_cfg_text("OpenGL:")
1823   info_cfg_option(WITH_GLEW_ES)
1824   info_cfg_option(WITH_GL_EGL)
1825   info_cfg_option(WITH_GL_PROFILE_ES20)
1826   if(WIN32)
1827     info_cfg_option(WITH_GL_ANGLE)
1828   endif()
1829
1830   info_cfg_text("")
1831
1832   message("${_config_msg}")
1833 endif()
1834
1835 if(0)
1836   print_all_vars()
1837 endif()