Cycles microdisplacement: Support for Catmull-Clark subdivision via OpenSubdiv
[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 # The Original Code is: all of this file.
21 #
22 # Contributor(s): Jacques Beaurain.
23 #
24 # ***** END GPL LICENSE BLOCK *****
25
26 #-----------------------------------------------------------------------------
27 # We don't allow in-source builds. This causes no end of troubles because
28 # all out-of-source builds will use the CMakeCache.txt file there and even
29 # build the libs and objects in it.
30
31 if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
32         if(NOT DEFINED WITH_IN_SOURCE_BUILD)
33                 message(FATAL_ERROR
34                         "CMake generation for blender is not allowed within the source directory!"
35                         "\n Remove the CMakeCache.txt file and try again from another folder, e.g.:"
36                         "\n "
37                         "\n rm CMakeCache.txt"
38                         "\n cd .."
39                         "\n mkdir cmake-make"
40                         "\n cd cmake-make"
41                         "\n cmake ../blender"
42                         "\n "
43                         "\n Alternately define WITH_IN_SOURCE_BUILD to force this option (not recommended!)"
44                 )
45         endif()
46 endif()
47
48 cmake_minimum_required(VERSION 2.8)
49
50 if(NOT EXECUTABLE_OUTPUT_PATH)
51         set(FIRST_RUN TRUE)
52 else()
53         set(FIRST_RUN FALSE)
54 endif()
55
56 # this starts out unset
57 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
58
59 # avoid having empty buildtype
60 set(CMAKE_BUILD_TYPE_INIT "Release")
61
62 # quiet output for Makefiles, 'make -s' helps too
63 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
64
65 # global compile definitions since add_definitions() adds for all.
66
67 if(NOT (${CMAKE_VERSION} VERSION_LESS 3.0))
68         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
69                 $<$<CONFIG:Debug>:DEBUG;_DEBUG>
70                 $<$<CONFIG:Release>:NDEBUG>
71                 $<$<CONFIG:MinSizeRel>:NDEBUG>
72                 $<$<CONFIG:RelWithDebInfo>:NDEBUG>
73         )
74 else()
75         # keep until CMake-3.0 is min requirement
76         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG           DEBUG _DEBUG)
77         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE         NDEBUG)
78         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL      NDEBUG)
79         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO  NDEBUG)
80 endif()
81
82 #-----------------------------------------------------------------------------
83 # Set policy
84
85 # see "cmake --help-policy CMP0003"
86 # So library linking is more sane
87 cmake_policy(SET CMP0003 NEW)
88
89 # So BUILDINFO and BLENDERPATH strings are automatically quoted
90 cmake_policy(SET CMP0005 NEW)
91
92 # So syntax problems are errors
93 cmake_policy(SET CMP0010 NEW)
94
95 # Input directories must have CMakeLists.txt
96 cmake_policy(SET CMP0014 NEW)
97
98 #-----------------------------------------------------------------------------
99 # Load some macros.
100 include(build_files/cmake/macros.cmake)
101
102
103 #-----------------------------------------------------------------------------
104 # Initialize project.
105
106 blender_project_hack_pre()
107
108 project(Blender)
109
110 blender_project_hack_post()
111
112 enable_testing()
113
114 #-----------------------------------------------------------------------------
115 # Redirect output files
116
117 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
118 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
119 set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests CACHE INTERNAL "" FORCE)
120
121 #-----------------------------------------------------------------------------
122 # Set default config options
123
124 get_blender_version()
125
126
127 #-----------------------------------------------------------------------------
128 # Platform Specific Defaults
129
130 # list of var-names
131 set(_init_vars)
132
133 # initialize to ON
134 macro(option_defaults_init)
135         foreach(_var ${ARGV})
136                 set(${_var} ON)
137                 list(APPEND _init_vars "${_var}")
138         endforeach()
139         unset(_var)
140 endmacro()
141
142 # remove from namespace
143 macro(option_defaults_clear)
144         foreach(_var ${_init_vars})
145                 unset(${_var})
146         endforeach()
147         unset(_var)
148         unset(_init_vars)
149 endmacro()
150
151
152 # values to initialize WITH_****
153 option_defaults_init(
154         _init_BUILDINFO
155         _init_CODEC_FFMPEG
156         _init_CYCLES_OSL
157         _init_IMAGE_OPENEXR
158         _init_INPUT_NDOF
159         _init_JACK
160         _init_OPENCOLLADA
161         _init_OPENCOLORIO
162         _init_SDL
163         _init_FFTW3
164         _init_GAMEENGINE
165         _init_OPENSUBDIV
166 )
167
168 # customize...
169 if(UNIX AND NOT APPLE)
170         # some of these libraries are problematic on Linux
171         # disable less important dependencies by default
172         set(_init_CODEC_FFMPEG                   OFF)
173         set(_init_CYCLES_OSL                     OFF)
174         set(_init_IMAGE_OPENEXR                  OFF)
175         set(_init_JACK                           OFF)
176         set(_init_OPENCOLLADA                    OFF)
177         set(_init_OPENCOLORIO                    OFF)
178         set(_init_SDL                            OFF)
179         set(_init_FFTW3                          OFF)
180         set(_init_OPENSUBDIV                     OFF)
181 elseif(WIN32)
182         set(_init_JACK                           OFF)
183 elseif(APPLE)
184         set(_init_JACK                           OFF)
185         set(_init_OPENSUBDIV                     OFF)
186 endif()
187
188
189 #-----------------------------------------------------------------------------
190 # Options
191
192 # First platform spesific non-cached vars
193 if(UNIX AND NOT APPLE)
194         set(WITH_X11 ON)
195 endif()
196
197 # Blender internal features
198 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
199 mark_as_advanced(WITH_BLENDER)
200
201 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
202
203 option(WITH_PYTHON        "Enable Embedded Python API  (only disable for development)" ON)
204 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON) 
205 mark_as_advanced(WITH_PYTHON)  # dont want people disabling this unless they really know what they are doing.
206 mark_as_advanced(WITH_PYTHON_SECURITY)  # some distributions see this as a security issue, rather than have them patch it, make a build option.
207
208 option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency, only enable for development)." OFF)
209 mark_as_advanced(WITH_PYTHON_SAFETY)
210 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)
211 if(APPLE)
212         option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
213 endif()
214
215 option(WITH_BUILDINFO     "Include extra build details (only disable for development & faster builds)" ${_init_BUILDINFO})
216 if(${CMAKE_VERSION} VERSION_LESS 2.8.8)
217         # add_library OBJECT arg unsupported
218         set(WITH_BUILDINFO OFF)
219 endif()
220 set(BUILDINFO_OVERRIDE_DATE "" CACHE STRING "Use instead of the current date for reproducable builds (empty string disables this option)")
221 set(BUILDINFO_OVERRIDE_TIME "" CACHE STRING "Use instead of the current time for reproducable builds (empty string disables this option)")
222 mark_as_advanced(BUILDINFO_OVERRIDE_DATE)
223 mark_as_advanced(BUILDINFO_OVERRIDE_TIME)
224
225 option(WITH_IK_ITASC      "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
226 option(WITH_IK_SOLVER     "Enable Legacy IK solver (only disable for development)" ON)
227 option(WITH_FFTW3         "Enable FFTW3 support (Used for smoke and audio effects)" ${_init_FFTW3})
228 option(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
229 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
230 mark_as_advanced(WITH_SYSTEM_BULLET)
231 option(WITH_GAMEENGINE    "Enable Game Engine" ${_init_GAMEENGINE})
232 if(APPLE)
233         set(WITH_GAMEENGINE_DECKLINK OFF)
234 else()
235         option(WITH_GAMEENGINE_DECKLINK "Support BlackMagicDesign DeckLink cards in the Game Engine" ON)
236 endif()
237 option(WITH_PLAYER        "Build Player" OFF)
238 option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
239
240 # Compositor
241 option(WITH_COMPOSITOR         "Enable the tile based nodal compositor" ON)
242
243 option(WITH_OPENSUBDIV    "Enable OpenSubdiv for surface subdivision" _init_OPENSUBDIV)
244
245 option(WITH_OPENVDB       "Enable features relying on OpenVDB" OFF)
246 option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" OFF)
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_ALPHA     "Enable X11 transparent background"                     ON)
282 endif()
283
284 if(UNIX AND NOT APPLE)
285         option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
286         option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system"           ON)
287 else()
288         # not an option for other OS's
289         set(WITH_SYSTEM_GLEW OFF)
290         set(WITH_SYSTEM_GLES OFF)
291 endif()
292
293
294 # (unix defaults to System OpenJPEG On)
295 option(WITH_SYSTEM_OPENJPEG "Use the operating systems OpenJPEG library" OFF)
296
297 if(UNIX AND NOT APPLE)
298         option(WITH_SYSTEM_EIGEN3 "Use the systems Eigen3 library" OFF)
299 endif()
300
301
302 # Modifiers
303 option(WITH_MOD_FLUID           "Enable Elbeem Modifier (Fluid Simulation)" ON)
304 option(WITH_MOD_SMOKE           "Enable Smoke Modifier (Smoke Simulation)" ON)
305 option(WITH_MOD_BOOLEAN         "Enable Boolean Modifier" ON)
306 option(WITH_MOD_REMESH          "Enable Remesh Modifier" ON)
307 # option(WITH_MOD_CLOTH_ELTOPO    "Enable Experimental cloth solver" OFF)  # this is now only available in a branch
308 # mark_as_advanced(WITH_MOD_CLOTH_ELTOPO)
309 option(WITH_MOD_OCEANSIM        "Enable Ocean Modifier" OFF)
310
311 # Image format support
312 option(WITH_OPENIMAGEIO         "Enable OpenImageIO Support (http://www.openimageio.org)" ON)
313 option(WITH_IMAGE_OPENEXR       "Enable OpenEXR Support (http://www.openexr.com)" ${_init_IMAGE_OPENEXR})
314 option(WITH_IMAGE_OPENJPEG      "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
315 option(WITH_IMAGE_TIFF          "Enable LibTIFF Support" ON)
316 option(WITH_IMAGE_DDS           "Enable DDS Image Support" ON)
317 option(WITH_IMAGE_CINEON        "Enable CINEON and DPX Image Support" ON)
318 option(WITH_IMAGE_HDR           "Enable HDR Image Support" ON)
319 option(WITH_IMAGE_FRAMESERVER   "Enable image FrameServer Support for rendering" ON)
320
321 # Audio/Video format support
322 option(WITH_CODEC_AVI           "Enable Blenders own AVI file support (raw/jpeg)" ON)
323 option(WITH_CODEC_FFMPEG        "Enable FFMPeg Support (http://ffmpeg.org)" ${_init_CODEC_FFMPEG})
324 option(WITH_CODEC_SNDFILE       "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF)
325
326 # Alembic support
327 option(WITH_ALEMBIC             "Enable Alembic Support" OFF)
328 option(WITH_ALEMBIC_HDF5        "Enable Legacy Alembic Support (not officially supported)" OFF)
329
330 if(APPLE)
331         option(WITH_CODEC_QUICKTIME     "Enable Quicktime Support" ON)
332 endif()
333
334 # 3D format support
335 # Disable opencollada when we don't have precompiled libs
336 option(WITH_OPENCOLLADA   "Enable OpenCollada Support (http://www.opencollada.org)" ${_init_OPENCOLLADA})
337
338 # Sound output
339 option(WITH_SDL           "Enable SDL for sound and joystick support" ${_init_SDL})
340 option(WITH_OPENAL        "Enable OpenAL Support (http://www.openal.org)" ON)
341 option(WITH_JACK          "Enable Jack Support (http://www.jackaudio.org)" ${_init_JACK})
342 if(UNIX AND NOT APPLE)
343         option(WITH_JACK_DYNLOAD  "Enable runtime dynamic Jack libraries loading" OFF)
344 endif()
345 if(UNIX AND NOT APPLE)
346         option(WITH_SDL_DYNLOAD  "Enable runtime dynamic SDL libraries loading" OFF)
347 endif()
348
349 # Compression
350 option(WITH_LZO           "Enable fast LZO compression (used for pointcache)" ON)
351 option(WITH_LZMA          "Enable best LZMA compression, (used for pointcache)" ON)
352 if(UNIX AND NOT APPLE)
353         option(WITH_SYSTEM_LZO    "Use the system LZO library" OFF)
354 endif()
355
356 # Camera/motion tracking
357 option(WITH_LIBMV         "Enable Libmv structure from motion library" ON)
358 option(WITH_LIBMV_SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." OFF)
359 mark_as_advanced(WITH_LIBMV_SCHUR_SPECIALIZATIONS)
360
361 # Freestyle
362 option(WITH_FREESTYLE     "Enable Freestyle (advanced edges rendering)" ON)
363
364 # Misc
365 if(WIN32)
366         option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
367 endif()
368 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ${_init_INPUT_NDOF})
369 option(WITH_RAYOPTIMIZATION     "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
370 if(UNIX AND NOT APPLE)
371         option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
372         option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
373         if(WITH_STATIC_LIBS)
374                 option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
375                 mark_as_advanced(WITH_BOOST_ICU)
376         endif()
377 endif()
378
379 option(WITH_PYTHON_INSTALL       "Copy system python into the blender install folder" ON)
380 if(WITH_PYTHON_INSTALL)
381         option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder"  ON)
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
385         if(UNIX AND NOT APPLE)
386                 option(WITH_PYTHON_INSTALL_REQUESTS "Copy system requests into the blender install folder" ON)
387                 set(PYTHON_REQUESTS_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'requests' module")
388                 mark_as_advanced(PYTHON_REQUESTS_PATH)
389         endif()
390 endif()
391
392 option(WITH_CPU_SSE              "Enable SIMD instruction if they're detected on the host machine" ON)
393 mark_as_advanced(WITH_CPU_SSE)
394
395 # Cycles
396 option(WITH_CYCLES                                      "Enable Cycles Render Engine" ON)
397 option(WITH_CYCLES_STANDALONE           "Build Cycles standalone application" OFF)
398 option(WITH_CYCLES_STANDALONE_GUI       "Build Cycles standalone with GUI" OFF)
399 option(WITH_CYCLES_OSL                          "Build Cycles with OSL support" ${_init_CYCLES_OSL})
400 option(WITH_CYCLES_OPENSUBDIV           "Build Cycles with OpenSubdiv support" ON)
401 option(WITH_CYCLES_CUDA_BINARIES        "Build Cycles CUDA binaries" OFF)
402 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_37 sm_50 sm_52 CACHE STRING "CUDA architectures to build binaries for")
403 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
404 unset(PLATFORM_DEFAULT)
405 option(WITH_CYCLES_LOGGING      "Build Cycles with logging support" ON)
406 option(WITH_CYCLES_DEBUG        "Build Cycles with extra debug capabilities" OFF)
407 option(WITH_CYCLES_NATIVE_ONLY  "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
408 mark_as_advanced(WITH_CYCLES_LOGGING)
409 mark_as_advanced(WITH_CYCLES_DEBUG)
410 mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
411
412 option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
413 mark_as_advanced(WITH_CUDA_DYNLOAD)
414
415 # LLVM
416 option(WITH_LLVM                                        "Use LLVM" OFF)
417 if(APPLE)
418         option(LLVM_STATIC                                      "Link with LLVM static libraries" ON) # we prefer static llvm build on Apple, dyn build possible though
419 else()
420         option(LLVM_STATIC                                      "Link with LLVM static libraries" OFF)
421 endif()
422 mark_as_advanced(LLVM_STATIC)
423
424 # disable for now, but plan to support on all platforms eventually
425 option(WITH_MEM_JEMALLOC   "Enable malloc replacement (http://www.canonware.com/jemalloc)" ON)
426 mark_as_advanced(WITH_MEM_JEMALLOC)
427
428 # currently only used for BLI_mempool
429 option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
430 mark_as_advanced(WITH_MEM_VALGRIND)
431
432 # Debug
433 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
434 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
435
436 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
437 mark_as_advanced(WITH_ASSERT_ABORT)
438
439 option(WITH_BOOST                                       "Enable features depending on boost" ON)
440
441 # Unit testsing
442 option(WITH_GTESTS "Enable GTest unit testing" OFF)
443
444
445 # Documentation
446 if(UNIX AND NOT APPLE)
447         option(WITH_DOC_MANPAGE "Create a manual page (Unix manpage)" OFF)
448 endif()
449
450
451 # OpenGL
452
453 option(WITH_GLEW_MX             "Support multiple GLEW contexts (experimental)"                                                                     OFF )
454 option(WITH_GLEW_ES             "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
455 option(WITH_GL_EGL              "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)"       OFF)
456 option(WITH_GL_PROFILE_COMPAT   "Support using the OpenGL 'compatibility' profile. (deprecated)"                                                    ON )
457 option(WITH_GL_PROFILE_CORE     "Support using the OpenGL 3.2+ 'core' profile."                                                                     OFF)
458 option(WITH_GL_PROFILE_ES20     "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)"                                  OFF)
459
460 mark_as_advanced(
461         WITH_GLEW_MX
462         WITH_GLEW_ES
463         WITH_GL_EGL
464         WITH_GL_PROFILE_COMPAT
465         WITH_GL_PROFILE_CORE
466         WITH_GL_PROFILE_ES20
467 )
468
469 if(WITH_GL_PROFILE_COMPAT)
470         set(WITH_GLU ON)
471 else()
472         set(WITH_GLU OFF)
473 endif()
474
475 if(WIN32)
476         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)
477         mark_as_advanced(WITH_GL_ANGLE)
478 endif()
479
480 if(WITH_GLEW_ES AND WITH_SYSTEM_GLEW)
481         message(WARNING Ignoring WITH_SYSTEM_GLEW and using WITH_GLEW_ES)
482         set(WITH_SYSTEM_GLEW OFF)
483 endif()
484
485 if(WIN32)
486         getDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
487         set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
488 endif()
489
490 # Experimental support of C11 and C++11
491 #
492 # We default options to whatever default standard in the current compiler.
493 if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "6.0") AND (NOT WITH_CXX11))
494         set(_c11_init ON)
495         set(_cxx11_init ON)
496 else()
497         set(_c11_init OFF)
498         set(_cxx11_init OFF)
499 endif()
500
501 option(WITH_C11 "Build with C11 standard enabled, for development use only!" ${_c11_init})
502 mark_as_advanced(WITH_C11)
503 option(WITH_CXX11 "Build with C++11 standard enabled, for development use only!" ${_cxx11_init})
504 mark_as_advanced(WITH_CXX11)
505
506 # Dependency graph
507 option(WITH_LEGACY_DEPSGRAPH "Build Blender with legacy dependency graph" ON)
508 mark_as_advanced(WITH_LEGACY_DEPSGRAPH)
509
510 # avoid using again
511 option_defaults_clear()
512
513 # end option(...)
514
515
516
517 # By default we want to install to the directory we are compiling our executables
518 # unless specified otherwise, which we currently do not allow
519 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
520         if(WIN32)
521                 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
522         elseif(APPLE)
523                 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
524         else()
525                 if(WITH_INSTALL_PORTABLE)
526                         set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH} CACHE PATH "default install path" FORCE)
527                 endif()
528         endif()
529 endif()
530
531
532
533 # Apple
534
535 if(APPLE)
536         # require newer cmake on osx because of version handling,
537         # older cmake cannot handle 2 digit subversion!
538         cmake_minimum_required(VERSION 3.0.0)
539
540         if(NOT CMAKE_OSX_ARCHITECTURES)
541                 set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
542                         "Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
543                         FORCE)
544         endif()
545
546         if(NOT DEFINED OSX_SYSTEM)
547                 execute_process(
548                         COMMAND xcodebuild -version -sdk macosx SDKVersion
549                         OUTPUT_VARIABLE OSX_SYSTEM
550                         OUTPUT_STRIP_TRAILING_WHITESPACE)
551         endif()
552
553         # workaround for incorrect cmake xcode lookup for developer previews - XCODE_VERSION does not
554         # take xcode-select path into account but would always look  into /Applications/Xcode.app
555         # while dev versions are named Xcode<version>-DP<preview_number>
556         execute_process(
557                 COMMAND xcode-select --print-path
558                 OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
559         string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case
560         
561         if(${CMAKE_GENERATOR} MATCHES "Xcode")
562         
563                 # earlier xcode has no bundled developer dir, no sense in getting xcode path from
564                 if(${XCODE_VERSION} VERSION_GREATER 4.2) 
565                         # reduce to XCode name without dp extension
566                         string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME) 
567                         if(${DP_NAME} MATCHES Xcode5)
568                                 set(XCODE_VERSION 5)
569                         endif()
570                 endif()
571
572                 ##### cmake incompatibility with xcode  4.3 and higher #####
573                 if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
574                         message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
575                 endif()
576                 ### end cmake incompatibility with xcode 4.3 and higher ###
577                 
578                 if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
579                         # Xcode 4 defaults to the Apple LLVM Compiler.
580                         # Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
581                         set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
582                         message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
583                 endif()
584         else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
585                 execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
586                 string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
587                 unset(XCODE_VERS_BUILD_NR)
588         endif()
589
590         message(STATUS "Detected OS X ${OSX_SYSTEM} and Xcode ${XCODE_VERSION} at ${XCODE_BUNDLE}")
591
592         if(${XCODE_VERSION} VERSION_LESS 4.3)
593                 # use guaranteed existing sdk
594                 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE)
595         else()
596                 # note: xcode-select path could be ambigous,
597                 # cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
598                 # so i use a selfcomposed bundlepath here  
599                 set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
600                 message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
601                 set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
602                 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
603                 if(${CMAKE_GENERATOR} MATCHES "Xcode")
604                         # to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
605                         set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM})
606                 endif()
607         endif()
608
609         if(OSX_SYSTEM MATCHES 10.9)
610                 # make sure syslibs and headers are looked up in sdk ( expecially for 10.9 openGL atm. )
611                 set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT})
612         endif()
613
614         if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
615                 # 10.6 is our min. target, if you use higher sdk, weak linking happens
616                 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" CACHE STRING "" FORCE)
617         endif()
618         
619         if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
620                 # force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
621                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
622                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
623                 add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
624         endif()
625 endif()
626
627
628 #-----------------------------------------------------------------------------
629 # Check for conflicting/unsupported configurations
630
631 if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_STANDALONE)
632         message(FATAL_ERROR
633                 "At least one of WITH_BLENDER or WITH_PLAYER or "
634                 "WITH_CYCLES_STANDALONE must be enabled, nothing to do!"
635         )
636 endif()
637
638 if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
639         message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
640 endif()
641
642 if(NOT WITH_AUDASPACE)
643         if(WITH_OPENAL)
644                 message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
645         endif()
646         if(WITH_JACK)
647                 message(FATAL_ERROR "WITH_JACK requires WITH_AUDASPACE")
648         endif()
649         if(WITH_GAMEENGINE)
650                 message(FATAL_ERROR "WITH_GAMEENGINE requires WITH_AUDASPACE")
651         endif()
652 endif()
653
654 if(NOT WITH_SDL AND WITH_GHOST_SDL)
655         message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
656 endif()
657
658 # python module, needs some different options
659 if(WITH_PYTHON_MODULE AND WITH_PLAYER)
660         message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PLAYER to be OFF")
661 endif()
662
663 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
664         message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
665 endif()
666
667
668 # may as well build python module without a UI
669 if(WITH_PYTHON_MODULE)
670         set(WITH_HEADLESS ON)
671 endif()
672
673 if(NOT WITH_PYTHON)
674         set(WITH_CYCLES OFF)
675 endif()
676
677 # enable boost for cycles, audaspace or i18n
678 # otherwise if the user disabled
679 if(NOT WITH_BOOST)
680         # Explicitly disabled. so disable all deps.
681         macro(set_and_warn
682                 _setting _val)
683                 if(${${_setting}})
684                         message(STATUS "'WITH_BOOST' is disabled: forceing 'set(${_setting} ${_val})'")
685                 endif()
686                 set(${_setting} ${_val})
687         endmacro()
688
689         set_and_warn(WITH_CYCLES         OFF)
690         set_and_warn(WITH_AUDASPACE      OFF)
691         set_and_warn(WITH_INTERNATIONAL  OFF)
692         set_and_warn(WITH_OPENVDB        OFF)
693         set_and_warn(WITH_OPENCOLORIO    OFF)
694         set_and_warn(WITH_MOD_BOOLEAN    OFF)
695
696         set_and_warn(WITH_OPENAL         OFF)  # depends on AUDASPACE
697         set_and_warn(WITH_GAMEENGINE     OFF)  # depends on AUDASPACE
698         set_and_warn(WITH_PLAYER         OFF)  # depends on GAMEENGINE
699 elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_AUDASPACE OR WITH_INTERNATIONAL OR
700        WITH_OPENVDB OR WITH_OPENCOLORIO OR WITH_MOD_BOOLEAN)
701         # Keep enabled
702 else()
703         # New dependency graph needs either Boost or C++11 for function bindings.
704         if(NOT USE_CXX11)
705                 # Enabled but we don't need it
706                 set(WITH_BOOST OFF)
707         endif()
708 endif()
709
710 # auto enable openimageio for cycles
711 if(WITH_CYCLES)
712         set(WITH_OPENIMAGEIO ON)
713
714         # auto enable llvm for cycles_osl
715         if(WITH_CYCLES_OSL)
716                 set(WITH_LLVM ON CACHE BOOL "" FORCE)
717         endif()
718 else()
719         set(WITH_CYCLES_OSL OFF)
720 endif()
721
722 # auto enable openimageio linking dependencies
723 if(WITH_OPENIMAGEIO)
724         set(WITH_IMAGE_OPENEXR ON)
725         set(WITH_IMAGE_TIFF ON)
726 endif()
727
728 # auto enable alembic linking dependencies
729 if(WITH_ALEMBIC)
730         set(WITH_IMAGE_OPENEXR ON)
731 endif()
732
733 # don't store paths to libs for portable distribution
734 if(WITH_INSTALL_PORTABLE)
735         set(CMAKE_SKIP_BUILD_RPATH TRUE)
736 endif()
737
738 if(WITH_GHOST_SDL OR WITH_HEADLESS)
739         set(WITH_X11           OFF)
740         set(WITH_X11_XINPUT    OFF)
741         set(WITH_X11_XF86VMODE OFF)
742         set(WITH_X11_ALPHA     OFF)
743         set(WITH_GHOST_XDND    OFF)
744         set(WITH_INPUT_IME     OFF)
745 endif()
746
747 if(WITH_CPU_SSE)
748         TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
749 else()
750         message(STATUS "SSE and SSE2 optimizations are DISABLED!")
751         set(COMPILER_SSE_FLAG)
752         set(COMPILER_SSE2_FLAG)
753 endif()
754
755 if(WITH_BUILDINFO)
756         find_package(Git)
757         if(NOT GIT_FOUND)
758                 message(WARNING "Git was not found, disabling WITH_BUILDINFO")
759                 set(WITH_BUILDINFO OFF)
760         endif()
761 endif()
762
763 TEST_SHARED_PTR_SUPPORT()
764 TEST_UNORDERED_MAP_SUPPORT()
765
766 if(WITH_AUDASPACE)
767         if(WITH_SYSTEM_AUDASPACE)
768                 set(AUDASPACE_DEFINITIONS
769                         -DWITH_AUDASPACE
770                         -DWITH_SYSTEM_AUDASPACE
771                         "-DAUD_DEVICE_H=<AUD_Device.h>"
772                         "-DAUD_SPECIAL_H=<AUD_Special.h>"
773                         "-DAUD_SOUND_H=<AUD_Sound.h>"
774                         "-DAUD_HANDLE_H=<AUD_Handle.h>"
775                         "-DAUD_SEQUENCE_H=<AUD_Sequence.h>"
776                         "-DAUD_TYPES_H=<AUD_Types.h>"
777                         "-DAUD_PYTHON_H=<python/PyAPI.h>"
778                 )
779         else()
780                 set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
781                 set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
782                 set(AUDASPACE_DEFINITIONS
783                         -DWITH_AUDASPACE
784                         "-DAUD_DEVICE_H=<AUD_C-API.h>"
785                         "-DAUD_SPECIAL_H=<AUD_C-API.h>"
786                         "-DAUD_SOUND_H=<AUD_C-API.h>"
787                         "-DAUD_HANDLE_H=<AUD_C-API.h>"
788                         "-DAUD_SEQUENCE_H=<AUD_C-API.h>"
789                         "-DAUD_TYPES_H=<AUD_Space.h>"
790                 )
791         endif()
792 endif()
793
794 #-----------------------------------------------------------------------------
795 # Check for valid directories
796 # ... a partial checkout may cause this.
797 #
798 # note: we need to check for a known subdir in both cases.
799 #       since uninitialized git submodules will give blank dirs
800
801 if(WITH_INTERNATIONAL)
802         if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/datafiles/locale/languages")
803                 message(WARNING
804                         "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
805                         "This is a 'git submodule', which are known not to work with bridges to other version "
806                         "control systems, disabling 'WITH_INTERNATIONAL'."
807                 )
808                 set(WITH_INTERNATIONAL OFF)
809         endif()
810 endif()
811
812 if(WITH_PYTHON)
813         if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/scripts/addons/modules")
814                 message(WARNING
815                         "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
816                         "This is a 'git submodule', which are known not to work with bridges to other version "
817                         "control systems: * CONTINUING WITHOUT ADDONS *"
818                 )
819         endif()
820 endif()
821
822 #-----------------------------------------------------------------------------
823 # Initialize un-cached vars, avoid unused warning
824
825 # linux only, not cached
826 set(WITH_BINRELOC OFF)
827
828 # MAXOSX only, set to avoid uninitialized
829 set(EXETYPE "")
830
831 # C/C++ flags
832 set(PLATFORM_CFLAGS)
833
834 # these are added to later on.
835 set(C_WARNINGS)
836 set(CXX_WARNINGS)
837
838 # for gcc -Wno-blah-blah
839 set(CC_REMOVE_STRICT_FLAGS)
840
841 # libraries to link the binary with passed to target_link_libraries()
842 # known as LLIBS to scons
843 set(PLATFORM_LINKLIBS "")
844
845 # Added to linker flags in setup_liblinks
846 # - CMAKE_EXE_LINKER_FLAGS
847 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
848 set(PLATFORM_LINKFLAGS "")
849 set(PLATFORM_LINKFLAGS_DEBUG "")
850
851
852 #-----------------------------------------------------------------------------
853 #Platform specifics
854
855 if(WITH_X11)
856         find_package(X11 REQUIRED)
857
858         find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
859         mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
860
861         list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
862
863         if(WITH_X11_XINPUT)
864                 if(X11_Xinput_LIB)
865                         list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
866                 else()
867                         set(WITH_X11_XINPUT OFF)
868                 endif()
869         endif()
870
871         if(WITH_X11_XF86VMODE)
872                 # XXX, why dont cmake make this available?
873                 find_library(X11_Xxf86vmode_LIB Xxf86vm   ${X11_LIB_SEARCH_PATH})
874                 mark_as_advanced(X11_Xxf86vmode_LIB)
875                 if(X11_Xxf86vmode_LIB)
876                         list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
877                 else()
878                         set(WITH_X11_XF86VMODE OFF)
879                 endif()
880         endif()
881
882         if(WITH_X11_ALPHA)
883                 find_library(X11_Xrender_LIB Xrender  ${X11_LIB_SEARCH_PATH})
884                 mark_as_advanced(X11_Xrender_LIB)
885                 if (X11_Xrender_LIB)
886                         list(APPEND PLATFORM_LINKLIBS ${X11_Xrender_LIB})
887                 else()
888                         set(WITH_X11_ALPHA OFF)
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         macro(find_package_wrapper)
904                 if(WITH_STATIC_LIBS)
905                         find_package_static(${ARGV})
906                 else()
907                         find_package(${ARGV})
908                 endif()
909         endmacro()
910
911         find_package_wrapper(JPEG REQUIRED)
912         find_package_wrapper(PNG REQUIRED)
913         find_package_wrapper(ZLIB REQUIRED)
914         find_package_wrapper(Freetype REQUIRED)
915
916         if(WITH_LZO AND WITH_SYSTEM_LZO)
917                 find_package_wrapper(LZO)
918                 if(NOT LZO_FOUND)
919                         message(FATAL_ERROR "Failed finding system LZO version!")
920                 endif()
921         endif()
922
923         if(WITH_SYSTEM_EIGEN3)
924                 find_package_wrapper(Eigen3)
925                 if(NOT EIGEN3_FOUND)
926                         message(FATAL_ERROR "Failed finding system Eigen3 version!")
927                 endif()
928         endif()
929         # else values are set below for all platforms
930
931         if(WITH_PYTHON)
932                 # No way to set py35, remove for now.
933                 # find_package(PythonLibs)
934
935                 # Use our own instead, since without py is such a rare case,
936                 # require this package
937                 # XXX Linking errors with debian static python :/
938 #               find_package_wrapper(PythonLibsUnix REQUIRED)
939                 find_package(PythonLibsUnix REQUIRED)
940         endif()
941
942         if(WITH_IMAGE_OPENEXR)
943                 find_package_wrapper(OpenEXR)  # our own module
944                 if(NOT OPENEXR_FOUND)
945                         set(WITH_IMAGE_OPENEXR OFF)
946                 endif()
947         endif()
948
949         if(WITH_IMAGE_OPENJPEG)
950                 find_package_wrapper(OpenJPEG)
951                 if(NOT OPENJPEG_FOUND)
952                         set(WITH_IMAGE_OPENJPEG OFF)
953                 endif()
954         endif()
955
956         if(WITH_IMAGE_TIFF)
957                 # XXX Linking errors with debian static tiff :/
958 #               find_package_wrapper(TIFF)
959                 find_package(TIFF)
960                 if(NOT TIFF_FOUND)
961                         set(WITH_IMAGE_TIFF OFF)
962                 endif()
963         endif()
964
965         # Audio IO
966         if(WITH_SYSTEM_AUDASPACE)
967                 find_package_wrapper(Audaspace)
968                 if(NOT AUDASPACE_FOUND OR NOT AUDASPACE_C_FOUND)
969                         message(FATAL_ERROR "Audaspace external library not found!")
970                 endif()
971         endif()
972
973         if(WITH_OPENAL)
974                 find_package_wrapper(OpenAL)
975                 if(NOT OPENAL_FOUND)
976                         set(WITH_OPENAL OFF)
977                 endif()
978         endif()
979
980         if(WITH_SDL)
981                 if(WITH_SDL_DYNLOAD)
982                         set(SDL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extern/sdlew/include/SDL2")
983                         set(SDL_LIBRARY)
984                 else()
985                         find_package_wrapper(SDL2)
986                         if(SDL2_FOUND)
987                                 # Use same names for both versions of SDL until we move to 2.x.
988                                 set(SDL_INCLUDE_DIR "${SDL2_INCLUDE_DIR}")
989                                 set(SDL_LIBRARY "${SDL2_LIBRARY}")
990                                 set(SDL_FOUND "${SDL2_FOUND}")
991                         else()
992                                 find_package_wrapper(SDL)
993                         endif()
994                         mark_as_advanced(
995                                 SDL_INCLUDE_DIR
996                                 SDL_LIBRARY
997                         )
998                         # unset(SDLMAIN_LIBRARY CACHE)
999                         if(NOT SDL_FOUND)
1000                                 set(WITH_SDL OFF)
1001                         endif()
1002                 endif()
1003         endif()
1004
1005         if(WITH_JACK)
1006                 find_package_wrapper(Jack)
1007                 if(NOT JACK_FOUND)
1008                         set(WITH_JACK OFF)
1009                 endif()
1010         endif()
1011
1012         # Codecs
1013         if(WITH_CODEC_SNDFILE)
1014                 find_package_wrapper(SndFile)
1015                 if(NOT SNDFILE_FOUND)
1016                         set(WITH_CODEC_SNDFILE OFF)
1017                 endif()
1018         endif()
1019
1020         if(WITH_CODEC_FFMPEG)
1021                 set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
1022                 set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
1023
1024                 mark_as_advanced(FFMPEG)
1025
1026                 # lame, but until we have proper find module for ffmpeg
1027                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1028                 if(EXISTS "${FFMPEG}/include/ffmpeg/")
1029                         list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
1030                 endif()
1031                 # end lameness
1032
1033                 mark_as_advanced(FFMPEG_LIBRARIES)
1034                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1035         endif()
1036
1037         if(WITH_FFTW3)
1038                 find_package_wrapper(Fftw3)
1039                 if(NOT FFTW3_FOUND)
1040                         set(WITH_FFTW3 OFF)
1041                 endif()
1042         endif()
1043
1044         if(WITH_OPENCOLLADA)
1045                 find_package_wrapper(OpenCOLLADA)
1046                 if(OPENCOLLADA_FOUND)
1047                         find_package_wrapper(XML2)
1048                         find_package_wrapper(PCRE)
1049                 else()
1050                         set(WITH_OPENCOLLADA OFF)
1051                 endif()
1052         endif()
1053
1054         if(WITH_MEM_JEMALLOC)
1055                 find_package_wrapper(JeMalloc)
1056                 if(NOT JEMALLOC_FOUND)
1057                         set(WITH_MEM_JEMALLOC OFF)
1058                 endif()
1059         endif()
1060
1061         if(WITH_INPUT_NDOF)
1062                 find_package_wrapper(Spacenav)
1063                 if(SPACENAV_FOUND)
1064                         # use generic names within blenders buildsystem.
1065                         set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
1066                         set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
1067                 else()
1068                         set(WITH_INPUT_NDOF OFF)
1069                 endif()
1070         endif()
1071
1072         if(WITH_CYCLES_OSL)
1073                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1074                 if(NOT OSL_ROOT)
1075                         set(OSL_ROOT ${CYCLES_OSL})
1076                 endif()
1077                 find_package_wrapper(OpenShadingLanguage)
1078                 if(OSL_FOUND)
1079                         if(${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6")
1080                                 # Note: --whole-archive is needed to force loading of all symbols in liboslexec,
1081                                 # otherwise LLVM is missing the osl_allocate_closure_component function
1082                                 set(OSL_LIBRARIES
1083                                         ${OSL_OSLCOMP_LIBRARY}
1084                                         -Wl,--whole-archive ${OSL_OSLEXEC_LIBRARY}
1085                                         -Wl,--no-whole-archive ${OSL_OSLQUERY_LIBRARY}
1086                                 )
1087                         endif()
1088                 else()
1089                         message(STATUS "OSL not found, disabling it from Cycles")
1090                         set(WITH_CYCLES_OSL OFF)
1091                 endif()
1092         endif()
1093
1094         if(WITH_OPENVDB)
1095                 find_package_wrapper(OpenVDB)
1096                 find_package_wrapper(TBB)
1097                 if(NOT OPENVDB_FOUND OR NOT TBB_FOUND)
1098                         set(WITH_OPENVDB OFF)
1099                         set(WITH_OPENVDB_BLOSC OFF)
1100                         message(STATUS "OpenVDB not found, disabling it")
1101                 endif()
1102         endif()
1103
1104         if(WITH_ALEMBIC)
1105                 set(ALEMBIC_ROOT_DIR ${LIBDIR}/alembic)
1106                 find_package_wrapper(Alembic)
1107
1108                 if(WITH_ALEMBIC_HDF5)
1109                         set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
1110                         find_package_wrapper(HDF5)
1111                 endif()
1112
1113                 if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
1114                         set(WITH_ALEMBIC OFF)
1115                         set(WITH_ALEMBIC_HDF5 OFF)
1116                 endif()
1117         endif()
1118
1119         if(WITH_BOOST)
1120                 # uses in build instructions to override include and library variables
1121                 if(NOT BOOST_CUSTOM)
1122                         if(WITH_STATIC_LIBS)
1123                                 set(Boost_USE_STATIC_LIBS ON)
1124                         endif()
1125                         set(Boost_USE_MULTITHREADED ON)
1126                         set(__boost_packages filesystem regex system thread date_time)
1127                         if(WITH_CYCLES_OSL)
1128                                 if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
1129                                         list(APPEND __boost_packages wave)
1130                                 else()
1131                                 endif()
1132                         endif()
1133                         if(WITH_INTERNATIONAL)
1134                                 list(APPEND __boost_packages locale)
1135                         endif()
1136                         if(WITH_CYCLES_NETWORK)
1137                                 list(APPEND __boost_packages serialization)
1138                         endif()
1139                         if(WITH_OPENVDB)
1140                                 list(APPEND __boost_packages iostreams)
1141                         endif()
1142                         find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1143                         if(NOT Boost_FOUND)
1144                                 # try to find non-multithreaded if -mt not found, this flag
1145                                 # doesn't matter for us, it has nothing to do with thread
1146                                 # safety, but keep it to not disturb build setups
1147                                 set(Boost_USE_MULTITHREADED OFF)
1148                                 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1149                         endif()
1150                         unset(__boost_packages)
1151                         if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
1152                                 find_package(IcuLinux)
1153                         endif()
1154                         mark_as_advanced(Boost_DIR)  # why doesnt boost do this?
1155                 endif()
1156
1157                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1158                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1159                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1160                 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1161         endif()
1162
1163         if(WITH_OPENIMAGEIO)
1164                 find_package_wrapper(OpenImageIO)
1165                 if(NOT OPENIMAGEIO_PUGIXML_FOUND AND WITH_CYCLES_STANDALONE)
1166                         find_package_wrapper(PugiXML)
1167                 else()
1168                         set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
1169                         set(PUGIXML_LIBRARIES "")
1170                 endif()
1171
1172                 set(OPENIMAGEIO_LIBRARIES
1173                         ${OPENIMAGEIO_LIBRARIES}
1174                         ${PNG_LIBRARIES}
1175                         ${JPEG_LIBRARIES}
1176                         ${ZLIB_LIBRARIES}
1177                         ${BOOST_LIBRARIES}
1178                 )
1179                 set(OPENIMAGEIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1180                 set(OPENIMAGEIO_DEFINITIONS "")
1181
1182                 if(WITH_IMAGE_TIFF)
1183                         list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
1184                 endif()
1185                 if(WITH_IMAGE_OPENEXR)
1186                         list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
1187                 endif()
1188
1189                 if(NOT OPENIMAGEIO_FOUND)
1190                         set(WITH_OPENIMAGEIO OFF)
1191                         message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
1192                 endif()
1193         endif()
1194
1195         if(WITH_OPENCOLORIO)
1196                 find_package_wrapper(OpenColorIO)
1197
1198                 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
1199                 set(OPENCOLORIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1200                 set(OPENCOLORIO_DEFINITIONS)
1201
1202                 if(NOT OPENCOLORIO_FOUND)
1203                         set(WITH_OPENCOLORIO OFF)
1204                         message(STATUS "OpenColorIO not found")
1205                 endif()
1206         endif()
1207
1208         if(WITH_LLVM)
1209                 find_package_wrapper(LLVM)
1210
1211                 if(NOT LLVM_FOUND)
1212                         set(WITH_LLVM OFF)
1213                         message(STATUS "LLVM not found")
1214                 endif()
1215         endif()
1216
1217         if(WITH_LLVM OR WITH_SDL_DYNLOAD)
1218                 # Fix for conflict with Mesa llvmpipe
1219                 set(PLATFORM_LINKFLAGS
1220                         "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'"
1221                 )
1222         endif()
1223
1224         if(WITH_OPENSUBDIV)
1225                 find_package_wrapper(OpenSubdiv)
1226
1227                 set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBRARIES})
1228                 set(OPENSUBDIV_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1229
1230                 if(NOT OPENSUBDIV_FOUND)
1231                         set(WITH_OPENSUBDIV OFF)
1232                         message(STATUS "OpenSubdiv not found")
1233                 endif()
1234         endif()
1235
1236         # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
1237         list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
1238
1239         find_package(Threads REQUIRED)
1240         list(APPEND PLATFORM_LINKLIBS ${CMAKE_THREAD_LIBS_INIT})
1241         # used by other platforms
1242         set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
1243
1244         if(CMAKE_DL_LIBS)
1245                 list(APPEND PLATFORM_LINKLIBS ${CMAKE_DL_LIBS})
1246         endif()
1247
1248         if(CMAKE_SYSTEM_NAME MATCHES "Linux")
1249                 if(NOT WITH_PYTHON_MODULE)
1250                         # binreloc is linux only
1251                         set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
1252                         set(WITH_BINRELOC ON)
1253                 endif()
1254         endif()
1255
1256         # lfs on glibc, all compilers should use
1257         add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1258
1259         # GNU Compiler
1260         if(CMAKE_COMPILER_IS_GNUCC)
1261                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1262
1263                 # use ld.gold linker if available, could make optional
1264                 execute_process(
1265                         COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
1266                         ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
1267                 if("${LD_VERSION}" MATCHES "GNU gold")
1268                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
1269                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
1270                 else()
1271                         message(STATUS "GNU gold linker isn't available, using the default system linker.")
1272                 endif()
1273                 unset(LD_VERSION)
1274
1275         # CLang is the same as GCC for now.
1276         elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1277                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1278         # Solaris CC
1279         elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
1280                 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
1281                 
1282         # Intel C++ Compiler
1283         elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1284                 # think these next two are broken
1285                 find_program(XIAR xiar)
1286                 if(XIAR)
1287                         set(CMAKE_AR "${XIAR}")
1288                 endif()
1289                 mark_as_advanced(XIAR)
1290
1291                 find_program(XILD xild)
1292                 if(XILD)
1293                         set(CMAKE_LINKER "${XILD}")
1294                 endif()
1295                 mark_as_advanced(XILD)
1296
1297                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
1298                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
1299
1300                 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
1301                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1302                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
1303         endif()
1304
1305 elseif(WIN32)
1306
1307         add_definitions(-DWIN32)
1308
1309         if(MSVC)
1310                 # Minimum MSVC Version
1311                 if(MSVC_VERSION EQUAL 1800)
1312                         set(_min_ver "18.0.31101")
1313                         if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_min_ver})
1314                                 message(FATAL_ERROR
1315                                         "Visual Studio 2013 (Update 4, ${_min_ver}) required, "
1316                                         "found (${CMAKE_CXX_COMPILER_VERSION})")
1317                         endif()
1318                 endif()
1319                 if(MSVC_VERSION EQUAL 1900)
1320                         set(_min_ver "19.0.24210")
1321                         if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_min_ver})
1322                                 message(FATAL_ERROR
1323                                         "Visual Studio 2015 (Update 3, ${_min_ver}) required, "
1324                                         "found (${CMAKE_CXX_COMPILER_VERSION})")
1325                         endif()
1326                 endif()
1327                 unset(_min_ver)
1328
1329                 # needed for some MSVC installations
1330                 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
1331                 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
1332                 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
1333
1334                 list(APPEND PLATFORM_LINKLIBS
1335                         ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32
1336                         advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp
1337                 )
1338
1339                 if(WITH_INPUT_IME)
1340                         list(APPEND PLATFORM_LINKLIBS imm32)
1341                 endif()
1342
1343                 add_definitions(
1344                         -D_CRT_NONSTDC_NO_DEPRECATE
1345                         -D_CRT_SECURE_NO_DEPRECATE
1346                         -D_SCL_SECURE_NO_DEPRECATE
1347                         -D_CONSOLE
1348                         -D_LIB
1349                 )
1350
1351                 # MSVC11 needs _ALLOW_KEYWORD_MACROS to build
1352                 add_definitions(-D_ALLOW_KEYWORD_MACROS)
1353
1354                 if(CMAKE_CL_64)
1355                         # We want to support Vista level ABI for x64
1356                         add_definitions(-D_WIN32_WINNT=0x600)
1357                 endif()
1358
1359                 # Make cmake find the msvc redistributables
1360                 set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
1361                 include(InstallRequiredSystemLibraries)
1362
1363                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
1364                 set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
1365
1366                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
1367                 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
1368                 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
1369                 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
1370                 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
1371                 set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
1372                 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
1373                 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
1374
1375                 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO ")
1376                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib ")
1377
1378                 # Ignore meaningless for us linker warnings.
1379                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /ignore:4049 /ignore:4217 /ignore:4221")
1380                 set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4221")
1381
1382                 # MSVC only, Mingw doesnt need
1383                 if(CMAKE_CL_64)
1384                         set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1385                 else()
1386                         set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1387                 endif()
1388
1389                 set(PLATFORM_LINKFLAGS_DEBUG "/IGNORE:4099 /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1390
1391                 if(NOT DEFINED LIBDIR)
1392
1393                         # Setup 64bit and 64bit windows systems
1394                         if(CMAKE_CL_64)
1395                                 message(STATUS "64 bit compiler detected.")
1396                                 set(LIBDIR_BASE "win64")
1397                         else()
1398                                 message(STATUS "32 bit compiler detected.")
1399                                 set(LIBDIR_BASE "windows")
1400                         endif()
1401
1402                         if(MSVC_VERSION EQUAL 1900)
1403                                 message(STATUS "Visual Studio 2015 detected.")
1404                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc14)
1405                         else()
1406                                 message(STATUS "Visual Studio 2013 detected.")
1407                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc12)
1408                         endif()
1409                 else()
1410                         message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
1411                 endif()
1412                 if(NOT EXISTS "${LIBDIR}/")
1413                         message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'")
1414                 endif()
1415
1416                 # Add each of our libraries to our cmake_prefix_path so find_package() could work
1417                 file(GLOB children RELATIVE ${LIBDIR} ${LIBDIR}/*)
1418                 foreach(child ${children})
1419                         if(IS_DIRECTORY ${LIBDIR}/${child})
1420                                 list(APPEND CMAKE_PREFIX_PATH  ${LIBDIR}/${child})
1421                         endif()
1422                 endforeach()
1423
1424                 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1425                 set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
1426                 set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
1427                 set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
1428                 set(ZLIB_DIR ${LIBDIR}/zlib)
1429                 #find_package(zlib) # we want to find before finding things that depend on it like png
1430
1431
1432                 find_package(png)
1433                 if(NOT PNG_FOUND)
1434                         message(WARNING "Using HARDCODED libpng locations")
1435                         set(PNG_PNG_INCLUDE_DIR ${LIBDIR}/png/include)
1436                         set(PNG_LIBRARIES libpng)
1437                         set(PNG "${LIBDIR}/png")
1438                         set(PNG_INCLUDE_DIRS "${PNG}/include")
1439                         set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1440                 endif()
1441
1442                 set(JPEG_NAMES ${JPEG_NAMES} libjpeg)
1443                 find_package(jpeg REQUIRED)
1444
1445                 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1446                 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1447
1448                 set(FREETYPE ${LIBDIR}/freetype)
1449                 set(FREETYPE_INCLUDE_DIRS
1450                         ${LIBDIR}/freetype/include
1451                         ${LIBDIR}/freetype/include/freetype2
1452                 )
1453                 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1454                 find_package(freetype REQUIRED)
1455
1456                 if(WITH_FFTW3)
1457                         set(FFTW3 ${LIBDIR}/fftw3)
1458                         set(FFTW3_LIBRARIES libfftw)
1459                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1460                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1461                 endif()
1462
1463                 if(WITH_OPENCOLLADA)
1464                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1465
1466                         set(OPENCOLLADA_INCLUDE_DIRS
1467                                 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1468                                 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1469                                 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1470                                 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1471                                 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1472                         )
1473
1474                         set(OPENCOLLADA_LIBRARIES
1475                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib
1476                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAFramework.lib
1477                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADABaseUtils.lib
1478                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
1479                                 ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
1480                                 ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
1481                                 ${OPENCOLLADA}/lib/opencollada/xml.lib
1482                                 ${OPENCOLLADA}/lib/opencollada/buffer.lib
1483                                 ${OPENCOLLADA}/lib/opencollada/ftoa.lib
1484                         )
1485
1486                         if(NOT WITH_LLVM)
1487                                 list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
1488                         endif()
1489
1490                         set(PCRE_LIBRARIES
1491                                 ${OPENCOLLADA}/lib/opencollada/pcre.lib
1492                         )
1493                 endif()
1494
1495                 if(WITH_CODEC_FFMPEG)
1496                         set(FFMPEG_INCLUDE_DIRS
1497                                 ${LIBDIR}/ffmpeg/include
1498                                 ${LIBDIR}/ffmpeg/include/msvc
1499                         )
1500                         find_package(FFMPEG)
1501                         if(NOT FFMPEG_FOUND)
1502                                 message(WARNING "Using HARDCODED ffmpeg locations")
1503                                 set(FFMPEG_LIBRARY_VERSION 55)
1504                                 set(FFMPEG_LIBRARY_VERSION_AVU 52)
1505                                 set(FFMPEG_LIBRARIES
1506                                         ${LIBDIR}/ffmpeg/lib/avcodec-${FFMPEG_LIBRARY_VERSION}.lib
1507                                         ${LIBDIR}/ffmpeg/lib/avformat-${FFMPEG_LIBRARY_VERSION}.lib
1508                                         ${LIBDIR}/ffmpeg/lib/avdevice-${FFMPEG_LIBRARY_VERSION}.lib
1509                                         ${LIBDIR}/ffmpeg/lib/avutil-${FFMPEG_LIBRARY_VERSION_AVU}.lib
1510                                         ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1511                                         )
1512                         endif()
1513                 endif()
1514
1515                 if(WITH_IMAGE_OPENEXR)
1516                         set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
1517                         set(OPENEXR_VERSION "2.1")
1518                         find_package(OPENEXR REQUIRED)
1519                         if(NOT OPENEXR_FOUND)
1520                                 message(WARNING "Using HARDCODED OpenEXR locations")
1521                                 set(OPENEXR ${LIBDIR}/openexr)
1522                                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1523                                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
1524                                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1525                                 set(OPENEXR_LIBRARIES
1526                                         optimized ${OPENEXR_LIBPATH}/Iex-2_2.lib
1527                                         optimized ${OPENEXR_LIBPATH}/Half.lib
1528                                         optimized ${OPENEXR_LIBPATH}/IlmImf-2_2.lib
1529                                         optimized ${OPENEXR_LIBPATH}/Imath-2_2.lib
1530                                         optimized ${OPENEXR_LIBPATH}/IlmThread-2_2.lib
1531                                         debug ${OPENEXR_LIBPATH}/Iex-2_2_d.lib
1532                                         debug ${OPENEXR_LIBPATH}/Half_d.lib
1533                                         debug ${OPENEXR_LIBPATH}/IlmImf-2_2_d.lib
1534                                         debug ${OPENEXR_LIBPATH}/Imath-2_2_d.lib
1535                                         debug ${OPENEXR_LIBPATH}/IlmThread-2_2_d.lib
1536                                 )
1537                         endif()
1538                 endif()
1539
1540                 if(WITH_IMAGE_TIFF)
1541                         # Try to find tiff first then complain and set static and maybe wrong paths
1542                         find_package(TIFF)
1543                         if(NOT TIFF_FOUND)
1544                                 message(WARNING "Using HARDCODED libtiff locations")
1545                                 set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1546                                 set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1547                         endif()
1548                 endif()
1549
1550                 if(WITH_JACK)
1551                         set(JACK_INCLUDE_DIRS
1552                                 ${LIBDIR}/jack/include/jack
1553                                 ${LIBDIR}/jack/include
1554                         )
1555                         set(JACK_LIBRARIES optimized ${LIBDIR}/jack/lib/libjack.lib debug ${LIBDIR}/jack/lib/libjack_d.lib)
1556                 endif()
1557
1558                 if(WITH_PYTHON)
1559                         set(PYTHON_VERSION 3.5) # CACHE STRING)
1560
1561                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1562                         # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1563                         set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1564                         unset(_PYTHON_VERSION_NO_DOTS)
1565
1566                         # Shared includes for both vc2008 and vc2010
1567                         set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1568
1569                         # uncached vars
1570                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1571                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1572                 endif()
1573
1574                 if(WITH_BOOST)
1575                         if(WITH_CYCLES_OSL)
1576                                 set(boost_extra_libs wave)
1577                         endif()
1578                         if(WITH_INTERNATIONAL)
1579                                 list(APPEND boost_extra_libs locale)
1580                         endif()
1581                         if(WITH_OPENVDB)
1582                                 list(APPEND boost_extra_libs iostreams)
1583                         endif()
1584                         set(Boost_USE_STATIC_RUNTIME ON) # prefix lib
1585                         set(Boost_USE_MULTITHREADED ON) # suffix -mt
1586                         set(Boost_USE_STATIC_LIBS ON) # suffix -s
1587                         find_package(Boost COMPONENTS date_time filesystem thread regex system ${boost_extra_libs})
1588                         if(NOT Boost_FOUND)
1589                                 message(WARNING "USING HARDCODED boost locations")
1590                                 set(BOOST ${LIBDIR}/boost)
1591                                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1592                                 if(MSVC12)
1593                                         set(BOOST_LIBPATH ${BOOST}/lib)
1594                                         set(BOOST_POSTFIX "vc120-mt-s-1_60.lib")
1595                                         set(BOOST_DEBUG_POSTFIX "vc120-mt-sgd-1_60.lib")
1596                                 else()
1597                                         set(BOOST_LIBPATH ${BOOST}/lib)
1598                                         set(BOOST_POSTFIX "vc140-mt-s-1_60.lib")
1599                                         set(BOOST_DEBUG_POSTFIX "vc140-mt-sgd-1_60.lib")
1600                                 endif()
1601                                 set(BOOST_LIBRARIES
1602                                         optimized libboost_date_time-${BOOST_POSTFIX}
1603                                         optimized libboost_filesystem-${BOOST_POSTFIX}
1604                                         optimized libboost_regex-${BOOST_POSTFIX}
1605                                         optimized libboost_system-${BOOST_POSTFIX}
1606                                         optimized libboost_thread-${BOOST_POSTFIX}
1607                                         debug libboost_date_time-${BOOST_DEBUG_POSTFIX}
1608                                         debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1609                                         debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1610                                         debug libboost_system-${BOOST_DEBUG_POSTFIX}
1611                                         debug libboost_thread-${BOOST_DEBUG_POSTFIX}
1612                                 )
1613                                 if(WITH_CYCLES_OSL)
1614                                         set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1615                                                 optimized libboost_wave-${BOOST_POSTFIX}
1616                                                 debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1617                                 endif()
1618                                 if(WITH_INTERNATIONAL)
1619                                         set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1620                                                 optimized libboost_locale-${BOOST_POSTFIX}
1621                                                 debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1622                                 endif()
1623                         else() # we found boost using find_package
1624                                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1625                                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1626                                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1627                         endif()
1628                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1629                 endif()
1630                         
1631                 if(WITH_OPENIMAGEIO)
1632                         find_package(OpenImageIO)
1633                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1634                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1635                         set(OIIO_OPTIMIZED optimized OpenImageIO optimized OpenImageIO_Util)
1636                         set(OIIO_DEBUG debug OpenImageIO_d debug OpenImageIO_Util_d)
1637                         set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
1638                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1639                         set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1640                         set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1641                         set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1642                         add_definitions(-DOIIO_STATIC_BUILD)
1643                 endif()
1644
1645                 if(WITH_LLVM)
1646                         set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
1647                         file(GLOB LLVM_LIBRARY_OPTIMIZED ${LLVM_ROOT_DIR}/lib/*.lib)
1648
1649                         if(EXISTS ${LLVM_ROOT_DIR}/debug/lib)
1650                                 foreach(LLVM_OPTIMIZED_LIB ${LLVM_LIBRARY_OPTIMIZED})
1651                                         get_filename_component(LIBNAME ${LLVM_OPTIMIZED_LIB} ABSOLUTE)
1652                                         list(APPEND LLVM_LIBS optimized ${LIBNAME})
1653                                 endforeach(LLVM_OPTIMIZED_LIB)
1654                         
1655                                 file(GLOB LLVM_LIBRARY_DEBUG ${LLVM_ROOT_DIR}/debug/lib/*.lib)
1656
1657                                 foreach(LLVM_DEBUG_LIB ${LLVM_LIBRARY_DEBUG})
1658                                         get_filename_component(LIBNAME ${LLVM_DEBUG_LIB} ABSOLUTE)
1659                                         list(APPEND LLVM_LIBS debug ${LIBNAME})
1660                                 endforeach(LLVM_DEBUG_LIB)
1661
1662                                 set(LLVM_LIBRARY ${LLVM_LIBS})
1663                         else()
1664                                 message(WARNING "LLVM debug libs not present on this system. Using release libs for debug builds.")
1665                                 set(LLVM_LIBRARY ${LLVM_LIBRARY_OPTIMIZED})
1666                         endif()
1667                         
1668                 endif()
1669         
1670                 if(WITH_OPENCOLORIO)
1671                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1672                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1673                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1674                         set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1675                         set(OPENCOLORIO_DEFINITIONS)
1676                 endif()
1677
1678                 if(WITH_OPENVDB)
1679                         set(BLOSC_LIBRARIES optimized ${LIBDIR}/blosc/lib/libblosc.lib debug ${LIBDIR}/blosc/lib/libblosc_d.lib)
1680                         set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
1681                         set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
1682                         set(OPENVDB ${LIBDIR}/openvdb)
1683                         set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include ${TBB_INCLUDE_DIR})
1684                         set(OPENVDB_LIBRARIES optimized openvdb debug openvdb_d ${TBB_LIBRARIES} ${BLOSC_LIBRARIES})
1685                         set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1686                 endif()
1687
1688                 if(WITH_ALEMBIC)
1689                         set(ALEMBIC_ROOT_DIR ${LIBDIR}/alembic)
1690                         find_package(Alembic)
1691
1692                         if(WITH_ALEMBIC_HDF5)
1693                                 set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
1694                                 find_package(HDF5)
1695                         endif()
1696
1697                         if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
1698                                 set(WITH_ALEMBIC OFF)
1699                                 set(WITH_ALEMBIC_HDF5 OFF)
1700                         endif()
1701                 endif()
1702
1703                 if(WITH_MOD_CLOTH_ELTOPO)
1704                         set(LAPACK ${LIBDIR}/lapack)
1705                         # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1706                         set(LAPACK_LIBPATH ${LAPACK}/lib)
1707                         set(LAPACK_LIBRARIES
1708                                 ${LIBDIR}/lapack/lib/libf2c.lib
1709                                 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1710                                 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1711                         )
1712                 endif()
1713
1714                 if(WITH_OPENSUBDIV)
1715                         set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
1716                         set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
1717                         set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBPATH}/osdCPU.lib ${OPENSUBDIV_LIBPATH}/osdGPU.lib)
1718                         find_package(OpenSubdiv)
1719                 endif()
1720
1721                 if(WITH_SDL)
1722                         set(SDL ${LIBDIR}/sdl)
1723                         set(SDL_INCLUDE_DIR ${SDL}/include)
1724                         set(SDL_LIBPATH ${SDL}/lib)
1725                         # MinGW TODO: Update MinGW to SDL2
1726                         if(NOT CMAKE_COMPILER_IS_GNUCC)
1727                                 set(SDL_LIBRARY SDL2)
1728                         else()
1729                                 set(SDL_LIBRARY SDL)
1730                         endif()
1731                 endif()
1732
1733                 # Audio IO
1734                 if(WITH_SYSTEM_AUDASPACE)
1735                         set(AUDASPACE_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1736                         set(AUDASPACE_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace.lib)
1737                         set(AUDASPACE_C_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1738                         set(AUDASPACE_C_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-c.lib)
1739                         set(AUDASPACE_PY_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1740                         set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib)
1741                 endif()
1742
1743                 # used in many places so include globally, like OpenGL
1744                 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1745
1746         elseif(CMAKE_COMPILER_IS_GNUCC)
1747                 # keep GCC specific stuff here
1748                 include(CheckCSourceCompiles)
1749                 # Setup 64bit and 64bit windows systems
1750                 CHECK_C_SOURCE_COMPILES("
1751                         #ifndef __MINGW64__
1752                         #error
1753                         #endif
1754                         int main(void) { return 0; }
1755                         " 
1756                         WITH_MINGW64
1757                 )
1758                 
1759                 if(NOT DEFINED LIBDIR)
1760                         if(WITH_MINGW64)
1761                                 message(STATUS "Compiling for 64 bit with MinGW-w64.")
1762                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
1763                         else()
1764                                 message(STATUS "Compiling for 32 bit with MinGW-w32.")
1765                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
1766
1767                                 if(WITH_RAYOPTIMIZATION)
1768                                         message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
1769                                 endif()
1770                         endif()
1771                 else()
1772                         message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
1773                 endif()
1774                 if(NOT EXISTS "${LIBDIR}/")
1775                         message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'")
1776                 endif()
1777
1778                 list(APPEND PLATFORM_LINKLIBS
1779                         -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32
1780                         -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp
1781                 )
1782
1783                 if(WITH_INPUT_IME)
1784                         list(APPEND PLATFORM_LINKLIBS -limm32)
1785                 endif()
1786
1787                 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1788
1789                 if(WITH_MINGW64)
1790                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1791                         list(APPEND PLATFORM_LINKLIBS -lpthread)
1792                         
1793                         add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1794                 endif()
1795
1796                 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1797
1798                 add_definitions(-DFREE_WINDOWS)
1799
1800                 set(PNG "${LIBDIR}/png")
1801                 set(PNG_INCLUDE_DIRS "${PNG}/include")
1802                 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1803
1804                 if(WITH_MINGW64)
1805                         set(JPEG_LIBRARIES jpeg)
1806                 else()
1807                         set(JPEG_LIBRARIES libjpeg)
1808                 endif()
1809                 set(PNG_LIBRARIES png)
1810
1811                 set(ZLIB ${LIBDIR}/zlib)
1812                 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1813                 set(ZLIB_LIBPATH ${ZLIB}/lib)
1814                 set(ZLIB_LIBRARIES z)
1815
1816                 set(JPEG "${LIBDIR}/jpeg")
1817                 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1818                 set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
1819                 
1820                 # comes with own pthread library
1821                 if(NOT WITH_MINGW64)
1822                         set(PTHREADS ${LIBDIR}/pthreads)
1823                         #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1824                         set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1825                         set(PTHREADS_LIBRARIES pthreadGC2)
1826                 endif()
1827                 
1828                 set(FREETYPE ${LIBDIR}/freetype)
1829                 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1830                 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1831                 set(FREETYPE_LIBRARY freetype)
1832
1833                 if(WITH_FFTW3)
1834                         set(FFTW3 ${LIBDIR}/fftw3)
1835                         set(FFTW3_LIBRARIES fftw3)
1836                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1837                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1838                 endif()
1839
1840                 if(WITH_OPENCOLLADA)
1841                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1842                         set(OPENCOLLADA_INCLUDE_DIRS
1843                                 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1844                                 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1845                                 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1846                                 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1847                                 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1848                         )
1849                         set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
1850                         set(OPENCOLLADA_LIBRARIES
1851                                 OpenCOLLADAStreamWriter
1852                                 OpenCOLLADASaxFrameworkLoader
1853                                 OpenCOLLADAFramework
1854                                 OpenCOLLADABaseUtils
1855                                 GeneratedSaxParser
1856                                 UTF MathMLSolver buffer ftoa xml
1857                         )
1858                         set(PCRE_LIBRARIES pcre)
1859                 endif()
1860
1861                 if(WITH_CODEC_FFMPEG)
1862                         set(FFMPEG ${LIBDIR}/ffmpeg)
1863                         set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1864                         if(WITH_MINGW64)
1865                                 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1866                         else()
1867                                 set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
1868                         endif()
1869                         set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1870                 endif()
1871
1872                 if(WITH_IMAGE_OPENEXR)
1873                         set(OPENEXR ${LIBDIR}/openexr)
1874                         set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1875                         set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1876                         set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1877                         set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1878                 endif()
1879
1880                 if(WITH_IMAGE_TIFF)
1881                         set(TIFF ${LIBDIR}/tiff)
1882                         set(TIFF_LIBRARY tiff)
1883                         set(TIFF_INCLUDE_DIR ${TIFF}/include)
1884                         set(TIFF_LIBPATH ${TIFF}/lib)
1885                 endif()
1886
1887                 if(WITH_JACK)
1888                         set(JACK ${LIBDIR}/jack)
1889                         set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1890                         set(JACK_LIBRARIES jack)
1891                         set(JACK_LIBPATH ${JACK}/lib)
1892
1893                         # TODO, gives linking errors, force off
1894                         set(WITH_JACK OFF)
1895                 endif()
1896
1897                 if(WITH_PYTHON)
1898                         # normally cached but not since we include them with blender
1899                         set(PYTHON_VERSION 3.5) #  CACHE STRING)
1900                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1901                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")  # CACHE PATH)
1902                         set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib")  # CACHE FILEPATH)
1903                         unset(_PYTHON_VERSION_NO_DOTS)
1904
1905                         # uncached vars
1906                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1907                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1908                 endif()
1909
1910                 if(WITH_BOOST)
1911                         set(BOOST ${LIBDIR}/boost)
1912                         set(BOOST_INCLUDE_DIR ${BOOST}/include)
1913                         if(WITH_MINGW64)
1914                                 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1915                                 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1916                         else()
1917                                 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1918                                 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1919                         endif()
1920                         set(BOOST_LIBRARIES
1921                                 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1922                                 boost_regex-${BOOST_POSTFIX}
1923                                 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1924                                 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1925                                 boost_regex-${BOOST_DEBUG_POSTFIX}
1926                                 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1927                         if(WITH_INTERNATIONAL)
1928                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1929                                         optimized boost_locale-${BOOST_POSTFIX}
1930                                         debug boost_locale-${BOOST_DEBUG_POSTFIX}
1931                                 )
1932                         endif()
1933                         if(WITH_CYCLES_OSL)
1934                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1935                                         optimized boost_wave-${BOOST_POSTFIX}
1936                                         debug boost_wave-${BOOST_DEBUG_POSTFIX}
1937                                 )
1938                         endif()
1939                         set(BOOST_LIBPATH ${BOOST}/lib)
1940                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1941                 endif()
1942                         
1943                 if(WITH_OPENIMAGEIO)
1944                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1945                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1946                         set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1947                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1948                         set(OPENIMAGEIO_DEFINITIONS "")
1949                         set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1950                 endif()
1951                 
1952                 if(WITH_LLVM)
1953                         set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
1954                         set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
1955                         # Explicitly set llvm lib order.
1956                         #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1957                         set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1958                                 LLVMAsmParser LLVMAsmPrinter
1959                                 LLVMBitReader LLVMBitWriter
1960                                 LLVMDebugInfo LLVMExecutionEngine
1961                                 LLVMInstCombine LLVMInstrumentation
1962                                 LLVMInterpreter LLVMJIT
1963                                 LLVMLinker LLVMMC
1964                                 LLVMMCDisassembler LLVMMCJIT
1965                                 LLVMMCParser LLVMObject
1966                                 LLVMRuntimeDyld 
1967                                 LLVMSupport
1968                                 LLVMTableGen LLVMTarget
1969                                 LLVMTransformUtils LLVMVectorize
1970                                 LLVMX86AsmParser LLVMX86AsmPrinter
1971                                 LLVMX86CodeGen LLVMX86Desc
1972                                 LLVMX86Disassembler LLVMX86Info
1973                                 LLVMX86Utils LLVMipa
1974                                 LLVMipo LLVMCore)
1975                         # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1976                         list(APPEND PLATFORM_LINKLIBS -limagehlp)
1977                 endif()
1978                 
1979                 if(WITH_OPENCOLORIO)
1980                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1981                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1982                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1983                         set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1984                         set(OPENCOLORIO_DEFINITIONS)
1985                 endif()
1986
1987                 if(WITH_SDL)
1988                         set(SDL ${LIBDIR}/sdl)
1989                         set(SDL_INCLUDE_DIR ${SDL}/include)
1990                         set(SDL_LIBRARY SDL)
1991                         set(SDL_LIBPATH ${SDL}/lib)
1992                 endif()
1993
1994                 if(WITH_OPENVDB)
1995                         set(OPENVDB ${LIBDIR}/openvdb)
1996                         set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
1997                         set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
1998                         set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1999                         set(OPENVDB_DEFINITIONS)
2000                 endif()
2001
2002                 if(WITH_ALEMBIC)
2003                         set(ALEMBIC_ROOT_DIR ${LIBDIR}/alembic)
2004                         find_package_wrapper(Alembic)
2005
2006                         if(WITH_ALEMBIC_HDF5)
2007                                 set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
2008                                 find_package_wrapper(HDF5)
2009                         endif()
2010
2011                         if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
2012                                 set(WITH_ALEMBIC OFF)
2013                                 set(WITH_ALEMBIC_HDF5 OFF)
2014                         endif()
2015                 endif()
2016
2017                 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
2018
2019                 ## DISABLE - causes linking errors 
2020                 ## for re-distribution, so users dont need mingw installed
2021                 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
2022
2023         endif()
2024         
2025         # Things common to both mingw and MSVC  should go here
2026
2027         set(WINTAB_INC ${LIBDIR}/wintab/include)
2028
2029         if(WITH_OPENAL)
2030                 set(OPENAL ${LIBDIR}/openal)
2031                 set(OPENALDIR ${LIBDIR}/openal)
2032                 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
2033                 if(MSVC)
2034                         set(OPENAL_LIBRARY openal32)
2035                 else()
2036                         set(OPENAL_LIBRARY wrap_oal)
2037                 endif()
2038                 set(OPENAL_LIBPATH ${OPENAL}/lib)
2039         endif()
2040
2041         if(WITH_CODEC_SNDFILE)
2042                 set(SNDFILE ${LIBDIR}/sndfile)
2043                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
2044                 set(SNDFILE_LIBRARIES libsndfile-1)
2045                 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
2046         endif()
2047
2048         if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
2049                 add_definitions(-D__SSE__ -D__MMX__)
2050         endif()
2051
2052         if(WITH_CYCLES_OSL)
2053                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2054         
2055                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2056                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2057                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2058                 find_library(OSL_LIB_EXEC_DEBUG NAMES oslexec_d PATHS ${CYCLES_OSL}/lib)
2059                 find_library(OSL_LIB_COMP_DEBUG NAMES oslcomp_d PATHS ${CYCLES_OSL}/lib)
2060                 find_library(OSL_LIB_QUERY_DEBUG NAMES oslquery_d PATHS ${CYCLES_OSL}/lib)
2061                 list(APPEND OSL_LIBRARIES
2062                         optimized ${OSL_LIB_COMP}
2063                         optimized ${OSL_LIB_EXEC}
2064                         optimized ${OSL_LIB_QUERY}
2065                         debug ${OSL_LIB_EXEC_DEBUG}
2066                         debug ${OSL_LIB_COMP_DEBUG}
2067                         debug ${OSL_LIB_QUERY_DEBUG}
2068                 )
2069                 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2070                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2071         
2072                 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2073                         set(OSL_FOUND TRUE)
2074                 else()
2075                         message(STATUS "OSL not found")
2076                         set(WITH_CYCLES_OSL OFF)
2077                 endif()
2078         endif()
2079
2080 elseif(APPLE)
2081
2082         if(NOT DEFINED LIBDIR)
2083                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
2084         else()
2085                 message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
2086         endif()
2087         if(NOT EXISTS "${LIBDIR}/")
2088                 message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
2089         endif()
2090
2091         if(WITH_OPENAL)
2092                 find_package(OpenAL)
2093                 if(OPENAL_FOUND)
2094                         set(WITH_OPENAL ON)
2095                         set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
2096                 else()
2097                         set(WITH_OPENAL OFF)
2098                 endif()
2099         endif()
2100
2101         if(WITH_ALEMBIC)
2102                 set(ALEMBIC_ROOT_DIR ${LIBDIR}/alembic)
2103                 find_package(Alembic)
2104                 if(WITH_ALEMBIC_HDF5)
2105                         set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
2106                         find_package(HDF5)
2107                 endif()
2108
2109                 if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
2110                         set(WITH_ALEMBIC OFF)
2111                         set(WITH_ALEMBIC_HDF5 OFF)
2112                 endif()
2113         endif()
2114
2115         if(WITH_OPENSUBDIV)
2116                 set(OPENSUBDIV ${LIBDIR}/opensubdiv)
2117                 set(OPENSUBDIV_LIBPATH ${OPENSUBDIV}/lib)
2118                 find_library(OSL_LIB_UTIL NAMES osdutil PATHS ${OPENSUBDIV_LIBPATH})
2119                 find_library(OSL_LIB_CPU NAMES osdCPU PATHS ${OPENSUBDIV_LIBPATH})
2120                 find_library(OSL_LIB_GPU NAMES osdGPU PATHS ${OPENSUBDIV_LIBPATH})
2121                 set(OPENSUBDIV_INCLUDE_DIR ${OPENSUBDIV}/include)
2122                 set(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
2123                 list(APPEND OPENSUBDIV_LIBRARIES ${OSL_LIB_UTIL} ${OSL_LIB_CPU} ${OSL_LIB_GPU})
2124         endif()
2125
2126         if(WITH_JACK)
2127                 find_library(JACK_FRAMEWORK
2128                         NAMES jackmp
2129                 )
2130                 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
2131                 if(NOT JACK_FRAMEWORK)
2132                         set(WITH_JACK OFF)
2133                 endif()
2134         endif()
2135
2136         if(WITH_CODEC_SNDFILE)
2137                 set(SNDFILE ${LIBDIR}/sndfile)
2138                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
2139                 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
2140                 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)  # TODO, deprecate
2141         endif()
2142
2143         if(WITH_PYTHON)
2144                 # we use precompiled libraries for py 3.5 and up by default
2145                 set(PYTHON_VERSION 3.5)
2146                 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
2147                         # normally cached but not since we include them with blender
2148                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
2149                         set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}m")
2150                         set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
2151                         set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
2152                         # set(PYTHON_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
2153                 else()
2154                         # module must be compiled against Python framework
2155                         set(_py_framework "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}")
2156
2157                         set(PYTHON_INCLUDE_DIR "${_py_framework}/include/python${PYTHON_VERSION}m")
2158                         set(PYTHON_EXECUTABLE "${_py_framework}/bin/python${PYTHON_VERSION}m")
2159                         set(PYTHON_LIBPATH "${_py_framework}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
2160                         #set(PYTHON_LIBRARY python${PYTHON_VERSION})
2161                         #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python")  # won't  build with this enabled
2162
2163                         unset(_py_framework)
2164                 endif()
2165                 
2166                 # uncached vars
2167                 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
2168                 set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
2169
2170                 if(NOT EXISTS "${PYTHON_EXECUTABLE}")
2171                         message(FATAL_ERROR "Python executable missing: ${PYTHON_EXECUTABLE}")
2172                 endif()
2173         endif()
2174
2175         if(WITH_FFTW3)
2176                 set(FFTW3 ${LIBDIR}/fftw3)
2177                 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
2178                 set(FFTW3_LIBRARIES fftw3)
2179                 set(FFTW3_LIBPATH ${FFTW3}/lib)
2180         endif()
2181
2182         set(PNG_LIBRARIES png)
2183         set(JPEG_LIBRARIES jpeg)
2184
2185         set(ZLIB /usr)
2186         set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
2187         set(ZLIB_LIBRARIES z bz2)
2188
2189         set(FREETYPE ${LIBDIR}/freetype)
2190         set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
2191         set(FREETYPE_LIBPATH ${FREETYPE}/lib)
2192         set(FREETYPE_LIBRARY freetype)
2193
2194         if(WITH_IMAGE_OPENEXR)
2195                 set(OPENEXR ${LIBDIR}/openexr)
2196                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
2197                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
2198                 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
2199                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
2200         endif()
2201
2202         if(WITH_CODEC_FFMPEG)
2203                 set(FFMPEG ${LIBDIR}/ffmpeg)
2204                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
2205                 set(FFMPEG_LIBRARIES
2206                         avcodec avdevice avformat avutil
2207                         mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg
2208                 )
2209                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
2210         endif()
2211
2212         find_library(SYSTEMSTUBS_LIBRARY
2213                 NAMES
2214                 SystemStubs
2215                 PATHS
2216         )
2217         mark_as_advanced(SYSTEMSTUBS_LIBRARY)
2218         if(SYSTEMSTUBS_LIBRARY)
2219                 list(APPEND PLATFORM_LINKLIBS SystemStubs)
2220         endif()
2221
2222         set(PLATFORM_CFLAGS "-pipe -funsigned-char")
2223         set(PLATFORM_LINKFLAGS
2224                 "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio"
2225         )
2226         if(WITH_CODEC_QUICKTIME)
2227                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
2228                 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
2229                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
2230                         # libSDL still needs 32bit carbon quicktime
2231                 endif()
2232         endif()
2233
2234         if(WITH_CXX11)
2235                 list(APPEND PLATFORM_LINKLIBS c++)
2236         else()
2237                 list(APPEND PLATFORM_LINKLIBS stdc++)
2238         endif()
2239
2240         if(WITH_JACK)
2241                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework jackmp")
2242         endif()
2243         
2244         if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
2245                 # force cmake to link right framework
2246                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")
2247         endif()
2248         
2249         if(WITH_OPENCOLLADA)
2250                 set(OPENCOLLADA ${LIBDIR}/opencollada)
2251
2252                 set(OPENCOLLADA_INCLUDE_DIRS
2253                         ${LIBDIR}/opencollada/include/COLLADAStreamWriter
2254                         ${LIBDIR}/opencollada/include/COLLADABaseUtils
2255                         ${LIBDIR}/opencollada/include/COLLADAFramework
2256                         ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
2257                         ${LIBDIR}/opencollada/include/GeneratedSaxParser
2258                 )
2259
2260                 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
2261                 set(OPENCOLLADA_LIBRARIES
2262                         OpenCOLLADASaxFrameworkLoader
2263                         -lOpenCOLLADAFramework
2264                         -lOpenCOLLADABaseUtils
2265                         -lOpenCOLLADAStreamWriter
2266                         -lMathMLSolver
2267                         -lGeneratedSaxParser
2268                         -lxml2 -lbuffer -lftoa
2269                 )
2270                 # Use UTF functions from collada if LLVM is not enabled
2271                 if(NOT WITH_LLVM)
2272                         list(APPEND OPENCOLLADA_LIBRARIES -lUTF)
2273                 endif()
2274                 # pcre is bundled with openCollada
2275                 #set(PCRE ${LIBDIR}/pcre)
2276                 #set(PCRE_LIBPATH ${PCRE}/lib)
2277                 set(PCRE_LIBRARIES pcre)
2278                 #libxml2 is used
2279                 #set(EXPAT ${LIBDIR}/expat)
2280                 #set(EXPAT_LIBPATH ${EXPAT}/lib)
2281                 set(EXPAT_LIB)
2282         endif()
2283
2284         if(WITH_SDL)
2285                 set(SDL ${LIBDIR}/sdl)
2286                 set(SDL_INCLUDE_DIR ${SDL}/include)
2287                 set(SDL_LIBRARY SDL2)
2288                 set(SDL_LIBPATH ${SDL}/lib)
2289                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lazy_framework ForceFeedback")
2290         endif()
2291
2292         set(PNG "${LIBDIR}/png")
2293         set(PNG_INCLUDE_DIRS "${PNG}/include")
2294         set(PNG_LIBPATH ${PNG}/lib)
2295
2296         set(JPEG "${LIBDIR}/jpeg")
2297         set(JPEG_INCLUDE_DIR "${JPEG}/include")
2298         set(JPEG_LIBPATH ${JPEG}/lib)
2299
2300         if(WITH_IMAGE_TIFF)
2301                 set(TIFF ${LIBDIR}/tiff)
2302                 set(TIFF_INCLUDE_DIR ${TIFF}/include)
2303                 set(TIFF_LIBRARY tiff)
2304                 set(TIFF_LIBPATH ${TIFF}/lib)
2305         endif()
2306
2307         if(WITH_BOOST)
2308                 set(BOOST ${LIBDIR}/boost)
2309                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
2310                 set(BOOST_LIBRARIES
2311                         boost_date_time-mt
2312                         boost_filesystem-mt
2313                         boost_regex-mt
2314                         boost_system-mt
2315                         boost_thread-mt
2316                         boost_wave-mt
2317                 )
2318                 if(WITH_INTERNATIONAL)
2319                         list(APPEND BOOST_LIBRARIES boost_locale-mt)
2320                 endif()
2321                 if(WITH_CYCLES_NETWORK)
2322                         list(APPEND BOOST_LIBRARIES boost_serialization-mt)
2323                 endif()
2324                 if(WITH_OPENVDB)
2325                         list(APPEND BOOST_LIBRARIES boost_iostreams-mt)
2326                 endif()
2327                 set(BOOST_LIBPATH ${BOOST}/lib)
2328                 set(BOOST_DEFINITIONS)
2329         endif()
2330         
2331         if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
2332                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale and ffmpeg needs it !
2333         endif()
2334
2335         if(WITH_OPENIMAGEIO)
2336                 set(OPENIMAGEIO ${LIBDIR}/openimageio)
2337                 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
2338                 set(OPENIMAGEIO_LIBRARIES
2339                         ${OPENIMAGEIO}/lib/libOpenImageIO.a
2340                         ${PNG_LIBRARIES}
2341                         ${JPEG_LIBRARIES}
2342                         ${TIFF_LIBRARY}
2343                         ${OPENEXR_LIBRARIES}
2344                         ${ZLIB_LIBRARIES}
2345                 )
2346                 set(OPENIMAGEIO_LIBPATH
2347                         ${OPENIMAGEIO}/lib
2348                         ${JPEG_LIBPATH}
2349                         ${PNG_LIBPATH}
2350                         ${TIFF_LIBPATH}
2351                         ${OPENEXR_LIBPATH}
2352                         ${ZLIB_LIBPATH}
2353                 )
2354                 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
2355                 set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
2356         endif()
2357
2358         if(WITH_OPENCOLORIO)
2359                 set(OPENCOLORIO ${LIBDIR}/opencolorio)
2360                 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
2361                 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
2362                 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
2363         endif()
2364
2365         if(WITH_OPENVDB)
2366                 set(OPENVDB ${LIBDIR}/openvdb)
2367                 set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
2368                 set(TBB_INCLUDE_DIRS ${LIBDIR}/tbb/include)
2369                 set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/libtbb.a)
2370                 set(OPENVDB_LIBRARIES openvdb blosc ${TBB_LIBRARIES})
2371                 set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
2372                 set(OPENVDB_DEFINITIONS)
2373         endif()
2374
2375         if(WITH_LLVM)
2376                 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
2377                 set(LLVM_VERSION "3.4" CACHE STRING     "Version of LLVM to use")
2378                 if(EXISTS "${LLVM_ROOT_DIR}/bin/llvm-config")
2379                         set(LLVM_CONFIG "${LLVM_ROOT_DIR}/bin/llvm-config")
2380                 else()
2381                         set(LLVM_CONFIG llvm-config)
2382                 endif()
2383                 execute_process(COMMAND ${LLVM_CONFIG} --version
2384                                 OUTPUT_VARIABLE LLVM_VERSION
2385                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2386                 execute_process(COMMAND ${LLVM_CONFIG} --prefix
2387                                 OUTPUT_VARIABLE LLVM_ROOT_DIR
2388                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2389                 execute_process(COMMAND ${LLVM_CONFIG} --libdir
2390                                 OUTPUT_VARIABLE LLVM_LIBPATH
2391                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2392                 find_library(LLVM_LIBRARY
2393                              NAMES LLVMAnalysis # first of a whole bunch of libs to get
2394                              PATHS ${LLVM_LIBPATH})
2395
2396                 if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
2397                         if(LLVM_STATIC)
2398                                 # if static LLVM libraries were requested, use llvm-config to generate
2399                                 # the list of what libraries we need, and substitute that in the right
2400                                 # way for LLVM_LIBRARY.
2401                                 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
2402                                                 OUTPUT_VARIABLE LLVM_LIBRARY
2403                                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2404                                 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
2405                         else()
2406                                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
2407                         endif()
2408                 else()
2409                         message(FATAL_ERROR "LLVM not found.")
2410                 endif()
2411         endif()
2412
2413         if(WITH_CYCLES_OSL)
2414                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2415         
2416                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2417                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2418                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2419                 # WARNING! depends on correct order of OSL libs linking
2420                 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
2421                 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2422                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2423         
2424                 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2425                         set(OSL_FOUND TRUE)
2426                 else()
2427                         message(STATUS "OSL not found")
2428                         set(WITH_CYCLES_OSL OFF)
2429                 endif()
2430         endif()
2431         
2432         if(WITH_OPENMP)
2433                 execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VENDOR)
2434                 string(SUBSTRING "${COMPILER_VENDOR}" 0 5 VENDOR_NAME) # truncate output
2435                 if(${VENDOR_NAME} MATCHES "Apple") # Apple does not support OpenMP reliable with gcc and not with clang
2436                         set(WITH_OPENMP OFF)
2437                 else() # vanilla gcc or clang_omp support OpenMP
2438                         message(STATUS "Using special OpenMP enabled compiler !") # letting find_package(OpenMP) module work for gcc
2439                         if(CMAKE_C_COMPILER_ID MATCHES "Clang") # clang-omp in darwin libs
2440                                 set(OPENMP_FOUND ON)
2441                                 set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "C compiler flags for OpenMP parallization" FORCE)
2442                                 set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "C++ compiler flags for OpenMP parallization" FORCE)
2443                                 include_directories(${LIBDIR}/openmp/include)
2444                                 link_directories(${LIBDIR}/openmp/lib)
2445                                 # This is a workaround for our helperbinaries ( datatoc, masgfmt, ... ),
2446                                 # They are linked also to omp lib, so we need it in builddir for runtime exexcution,
2447                                 # TODO: remove all unneeded dependencies from these
2448
2449                                 # for intermediate binaries, in respect to lib ID
2450                                 execute_process(
2451                                         COMMAND ditto -arch ${CMAKE_OSX_ARCHITECTURES}
2452                                         ${LIBDIR}/openmp/lib/libiomp5.dylib
2453                                         ${CMAKE_BINARY_DIR}/Resources/lib/libiomp5.dylib)
2454                         endif()
2455                 endif()
2456         endif()
2457
2458         set(EXETYPE MACOSX_BUNDLE)
2459
2460         set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
2461         set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
2462         if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
2463                 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2464                 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic  -msse -msse2 -msse3 -mssse3")
2465                 if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
2466                         set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
2467                         set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
2468                 endif()
2469         else()
2470                 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2471                 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2472         endif()
2473
2474         if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
2475                 # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
2476                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
2477         endif()
2478         # Get rid of eventually clashes, we export some symbols explicite as local
2479         set(PLATFORM_LINKFLAGS
2480                 "${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker ${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map"
2481         )
2482
2483         if(WITH_CXX11)
2484                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
2485                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -stdlib=libc++")
2486         endif()
2487
2488         # Suppress ranlib "has no symbols" warnings (workaround for T48250)
2489         set(CMAKE_C_ARCHIVE_CREATE   "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
2490         set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
2491         set(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
2492         set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
2493 endif()
2494
2495 #-----------------------------------------------------------------------------
2496 # Common.
2497
2498 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
2499         message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
2500 endif()
2501
2502 if(WITH_CYCLES)
2503         if(NOT WITH_OPENIMAGEIO)
2504                 message(FATAL_ERROR
2505                         "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. "
2506                         "Configure OIIO or disable WITH_CYCLES"
2507                 )
2508         endif()
2509         if(NOT WITH_BOOST)
2510                 message(FATAL_ERROR
2511                         "Cycles requires WITH_BOOST, the library may not have been found. "
2512                         "Configure BOOST or disable WITH_CYCLES"
2513                 )
2514         endif()
2515
2516         if(WITH_CYCLES_OSL)
2517                 if(NOT WITH_LLVM)
2518                         message(FATAL_ERROR
2519                                 "Cycles OSL requires WITH_LLVM, the library may not have been found. "
2520                                 "Configure LLVM or disable WITH_CYCLES_OSL"
2521                         )
2522                 endif()
2523         endif()
2524
2525         if(WITH_CYCLES_OPENSUBDIV AND NOT WITH_OPENSUBDIV)
2526                 message(STATUS "WITH_CYCLES_OPENSUBDIV requires WITH_OPENSUBDIV to be ON, turning OFF")
2527                 set(WITH_CYCLES_OPENSUBDIV OFF)
2528         endif()
2529 endif()
2530
2531 if(WITH_INTERNATIONAL)
2532         if(NOT WITH_BOOST)
2533                 message(FATAL_ERROR
2534                         "Internationalization requires WITH_BOOST, the library may not have been found. "
2535                         "Configure BOOST or disable WITH_INTERNATIONAL"
2536                 )
2537         endif()
2538 endif()
2539
2540 # See TEST_SSE_SUPPORT() for how this is defined.
2541
2542 # Do it globally, SSE2 is required for quite some time now.
2543 # Doing it now allows to use SSE/SSE2 in inline headers.
2544 if(SUPPORT_SSE_BUILD)
2545         set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
2546         add_definitions(-D__SSE__ -D__MMX__)
2547 endif()
2548 if(SUPPORT_SSE2_BUILD)
2549         set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
2550         add_definitions(-D__SSE2__)
2551         if(NOT SUPPORT_SSE_BUILD) # dont double up
2552                 add_definitions(-D__MMX__)
2553         endif()
2554 endif()
2555
2556
2557 # set the endian define
2558 if(MSVC)
2559         # for some reason this fails on msvc
2560         add_definitions(-D__LITTLE_ENDIAN__)
2561         
2562 # OSX-Note: as we do crosscompiling with specific set architecture,
2563 # endianess-detection and autosetting is counterproductive
2564 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
2565
2566 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
2567         add_definitions(-D__LITTLE_ENDIAN__)
2568 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)            
2569         add_definitions(-D__BIG_ENDIAN__)
2570         
2571 else()
2572         include(TestBigEndian)
2573         test_big_endian(_SYSTEM_BIG_ENDIAN)
2574         if(_SYSTEM_BIG_ENDIAN)
2575                 add_definitions(-D__BIG_ENDIAN__)
2576         else()
2577                 add_definitions(-D__LITTLE_ENDIAN__)
2578         endif()
2579         unset(_SYSTEM_BIG_ENDIAN)
2580 endif()
2581
2582
2583 if(WITH_IMAGE_OPENJPEG)
2584         if(WITH_SYSTEM_OPENJPEG)
2585                 # dealt with above
2586                 set(OPENJPEG_DEFINES "")
2587         else()
2588                 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
2589                 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2590         endif()
2591         # Special handling of Windows platform where openjpeg is always static.
2592         if(WIN32)
2593                 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2594         endif()
2595 endif()
2596
2597 if(NOT WITH_SYSTEM_EIGEN3)
2598         set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
2599 endif()
2600
2601 #-----------------------------------------------------------------------------
2602 # Configure OpenGL.
2603
2604 find_package(OpenGL)
2605 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
2606
2607 if(WITH_GLU)
2608         list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
2609         list(APPEND GL_DEFINITIONS -DWITH_GLU)
2610 endif()
2611
2612 if(WITH_SYSTEM_GLES)
2613         find_package_wrapper(OpenGLES)
2614 endif()
2615
2616 if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
2617         list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
2618
2619 elseif(WITH_GL_PROFILE_ES20)
2620         if(WITH_SYSTEM_GLES)
2621                 if(NOT OPENGLES_LIBRARY)
2622                         message(FATAL_ERROR
2623                                 "Unable to find OpenGL ES libraries. "
2624                                 "Install them or disable WITH_SYSTEM_GLES."
2625                         )
2626                 endif()
2627
2628                 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
2629
2630         else()
2631                 set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
2632                 mark_as_advanced(OPENGLES_LIBRARY)
2633
2634                 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
2635
2636                 if(NOT OPENGLES_LIBRARY)
2637                         message(FATAL_ERROR
2638                                 "To compile WITH_GL_EGL you need to set OPENGLES_LIBRARY "
2639                                 "to the file path of an OpenGL ES 2.0 library."
2640                         )
2641                 endif()
2642
2643         endif()
2644
2645         if(WIN32)
2646                 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2647
2648                 set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
2649                 mark_as_advanced(OPENGLES_DLL)
2650
2651                 if(NOT OPENGLES_DLL)
2652                         message(FATAL_ERROR
2653                                 "To compile WITH_GL_PROFILE_ES20 you need to set OPENGLES_DLL to the file "
2654                                 "path of an OpenGL ES 2.0 runtime dynamic link library (DLL)."
2655                         )
2656                 endif()
2657
2658                 if(WITH_GL_ANGLE)
2659                         list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
2660
2661                         set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
2662
2663                         get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
2664                         list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
2665
2666                         mark_as_advanced(D3DCOMPILER_DLL)
2667
2668                         if(D3DCOMPILER_DLL STREQUAL "")
2669                                 message(FATAL_ERROR
2670                                         "To compile WITH_GL_ANGLE you need to set D3DCOMPILER_DLL to the file "
2671                                         "path of a copy of the DirectX redistributable DLL file: D3DCompiler_46.dll"
2672                                 )
2673                         endif()
2674
2675                 endif()
2676
2677         endif()
2678
2679 endif()
2680
2681 if(WITH_GL_EGL)
2682         list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
2683
2684         if(WITH_SYSTEM_GLES)
2685                 if(NOT OPENGLES_EGL_LIBRARY)
2686                         message(FATAL_ERROR
2687                                 "Unable to find OpenGL ES libraries. "
2688                                 "Install them or disable WITH_SYSTEM_GLES."
2689                         )
2690                 endif()
2691
2692                 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
2693
2694         else()
2695                 set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
2696                 mark_as_advanced(OPENGLES_EGL_LIBRARY)
2697
2698                 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
2699
2700                 if(NOT OPENGLES_EGL_LIBRARY)
2701                         message(FATAL_ERROR
2702                                 "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY "
2703                                 "to the file path of an EGL library."
2704                         )
2705                 endif()
2706
2707         endif()
2708
2709         if(WIN32)
2710                 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2711
2712                 set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
2713                 mark_as_advanced(OPENGLES_EGL_DLL)
2714
2715                 if(NOT OPENGLES_EGL_DLL)
2716                         message(FATAL_ERROR
2717                                 "To compile WITH_GL_EGL you need to set OPENGLES_EGL_DLL "
2718                                 "to the file path of an EGL runtime dynamic link library (DLL)."
2719                         )
2720                 endif()
2721
2722         endif()
2723
2724 endif()
2725
2726 if(WITH_GL_PROFILE_COMPAT)
2727         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
2728 endif()
2729
2730 if(WITH_GL_PROFILE_CORE)
2731         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
2732 endif()
2733
2734 if(WITH_GL_PROFILE_ES20)
2735         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
2736 endif()
2737
2738 if(WITH_GL_EGL)
2739         list(APPEND GL_DEFINITIONS -DWITH_EGL)
2740 endif()
2741
2742 #-----------------------------------------------------------------------------
2743 # Configure OpenMP.
2744 if(WITH_OPENMP)
2745         find_package(OpenMP)
2746         if(OPENMP_FOUND)
2747                 if(NOT WITH_OPENMP_STATIC)
2748                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
2749                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
2750                 else()
2751                         # Typically avoid adding flags as defines but we can't
2752                         # pass OpenMP flags to the linker for static builds, meaning
2753                         # we can't add any OpenMP related flags to CFLAGS variables
2754                         # since they're passed to the linker as well.
2755                         add_definitions("${OpenMP_C_FLAGS}")
2756
2757                         find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
2758                 endif()
2759         else()
2760                 set(WITH_OPENMP OFF)
2761         endif()
2762
2763         mark_as_advanced(
2764                 OpenMP_C_FLAGS
2765                 OpenMP_CXX_FLAGS
2766         )
2767 endif()
2768
2769 #-----------------------------------------------------------------------------
2770 # Configure GLEW
2771
2772 if(WITH_GLEW_MX)
2773         list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
2774 endif()
2775
2776 if(WITH_SYSTEM_GLEW)
2777         find_package(GLEW)
2778
2779         # Note: There is an assumption here that the system GLEW is not a static library.
2780
2781         if(NOT GLEW_FOUND)
2782                 message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
2783         endif()
2784
2785         if(WITH_GLEW_MX)
2786                 set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
2787         else()
2788                 set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
2789         endif()
2790 else()
2791         if(WITH_GLEW_ES)
2792                 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
2793
2794                 list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
2795
2796                 # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
2797                 if(NOT WITH_GL_PROFILE_ES20)
2798                         # No ES functions are needed
2799                         list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2800                 elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
2801                         # ES is enabled, but the other functions are all disabled
2802                         list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
2803                 endif()
2804
2805                 if(WITH_GL_PROFILE_ES20)
2806                         if(WITH_GL_EGL)
2807                                 list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
2808                         endif()
2809
2810                         # ToDo: This is an experiment to eliminate ES 1 symbols,
2811                         # GLEW doesn't really properly provide this level of control
2812                         # (for example, without modification it eliminates too many symbols)
2813                         # so there are lots of modifications to GLEW to make this work,
2814                         # and no attempt to make it work beyond Blender at this point.
2815                         list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
2816                 endif()
2817
2818                 if(WITH_GL_EGL)
2819                         list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
2820                 endif()
2821
2822                 set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
2823
2824         else()
2825                 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
2826
2827                 list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
2828
2829                 # This won't affect the non-experimental glew library, 
2830                 # but is used for conditional compilation elsewhere.
2831                 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2832
2833                 set(BLENDER_GLEW_LIBRARIES extern_glew)
2834
2835         endif()
2836
2837 endif()
2838
2839 if(NOT WITH_GLU)
2840         list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
2841 endif()
2842
2843 #-----------------------------------------------------------------------------
2844 # Configure Bullet
2845
2846 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
2847         find_package(Bullet)
2848         if(NOT BULLET_FOUND)
2849                 set(WITH_BULLET OFF)
2850         endif()
2851 else()
2852         set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
2853         # set(BULLET_LIBRARIES "")
2854 endif()
2855
2856 #-----------------------------------------------------------------------------
2857 # Configure Python.
2858
2859 if(WITH_PYTHON_MODULE)
2860         add_definitions(-DPy_ENABLE_SHARED)
2861 endif()
2862
2863 #-----------------------------------------------------------------------------
2864 # Configure GLog/GFlags
2865
2866 if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
2867         set(GLOG_DEFINES
2868                 -DGOOGLE_GLOG_DLL_DECL=
2869         )
2870
2871         set(GFLAGS_DEFINES
2872                 -DGFLAGS_DLL_DEFINE_FLAG=
2873                 -DGFLAGS_DLL_DECLARE_FLAG=
2874                 -DGFLAGS_DLL_DECL=
2875         )
2876 endif()
2877
2878 #-----------------------------------------------------------------------------
2879 # Configure Ceres
2880
2881 if(WITH_LIBMV)
2882         set(CERES_DEFINES)
2883
2884         if(WITH_CXX11)
2885                 # nothing to be done
2886         elseif(SHARED_PTR_FOUND)
2887                 if(SHARED_PTR_TR1_MEMORY_HEADER)
2888                         list(APPEND CERES_DEFINES -DCERES_TR1_MEMORY_HEADER)
2889                 endif()
2890                 if(SHARED_PTR_TR1_NAMESPACE)
2891                         list(APPEND CERES_DEFINES -DCERES_TR1_SHARED_PTR)
2892                 endif()
2893         else()
2894                 message(FATAL_ERROR "Ceres: Unable to find shared_ptr.")
2895         endif()
2896
2897         if(WITH_CXX11)
2898                 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
2899         elseif(HAVE_STD_UNORDERED_MAP_HEADER)
2900                 if(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
2901                         list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
2902                 else()
2903                         if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2904                                 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE)
2905                         else()
2906                                 list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2907                                 message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2908                         endif()
2909                 endif()
2910         else()
2911                 if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2912                         list(APPEND CERES_DEFINES -DCERES_TR1_UNORDERED_MAP)
2913                 else()
2914                         list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2915                         message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2916                 endif()
2917         endif()
2918 endif()
2919
2920 #-----------------------------------------------------------------------------
2921 # Extra compile flags
2922
2923 if(CMAKE_COMPILER_IS_GNUCC)
2924
2925         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2926         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
2927         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2928         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2929         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_VLA -Werror=vla)
2930         # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
2931         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
2932         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2933         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2934         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2935         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2936         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2937         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
2938         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
2939         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
2940         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
2941         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)  # C only
2942         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2943         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2944         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
2945         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness)
2946
2947         # gcc 4.2 gives annoying warnings on every file with this
2948         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2949                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
2950         endif()
2951
2952         # versions before gcc4.6 give many BLI_math warnings
2953         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
2954                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS       -Wredundant-decls)
2955                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
2956         endif()
2957
2958         # versions before gcc4.8 include global name-space.
2959         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.8")
2960                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_SHADOW -Wshadow)
2961         endif()
2962
2963         # disable because it gives warnings for printf() & friends.
2964         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
2965
2966         if(NOT APPLE)
2967                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2968         endif()
2969
2970         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2971         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2972         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2973         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
2974         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
2975         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2976         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2977         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
2978         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2979         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2980         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2981         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2982         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith)
2983         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter)
2984         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings)
2985         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2986         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness)
2987
2988         # gcc 4.2 gives annoying warnings on every file with this
2989         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2990                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
2991         endif()
2992
2993         # causes too many warnings
2994         if(NOT APPLE)
2995                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2996                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
2997         endif()
2998
2999         # flags to undo strict flags
3000         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
3001         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER        -Wno-unused-parameter)
3002
3003         if(NOT APPLE)
3004                 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
3005         endif()
3006
3007 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
3008
3009         if(APPLE AND WITH_OPENMP) # we need the Intel omp lib linked here to not fail all tests due presence of -fopenmp !
3010                 set(CMAKE_REQUIRED_FLAGS "-L${LIBDIR}/openmp/lib -liomp5") # these are only used for the checks
3011         endif()
3012
3013         # strange, clang complains these are not supported, but then yses them.
3014         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
3015         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
3016         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
3017         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
3018         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
3019         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
3020         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
3021         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
3022         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
3023
3024         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
3025         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
3026         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS     -Wno-unknown-pragmas)
3027         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS     -Wno-char-subscripts)
3028         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.
3029         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE        -Wno-sign-compare)
3030         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF    -Wno-invalid-offsetof)
3031
3032         # gives too many unfixable warnings
3033         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS      -Wunused-macros)
3034         # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS          -Wunused-macros)
3035
3036         # flags to undo strict flags
3037         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
3038         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS    -Wno-unused-macros)
3039
3040         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
3041         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
3042         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
3043         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
3044         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
3045         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
3046         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
3047         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
3048
3049         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
3050         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
3051         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
3052         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
3053         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
3054
3055 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
3056
3057         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
3058         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
3059         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
3060
3061         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
3062         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
3063         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
3064
3065         # disable numbered, false positives
3066         set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
3067         set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
3068 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
3069         # most msvc warnings are C & C++
3070         set(_WARNINGS
3071                 # warning level:
3072                 "/W3"
3073                 "/w34062"  # switch statement contains 'default' but no 'case' labels
3074                 # disable:
3075                 "/wd4018"  # signed/unsigned mismatch
3076                 "/wd4146"  # unary minus operator applied to unsigned type, result still unsigned
3077                 "/wd4065"  # switch statement contains 'default' but no 'case' labels
3078                 "/wd4127"  # conditional expression is constant
3079                 "/wd4181"  # qualifier applied to reference type; ignored
3080                 "/wd4200"  # zero-sized array in struct/union
3081                 "/wd4244"  # conversion from 'type1' to 'type2', possible loss of data
3082                 "/wd4267"  # conversion from 'size_t' to 'type', possible loss of data
3083                 "/wd4305"  # truncation from 'type1' to 'type2'
3084                 "/wd4800"  # forcing value to bool 'true' or 'false'
3085                 # errors:
3086                 "/we4013"  # 'function' undefined; assuming extern returning int
3087                 "/we4431"  # missing type specifier - int assumed
3088         )
3089
3090         string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
3091         set(C_WARNINGS "${_WARNINGS}")
3092         set(CXX_WARNINGS "${_WARNINGS}")
3093         unset(_WARNINGS)
3094 endif()
3095
3096 # ensure python header is found since detection can fail, this could happen
3097 # with _any_ library but since we used a fixed python version this tends to
3098 # be most problematic.
3099 if(WITH_PYTHON)
3100         if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
3101                 message(FATAL_ERROR
3102                         "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
3103                         "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
3104                         "to a valid python include path. Containing "
3105                         "Python.h for python version \"${PYTHON_VERSION}\""
3106                 )
3107         endif()
3108
3109         if(WIN32 OR APPLE)
3110                 # pass, we have this in an archive to extract
3111         elseif(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
3112                 find_python_package(numpy)
3113         endif()
3114
3115         if(WIN32 OR APPLE)
3116                 # pass, we have this in lib/python/site-packages
3117         elseif(WITH_PYTHON_INSTALL_REQUESTS)
3118                 find_python_package(requests)
3119         endif()
3120 endif()
3121
3122 if(WITH_CXX11)
3123         if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
3124                 # TODO(sergey): Do we want c++11 or gnu-c++11 here?
3125                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
3126         elseif(MSVC12)
3127                 # Nothing special is needed, C++11 features are available by default.
3128         else()
3129                 message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER_ID} is not supported for C++11 build yet")
3130         endif()
3131 else()
3132         # GCC-6 switched to C++11 by default, which would break linking with existing libraries
3133         # by default. So we explicitly disable C++11 for a new GCC so no linking issues happens.
3134         if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "6.0"))
3135                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
3136                 # We also disable any of C++11 ABI from usage, so we wouldn't even try to
3137                 # link to stuff from std::__cxx11 namespace.
3138                 add_definitions("-D_GLIBCXX_USE_CXX11_ABI=0")
3139         endif()
3140 endif()
3141
3142 # Visual Studio has all standards it supports available by default
3143 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
3144         # Use C99 + GNU extensions, works with GCC, Clang, ICC
3145         if(WITH_C11)
3146                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
3147         else()
3148                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
3149         endif()
3150 endif()
3151
3152 # Include warnings first, so its possible to disable them with user defined flags
3153 # eg: -Wno-uninitialized
3154 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
3155 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
3156
3157 # defined above, platform spesific but shared names
3158 mark_as_advanced(
3159         CYCLES_OSL
3160         OSL_LIB_EXEC
3161         OSL_COMPILER
3162         OSL_LIB_COMP
3163         OSL_LIB_QUERY
3164         OSL_INCLUDE_DIR
3165 )
3166
3167 mark_as_advanced(
3168         LLVM_CONFIG
3169         LLVM_ROOT_DIR
3170         LLVM_LIBRARY
3171         LLVM_VERSION
3172 )
3173
3174 #-------------------------------------------------------------------------------
3175 # Global Defines
3176
3177 # better not set includes here but this debugging option is off by default.
3178 if(WITH_CXX_GUARDEDALLOC)
3179         include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
3180         add_definitions(-DWITH_CXX_GUARDEDALLOC)
3181 endif()
3182
3183 if(WITH_ASSERT_ABORT)
3184         add_definitions(-DWITH_ASSERT_ABORT)
3185 endif()
3186
3187 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
3188 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
3189
3190 #-----------------------------------------------------------------------------
3191 # Libraries
3192
3193 if(WITH_GTESTS)
3194         include(GTestTesting)
3195 endif()
3196
3197 if(WITH_BLENDER OR WITH_PLAYER)
3198         add_subdirectory(intern)
3199         add_subdirectory(extern)
3200
3201         # source after intern and extern to gather all
3202         # internal and external library information first, for test linking
3203         add_subdirectory(source)
3204 elseif(WITH_CYCLES_STANDALONE)
3205         add_subdirectory(intern/cycles)
3206         add_subdirectory(extern/clew)
3207         if(WITH_CUDA_DYNLOAD)
3208                 add_subdirectory(extern/cuew)
3209         endif()
3210         if(NOT WITH_SYSTEM_GLEW)
3211                 add_subdirectory(extern/glew)
3212         endif()
3213 endif()
3214
3215 #-----------------------------------------------------------------------------
3216 # Blender Application
3217 if(WITH_BLENDER)
3218         add_subdirectory(source/creator)
3219 endif()
3220
3221
3222 #-----------------------------------------------------------------------------
3223 # Blender Player
3224 if(WITH_PLAYER)
3225         add_subdirectory(source/blenderplayer)
3226 endif()
3227
3228
3229 #-----------------------------------------------------------------------------
3230 # Testing
3231 add_subdirectory(tests)
3232
3233
3234 #-----------------------------------------------------------------------------
3235 # CPack for generating packages
3236 include(build_files/cmake/packaging.cmake)
3237
3238 #-----------------------------------------------------------------------------
3239 # Use dynamic loading for OpenMP
3240 if(WITH_BLENDER)
3241         openmp_delayload(blender)
3242 endif(WITH_BLENDER)
3243 if(WITH_PLAYER)
3244         openmp_delayload(blenderplayer)
3245 endif(WITH_PLAYER)
3246
3247 #-----------------------------------------------------------------------------
3248 # Print Final Configuration
3249
3250 if(FIRST_RUN)
3251
3252         set(_config_msg "\nBlender Configuration\n=====================")
3253
3254         function(info_cfg_option
3255                 _setting
3256                 )
3257
3258                 set(_msg "  - ${_setting}")
3259                 string(LENGTH "${_msg}" _len)
3260                 while("32" GREATER "${_len}")
3261                         set(_msg "${_msg} ")
3262                         math(EXPR _len "${_len} + 1")
3263                 endwhile()
3264
3265                 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE)
3266         endfunction()
3267
3268         function(info_cfg_text
3269                 _text
3270                 )
3271
3272                 set(_config_msg "${_config_msg}\n\n  ${_text}" PARENT_SCOPE)
3273         endfunction()
3274
3275         message(STATUS "C Compiler:   \"${CMAKE_C_COMPILER_ID}\"")
3276         message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
3277
3278         info_cfg_text("Build Options:")
3279         info_cfg_option(WITH_GAMEENGINE)
3280         info_cfg_option(WITH_PLAYER)
3281         info_cfg_option(WITH_BULLET)
3282         info_cfg_option(WITH_IK_SOLVER)
3283         info_cfg_option(WITH_IK_ITASC)
3284         info_cfg_option(WITH_OPENCOLLADA)
3285         info_cfg_option(WITH_FFTW3)
3286         info_cfg_option(WITH_INTERNATIONAL)
3287         info_cfg_option(WITH_INPUT_NDOF)
3288         info_cfg_option(WITH_CYCLES)
3289         info_cfg_option(WITH_FREESTYLE)
3290         info_cfg_option(WITH_OPENCOLORIO)
3291         info_cfg_option(WITH_OPENVDB)
3292         info_cfg_option(WITH_ALEMBIC)
3293
3294         info_cfg_text("Compiler Options:")
3295         info_cfg_option(WITH_BUILDINFO)
3296         info_cfg_option(WITH_OPENMP)
3297         info_cfg_option(WITH_RAYOPTIMIZATION)
3298
3299         info_cfg_text("System Options:")
3300         info_cfg_option(WITH_INSTALL_PORTABLE)
3301         info_cfg_option(WITH_X11_ALPHA)
3302         info_cfg_option(WITH_X11_XF86VMODE)
3303         info_cfg_option(WITH_X11_XINPUT)
3304         info_cfg_option(WITH_MEM_JEMALLOC)
3305         info_cfg_option(WITH_MEM_VALGRIND)
3306         info_cfg_option(WITH_SYSTEM_GLEW)
3307         info_cfg_option(WITH_SYSTEM_OPENJPEG)
3308
3309         info_cfg_text("Image Formats:")
3310         info_cfg_option(WITH_OPENIMAGEIO)
3311         info_cfg_option(WITH_IMAGE_CINEON)
3312         info_cfg_option(WITH_IMAGE_DDS)
3313         info_cfg_option(WITH_IMAGE_HDR)
3314         info_cfg_option(WITH_IMAGE_OPENEXR)
3315         info_cfg_option(WITH_IMAGE_OPENJPEG)
3316         info_cfg_option(WITH_IMAGE_TIFF)
3317
3318         info_cfg_text("Audio:")
3319         info_cfg_option(WITH_OPENAL)
3320         info_cfg_option(WITH_SDL)
3321         info_cfg_option(WITH_SDL_DYNLOAD)
3322         info_cfg_option(WITH_JACK)
3323         info_cfg_option(WITH_JACK_DYNLOAD)
3324         info_cfg_option(WITH_CODEC_AVI)
3325         info_cfg_option(WITH_CODEC_FFMPEG)
3326         info_cfg_option(WITH_CODEC_SNDFILE)
3327
3328         info_cfg_text("Compression:")
3329         info_cfg_option(WITH_LZMA)
3330         info_cfg_option(WITH_LZO)
3331
3332         info_cfg_text("Python:")
3333         info_cfg_option(WITH_PYTHON_INSTALL)
3334         info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
3335         info_cfg_option(WITH_PYTHON_MODULE)
3336         info_cfg_option(WITH_PYTHON_SAFETY)
3337         if(APPLE)
3338                 info_cfg_option(WITH_PYTHON_FRAMEWORK)
3339         endif()
3340
3341         info_cfg_text("Modifiers:")
3342         info_cfg_option(WITH_MOD_BOOLEAN)
3343         info_cfg_option(WITH_MOD_REMESH)
3344         info_cfg_option(WITH_MOD_FLUID)
3345         info_cfg_option(WITH_MOD_OCEANSIM)
3346
3347         info_cfg_text("OpenGL:")
3348         info_cfg_option(WITH_GLEW_ES)
3349         info_cfg_option(WITH_GLU)
3350         info_cfg_option(WITH_GL_EGL)
3351         info_cfg_option(WITH_GL_PROFILE_COMPAT)
3352         info_cfg_option(WITH_GL_PROFILE_CORE)
3353         info_cfg_option(WITH_GL_PROFILE_ES20)
3354         if(WIN32)
3355                 info_cfg_option(WITH_GL_ANGLE)
3356         endif()
3357
3358         info_cfg_text("")
3359
3360         message("${_config_msg}")
3361 endif()
3362
3363 if(0)
3364         print_all_vars()
3365 endif()
3366