281aa52cae3e34d3623a738c5cb44909c49a2d9d
[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                 find_package_wrapper(Alembic)
1106
1107                 if(WITH_ALEMBIC_HDF5)
1108                         set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
1109                         find_package_wrapper(HDF5)
1110                 endif()
1111
1112                 if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
1113                         set(WITH_ALEMBIC OFF)
1114                         set(WITH_ALEMBIC_HDF5 OFF)
1115                 endif()
1116         endif()
1117
1118         if(WITH_BOOST)
1119                 # uses in build instructions to override include and library variables
1120                 if(NOT BOOST_CUSTOM)
1121                         if(WITH_STATIC_LIBS)
1122                                 set(Boost_USE_STATIC_LIBS ON)
1123                         endif()
1124                         set(Boost_USE_MULTITHREADED ON)
1125                         set(__boost_packages filesystem regex system thread date_time)
1126                         if(WITH_CYCLES_OSL)
1127                                 if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
1128                                         list(APPEND __boost_packages wave)
1129                                 else()
1130                                 endif()
1131                         endif()
1132                         if(WITH_INTERNATIONAL)
1133                                 list(APPEND __boost_packages locale)
1134                         endif()
1135                         if(WITH_CYCLES_NETWORK)
1136                                 list(APPEND __boost_packages serialization)
1137                         endif()
1138                         if(WITH_OPENVDB)
1139                                 list(APPEND __boost_packages iostreams)
1140                         endif()
1141                         find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1142                         if(NOT Boost_FOUND)
1143                                 # try to find non-multithreaded if -mt not found, this flag
1144                                 # doesn't matter for us, it has nothing to do with thread
1145                                 # safety, but keep it to not disturb build setups
1146                                 set(Boost_USE_MULTITHREADED OFF)
1147                                 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1148                         endif()
1149                         unset(__boost_packages)
1150                         if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
1151                                 find_package(IcuLinux)
1152                         endif()
1153                         mark_as_advanced(Boost_DIR)  # why doesnt boost do this?
1154                 endif()
1155
1156                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1157                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1158                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1159                 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1160         endif()
1161
1162         if(WITH_OPENIMAGEIO)
1163                 find_package_wrapper(OpenImageIO)
1164                 if(NOT OPENIMAGEIO_PUGIXML_FOUND AND WITH_CYCLES_STANDALONE)
1165                         find_package_wrapper(PugiXML)
1166                 else()
1167                         set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
1168                         set(PUGIXML_LIBRARIES "")
1169                 endif()
1170
1171                 set(OPENIMAGEIO_LIBRARIES
1172                         ${OPENIMAGEIO_LIBRARIES}
1173                         ${PNG_LIBRARIES}
1174                         ${JPEG_LIBRARIES}
1175                         ${ZLIB_LIBRARIES}
1176                         ${BOOST_LIBRARIES}
1177                 )
1178                 set(OPENIMAGEIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1179                 set(OPENIMAGEIO_DEFINITIONS "")
1180
1181                 if(WITH_IMAGE_TIFF)
1182                         list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
1183                 endif()
1184                 if(WITH_IMAGE_OPENEXR)
1185                         list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
1186                 endif()
1187
1188                 if(NOT OPENIMAGEIO_FOUND)
1189                         set(WITH_OPENIMAGEIO OFF)
1190                         message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
1191                 endif()
1192         endif()
1193
1194         if(WITH_OPENCOLORIO)
1195                 find_package_wrapper(OpenColorIO)
1196
1197                 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
1198                 set(OPENCOLORIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1199                 set(OPENCOLORIO_DEFINITIONS)
1200
1201                 if(NOT OPENCOLORIO_FOUND)
1202                         set(WITH_OPENCOLORIO OFF)
1203                         message(STATUS "OpenColorIO not found")
1204                 endif()
1205         endif()
1206
1207         if(WITH_LLVM)
1208                 find_package_wrapper(LLVM)
1209
1210                 if(NOT LLVM_FOUND)
1211                         set(WITH_LLVM OFF)
1212                         message(STATUS "LLVM not found")
1213                 endif()
1214         endif()
1215
1216         if(WITH_LLVM OR WITH_SDL_DYNLOAD)
1217                 # Fix for conflict with Mesa llvmpipe
1218                 set(PLATFORM_LINKFLAGS
1219                         "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'"
1220                 )
1221         endif()
1222
1223         if(WITH_OPENSUBDIV)
1224                 find_package_wrapper(OpenSubdiv)
1225
1226                 set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBRARIES})
1227                 set(OPENSUBDIV_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1228
1229                 if(NOT OPENSUBDIV_FOUND)
1230                         set(WITH_OPENSUBDIV OFF)
1231                         message(STATUS "OpenSubdiv not found")
1232                 endif()
1233         endif()
1234
1235         # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
1236         list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
1237
1238         find_package(Threads REQUIRED)
1239         list(APPEND PLATFORM_LINKLIBS ${CMAKE_THREAD_LIBS_INIT})
1240         # used by other platforms
1241         set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
1242
1243         if(CMAKE_DL_LIBS)
1244                 list(APPEND PLATFORM_LINKLIBS ${CMAKE_DL_LIBS})
1245         endif()
1246
1247         if(CMAKE_SYSTEM_NAME MATCHES "Linux")
1248                 if(NOT WITH_PYTHON_MODULE)
1249                         # binreloc is linux only
1250                         set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
1251                         set(WITH_BINRELOC ON)
1252                 endif()
1253         endif()
1254
1255         # lfs on glibc, all compilers should use
1256         add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1257
1258         # GNU Compiler
1259         if(CMAKE_COMPILER_IS_GNUCC)
1260                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1261
1262                 # use ld.gold linker if available, could make optional
1263                 execute_process(
1264                         COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
1265                         ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
1266                 if("${LD_VERSION}" MATCHES "GNU gold")
1267                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
1268                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
1269                 else()
1270                         message(STATUS "GNU gold linker isn't available, using the default system linker.")
1271                 endif()
1272                 unset(LD_VERSION)
1273
1274         # CLang is the same as GCC for now.
1275         elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1276                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1277         # Solaris CC
1278         elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
1279                 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
1280                 
1281         # Intel C++ Compiler
1282         elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1283                 # think these next two are broken
1284                 find_program(XIAR xiar)
1285                 if(XIAR)
1286                         set(CMAKE_AR "${XIAR}")
1287                 endif()
1288                 mark_as_advanced(XIAR)
1289
1290                 find_program(XILD xild)
1291                 if(XILD)
1292                         set(CMAKE_LINKER "${XILD}")
1293                 endif()
1294                 mark_as_advanced(XILD)
1295
1296                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
1297                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
1298
1299                 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
1300                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1301                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
1302         endif()
1303
1304 elseif(WIN32)
1305
1306         add_definitions(-DWIN32)
1307
1308         if(MSVC)
1309                 # Minimum MSVC Version
1310                 if(MSVC_VERSION EQUAL 1800)
1311                         set(_min_ver "18.0.31101")
1312                         if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_min_ver})
1313                                 message(FATAL_ERROR
1314                                         "Visual Studio 2013 (Update 4, ${_min_ver}) required, "
1315                                         "found (${CMAKE_CXX_COMPILER_VERSION})")
1316                         endif()
1317                 endif()
1318                 if(MSVC_VERSION EQUAL 1900)
1319                         set(_min_ver "19.0.24210")
1320                         if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_min_ver})
1321                                 message(FATAL_ERROR
1322                                         "Visual Studio 2015 (Update 3, ${_min_ver}) required, "
1323                                         "found (${CMAKE_CXX_COMPILER_VERSION})")
1324                         endif()
1325                 endif()
1326                 unset(_min_ver)
1327
1328                 # needed for some MSVC installations
1329                 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
1330                 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
1331                 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
1332
1333                 list(APPEND PLATFORM_LINKLIBS
1334                         ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32
1335                         advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp
1336                 )
1337
1338                 if(WITH_INPUT_IME)
1339                         list(APPEND PLATFORM_LINKLIBS imm32)
1340                 endif()
1341
1342                 add_definitions(
1343                         -D_CRT_NONSTDC_NO_DEPRECATE
1344                         -D_CRT_SECURE_NO_DEPRECATE
1345                         -D_SCL_SECURE_NO_DEPRECATE
1346                         -D_CONSOLE
1347                         -D_LIB
1348                 )
1349
1350                 # MSVC11 needs _ALLOW_KEYWORD_MACROS to build
1351                 add_definitions(-D_ALLOW_KEYWORD_MACROS)
1352
1353                 # We want to support Vista level ABI 
1354                 add_definitions(-D_WIN32_WINNT=0x600)
1355
1356                 # Make cmake find the msvc redistributables
1357                 set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
1358                 include(InstallRequiredSystemLibraries)
1359
1360                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
1361                 set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
1362
1363                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
1364                 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
1365                 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
1366                 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
1367                 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
1368                 set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
1369                 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
1370                 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
1371
1372                 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO ")
1373                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib ")
1374
1375                 # Ignore meaningless for us linker warnings.
1376                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /ignore:4049 /ignore:4217 /ignore:4221")
1377                 set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4221")
1378
1379                 # MSVC only, Mingw doesnt need
1380                 if(CMAKE_CL_64)
1381                         set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1382                 else()
1383                         set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1384                 endif()
1385
1386                 set(PLATFORM_LINKFLAGS_DEBUG "/IGNORE:4099 /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1387
1388                 if(NOT DEFINED LIBDIR)
1389
1390                         # Setup 64bit and 64bit windows systems
1391                         if(CMAKE_CL_64)
1392                                 message(STATUS "64 bit compiler detected.")
1393                                 set(LIBDIR_BASE "win64")
1394                         else()
1395                                 message(STATUS "32 bit compiler detected.")
1396                                 set(LIBDIR_BASE "windows")
1397                         endif()
1398
1399                         if(MSVC_VERSION EQUAL 1900)
1400                                 message(STATUS "Visual Studio 2015 detected.")
1401                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc14)
1402                         else()
1403                                 message(STATUS "Visual Studio 2013 detected.")
1404                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc12)
1405                         endif()
1406                 else()
1407                         message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
1408                 endif()
1409                 if(NOT EXISTS "${LIBDIR}/")
1410                         message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'")
1411                 endif()
1412
1413                 # Add each of our libraries to our cmake_prefix_path so find_package() could work
1414                 file(GLOB children RELATIVE ${LIBDIR} ${LIBDIR}/*)
1415                 foreach(child ${children})
1416                         if(IS_DIRECTORY ${LIBDIR}/${child})
1417                                 list(APPEND CMAKE_PREFIX_PATH  ${LIBDIR}/${child})
1418                         endif()
1419                 endforeach()
1420
1421                 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1422                 set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
1423                 set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
1424                 set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
1425                 set(ZLIB_DIR ${LIBDIR}/zlib)
1426                 #find_package(zlib) # we want to find before finding things that depend on it like png
1427
1428
1429                 find_package(png)
1430                 if(NOT PNG_FOUND)
1431                         message(WARNING "Using HARDCODED libpng locations")
1432                         set(PNG_PNG_INCLUDE_DIR ${LIBDIR}/png/include)
1433                         set(PNG_LIBRARIES libpng)
1434                         set(PNG "${LIBDIR}/png")
1435                         set(PNG_INCLUDE_DIRS "${PNG}/include")
1436                         set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1437                 endif()
1438
1439                 set(JPEG_NAMES ${JPEG_NAMES} libjpeg)
1440                 find_package(jpeg REQUIRED)
1441
1442                 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1443                 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1444
1445                 set(FREETYPE ${LIBDIR}/freetype)
1446                 set(FREETYPE_INCLUDE_DIRS
1447                         ${LIBDIR}/freetype/include
1448                         ${LIBDIR}/freetype/include/freetype2
1449                 )
1450                 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1451                 find_package(freetype REQUIRED)
1452
1453                 if(WITH_FFTW3)
1454                         set(FFTW3 ${LIBDIR}/fftw3)
1455                         set(FFTW3_LIBRARIES libfftw)
1456                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1457                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1458                 endif()
1459
1460                 if(WITH_OPENCOLLADA)
1461                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1462
1463                         set(OPENCOLLADA_INCLUDE_DIRS
1464                                 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1465                                 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1466                                 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1467                                 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1468                                 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1469                         )
1470
1471                         set(OPENCOLLADA_LIBRARIES
1472                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib
1473                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAFramework.lib
1474                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADABaseUtils.lib
1475                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
1476                                 ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
1477                                 ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
1478                                 ${OPENCOLLADA}/lib/opencollada/xml.lib
1479                                 ${OPENCOLLADA}/lib/opencollada/buffer.lib
1480                                 ${OPENCOLLADA}/lib/opencollada/ftoa.lib
1481                         )
1482
1483                         if(NOT WITH_LLVM)
1484                                 list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
1485                         endif()
1486
1487                         set(PCRE_LIBRARIES
1488                                 ${OPENCOLLADA}/lib/opencollada/pcre.lib
1489                         )
1490                 endif()
1491
1492                 if(WITH_CODEC_FFMPEG)
1493                         set(FFMPEG_INCLUDE_DIRS
1494                                 ${LIBDIR}/ffmpeg/include
1495                                 ${LIBDIR}/ffmpeg/include/msvc
1496                         )
1497                         find_package(FFMPEG)
1498                         if(NOT FFMPEG_FOUND)
1499                                 message(WARNING "Using HARDCODED ffmpeg locations")
1500                                 set(FFMPEG_LIBRARY_VERSION 55)
1501                                 set(FFMPEG_LIBRARY_VERSION_AVU 52)
1502                                 set(FFMPEG_LIBRARIES
1503                                         ${LIBDIR}/ffmpeg/lib/avcodec-${FFMPEG_LIBRARY_VERSION}.lib
1504                                         ${LIBDIR}/ffmpeg/lib/avformat-${FFMPEG_LIBRARY_VERSION}.lib
1505                                         ${LIBDIR}/ffmpeg/lib/avdevice-${FFMPEG_LIBRARY_VERSION}.lib
1506                                         ${LIBDIR}/ffmpeg/lib/avutil-${FFMPEG_LIBRARY_VERSION_AVU}.lib
1507                                         ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1508                                         )
1509                         endif()
1510                 endif()
1511
1512                 if(WITH_IMAGE_OPENEXR)
1513                         set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
1514                         set(OPENEXR_VERSION "2.1")
1515                         find_package(OPENEXR REQUIRED)
1516                         if(NOT OPENEXR_FOUND)
1517                                 message(WARNING "Using HARDCODED OpenEXR locations")
1518                                 set(OPENEXR ${LIBDIR}/openexr)
1519                                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1520                                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
1521                                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1522                                 set(OPENEXR_LIBRARIES
1523                                         optimized ${OPENEXR_LIBPATH}/Iex-2_2.lib
1524                                         optimized ${OPENEXR_LIBPATH}/Half.lib
1525                                         optimized ${OPENEXR_LIBPATH}/IlmImf-2_2.lib
1526                                         optimized ${OPENEXR_LIBPATH}/Imath-2_2.lib
1527                                         optimized ${OPENEXR_LIBPATH}/IlmThread-2_2.lib
1528                                         debug ${OPENEXR_LIBPATH}/Iex-2_2_d.lib
1529                                         debug ${OPENEXR_LIBPATH}/Half_d.lib
1530                                         debug ${OPENEXR_LIBPATH}/IlmImf-2_2_d.lib
1531                                         debug ${OPENEXR_LIBPATH}/Imath-2_2_d.lib
1532                                         debug ${OPENEXR_LIBPATH}/IlmThread-2_2_d.lib
1533                                 )
1534                         endif()
1535                 endif()
1536
1537                 if(WITH_IMAGE_TIFF)
1538                         # Try to find tiff first then complain and set static and maybe wrong paths
1539                         find_package(TIFF)
1540                         if(NOT TIFF_FOUND)
1541                                 message(WARNING "Using HARDCODED libtiff locations")
1542                                 set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1543                                 set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1544                         endif()
1545                 endif()
1546
1547                 if(WITH_JACK)
1548                         set(JACK_INCLUDE_DIRS
1549                                 ${LIBDIR}/jack/include/jack
1550                                 ${LIBDIR}/jack/include
1551                         )
1552                         set(JACK_LIBRARIES optimized ${LIBDIR}/jack/lib/libjack.lib debug ${LIBDIR}/jack/lib/libjack_d.lib)
1553                 endif()
1554
1555                 if(WITH_PYTHON)
1556                         set(PYTHON_VERSION 3.5) # CACHE STRING)
1557
1558                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1559                         # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1560                         set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1561                         unset(_PYTHON_VERSION_NO_DOTS)
1562
1563                         # Shared includes for both vc2008 and vc2010
1564                         set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1565
1566                         # uncached vars
1567                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1568                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1569                 endif()
1570
1571                 if(WITH_BOOST)
1572                         if(WITH_CYCLES_OSL)
1573                                 set(boost_extra_libs wave)
1574                         endif()
1575                         if(WITH_INTERNATIONAL)
1576                                 list(APPEND boost_extra_libs locale)
1577                         endif()
1578                         if(WITH_OPENVDB)
1579                                 list(APPEND boost_extra_libs iostreams)
1580                         endif()
1581                         set(Boost_USE_STATIC_RUNTIME ON) # prefix lib
1582                         set(Boost_USE_MULTITHREADED ON) # suffix -mt
1583                         set(Boost_USE_STATIC_LIBS ON) # suffix -s
1584                         find_package(Boost COMPONENTS date_time filesystem thread regex system ${boost_extra_libs})
1585                         if(NOT Boost_FOUND)
1586                                 message(WARNING "USING HARDCODED boost locations")
1587                                 set(BOOST ${LIBDIR}/boost)
1588                                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1589                                 if(MSVC12)
1590                                         set(BOOST_LIBPATH ${BOOST}/lib)
1591                                         set(BOOST_POSTFIX "vc120-mt-s-1_60.lib")
1592                                         set(BOOST_DEBUG_POSTFIX "vc120-mt-sgd-1_60.lib")
1593                                 else()
1594                                         set(BOOST_LIBPATH ${BOOST}/lib)
1595                                         set(BOOST_POSTFIX "vc140-mt-s-1_60.lib")
1596                                         set(BOOST_DEBUG_POSTFIX "vc140-mt-sgd-1_60.lib")
1597                                 endif()
1598                                 set(BOOST_LIBRARIES
1599                                         optimized libboost_date_time-${BOOST_POSTFIX}
1600                                         optimized libboost_filesystem-${BOOST_POSTFIX}
1601                                         optimized libboost_regex-${BOOST_POSTFIX}
1602                                         optimized libboost_system-${BOOST_POSTFIX}
1603                                         optimized libboost_thread-${BOOST_POSTFIX}
1604                                         debug libboost_date_time-${BOOST_DEBUG_POSTFIX}
1605                                         debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1606                                         debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1607                                         debug libboost_system-${BOOST_DEBUG_POSTFIX}
1608                                         debug libboost_thread-${BOOST_DEBUG_POSTFIX}
1609                                 )
1610                                 if(WITH_CYCLES_OSL)
1611                                         set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1612                                                 optimized libboost_wave-${BOOST_POSTFIX}
1613                                                 debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1614                                 endif()
1615                                 if(WITH_INTERNATIONAL)
1616                                         set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1617                                                 optimized libboost_locale-${BOOST_POSTFIX}
1618                                                 debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1619                                 endif()
1620                         else() # we found boost using find_package
1621                                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1622                                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1623                                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1624                         endif()
1625                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1626                 endif()
1627                         
1628                 if(WITH_OPENIMAGEIO)
1629                         find_package(OpenImageIO)
1630                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1631                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1632                         set(OIIO_OPTIMIZED optimized OpenImageIO optimized OpenImageIO_Util)
1633                         set(OIIO_DEBUG debug OpenImageIO_d debug OpenImageIO_Util_d)
1634                         set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
1635                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1636                         set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1637                         set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1638                         set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1639                         add_definitions(-DOIIO_STATIC_BUILD)
1640                 endif()
1641
1642                 if(WITH_LLVM)
1643                         set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
1644                         file(GLOB LLVM_LIBRARY_OPTIMIZED ${LLVM_ROOT_DIR}/lib/*.lib)
1645
1646                         if(EXISTS ${LLVM_ROOT_DIR}/debug/lib)
1647                                 foreach(LLVM_OPTIMIZED_LIB ${LLVM_LIBRARY_OPTIMIZED})
1648                                         get_filename_component(LIBNAME ${LLVM_OPTIMIZED_LIB} ABSOLUTE)
1649                                         list(APPEND LLVM_LIBS optimized ${LIBNAME})
1650                                 endforeach(LLVM_OPTIMIZED_LIB)
1651                         
1652                                 file(GLOB LLVM_LIBRARY_DEBUG ${LLVM_ROOT_DIR}/debug/lib/*.lib)
1653
1654                                 foreach(LLVM_DEBUG_LIB ${LLVM_LIBRARY_DEBUG})
1655                                         get_filename_component(LIBNAME ${LLVM_DEBUG_LIB} ABSOLUTE)
1656                                         list(APPEND LLVM_LIBS debug ${LIBNAME})
1657                                 endforeach(LLVM_DEBUG_LIB)
1658
1659                                 set(LLVM_LIBRARY ${LLVM_LIBS})
1660                         else()
1661                                 message(WARNING "LLVM debug libs not present on this system. Using release libs for debug builds.")
1662                                 set(LLVM_LIBRARY ${LLVM_LIBRARY_OPTIMIZED})
1663                         endif()
1664                         
1665                 endif()
1666         
1667                 if(WITH_OPENCOLORIO)
1668                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1669                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1670                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1671                         set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1672                         set(OPENCOLORIO_DEFINITIONS)
1673                 endif()
1674
1675                 if(WITH_OPENVDB)
1676                         set(BLOSC_LIBRARIES optimized ${LIBDIR}/blosc/lib/libblosc.lib debug ${LIBDIR}/blosc/lib/libblosc_d.lib)
1677                         set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
1678                         set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
1679                         set(OPENVDB ${LIBDIR}/openvdb)
1680                         set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include ${TBB_INCLUDE_DIR})
1681                         set(OPENVDB_LIBRARIES optimized openvdb debug openvdb_d ${TBB_LIBRARIES} ${BLOSC_LIBRARIES})
1682                         set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1683                 endif()
1684
1685                 if(WITH_ALEMBIC)
1686                         set(ALEMBIC ${LIBDIR}/alembic)
1687                         set(ALEMBIC_INCLUDE_DIR ${ALEMBIC}/include)
1688                         set(ALEMBIC_INCLUDE_DIRS ${ALEMBIC_INCLUDE_DIR})
1689                         set(ALEMBIC_LIBPATH ${ALEMBIC}/lib)
1690                         set(ALEMBIC_LIBRARIES optimized alembic debug alembic_d)
1691                 endif()
1692
1693                 if(WITH_MOD_CLOTH_ELTOPO)
1694                         set(LAPACK ${LIBDIR}/lapack)
1695                         # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1696                         set(LAPACK_LIBPATH ${LAPACK}/lib)
1697                         set(LAPACK_LIBRARIES
1698                                 ${LIBDIR}/lapack/lib/libf2c.lib
1699                                 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1700                                 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1701                         )
1702                 endif()
1703
1704                 if(WITH_OPENSUBDIV)
1705                         set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
1706                         set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
1707                         set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBPATH}/osdCPU.lib ${OPENSUBDIV_LIBPATH}/osdGPU.lib)
1708                         find_package(OpenSubdiv)
1709                 endif()
1710
1711                 if(WITH_SDL)
1712                         set(SDL ${LIBDIR}/sdl)
1713                         set(SDL_INCLUDE_DIR ${SDL}/include)
1714                         set(SDL_LIBPATH ${SDL}/lib)
1715                         # MinGW TODO: Update MinGW to SDL2
1716                         if(NOT CMAKE_COMPILER_IS_GNUCC)
1717                                 set(SDL_LIBRARY SDL2)
1718                         else()
1719                                 set(SDL_LIBRARY SDL)
1720                         endif()
1721                 endif()
1722
1723                 # Audio IO
1724                 if(WITH_SYSTEM_AUDASPACE)
1725                         set(AUDASPACE_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1726                         set(AUDASPACE_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace.lib)
1727                         set(AUDASPACE_C_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1728                         set(AUDASPACE_C_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-c.lib)
1729                         set(AUDASPACE_PY_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1730                         set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib)
1731                 endif()
1732
1733                 # used in many places so include globally, like OpenGL
1734                 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1735
1736         elseif(CMAKE_COMPILER_IS_GNUCC)
1737                 # keep GCC specific stuff here
1738                 include(CheckCSourceCompiles)
1739                 # Setup 64bit and 64bit windows systems
1740                 CHECK_C_SOURCE_COMPILES("
1741                         #ifndef __MINGW64__
1742                         #error
1743                         #endif
1744                         int main(void) { return 0; }
1745                         " 
1746                         WITH_MINGW64
1747                 )
1748                 
1749                 if(NOT DEFINED LIBDIR)
1750                         if(WITH_MINGW64)
1751                                 message(STATUS "Compiling for 64 bit with MinGW-w64.")
1752                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
1753                         else()
1754                                 message(STATUS "Compiling for 32 bit with MinGW-w32.")
1755                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
1756
1757                                 if(WITH_RAYOPTIMIZATION)
1758                                         message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
1759                                 endif()
1760                         endif()
1761                 else()
1762                         message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
1763                 endif()
1764                 if(NOT EXISTS "${LIBDIR}/")
1765                         message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'")
1766                 endif()
1767
1768                 list(APPEND PLATFORM_LINKLIBS
1769                         -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32
1770                         -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp
1771                 )
1772
1773                 if(WITH_INPUT_IME)
1774                         list(APPEND PLATFORM_LINKLIBS -limm32)
1775                 endif()
1776
1777                 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1778
1779                 if(WITH_MINGW64)
1780                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1781                         list(APPEND PLATFORM_LINKLIBS -lpthread)
1782                         
1783                         add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1784                 endif()
1785
1786                 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1787
1788                 add_definitions(-DFREE_WINDOWS)
1789
1790                 set(PNG "${LIBDIR}/png")
1791                 set(PNG_INCLUDE_DIRS "${PNG}/include")
1792                 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1793
1794                 if(WITH_MINGW64)
1795                         set(JPEG_LIBRARIES jpeg)
1796                 else()
1797                         set(JPEG_LIBRARIES libjpeg)
1798                 endif()
1799                 set(PNG_LIBRARIES png)
1800
1801                 set(ZLIB ${LIBDIR}/zlib)
1802                 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1803                 set(ZLIB_LIBPATH ${ZLIB}/lib)
1804                 set(ZLIB_LIBRARIES z)
1805
1806                 set(JPEG "${LIBDIR}/jpeg")
1807                 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1808                 set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
1809                 
1810                 # comes with own pthread library
1811                 if(NOT WITH_MINGW64)
1812                         set(PTHREADS ${LIBDIR}/pthreads)
1813                         #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1814                         set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1815                         set(PTHREADS_LIBRARIES pthreadGC2)
1816                 endif()
1817                 
1818                 set(FREETYPE ${LIBDIR}/freetype)
1819                 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1820                 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1821                 set(FREETYPE_LIBRARY freetype)
1822
1823                 if(WITH_FFTW3)
1824                         set(FFTW3 ${LIBDIR}/fftw3)
1825                         set(FFTW3_LIBRARIES fftw3)
1826                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1827                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1828                 endif()
1829
1830                 if(WITH_OPENCOLLADA)
1831                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1832                         set(OPENCOLLADA_INCLUDE_DIRS
1833                                 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1834                                 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1835                                 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1836                                 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1837                                 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1838                         )
1839                         set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
1840                         set(OPENCOLLADA_LIBRARIES
1841                                 OpenCOLLADAStreamWriter
1842                                 OpenCOLLADASaxFrameworkLoader
1843                                 OpenCOLLADAFramework
1844                                 OpenCOLLADABaseUtils
1845                                 GeneratedSaxParser
1846                                 UTF MathMLSolver buffer ftoa xml
1847                         )
1848                         set(PCRE_LIBRARIES pcre)
1849                 endif()
1850
1851                 if(WITH_CODEC_FFMPEG)
1852                         set(FFMPEG ${LIBDIR}/ffmpeg)
1853                         set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1854                         if(WITH_MINGW64)
1855                                 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1856                         else()
1857                                 set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
1858                         endif()
1859                         set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1860                 endif()
1861
1862                 if(WITH_IMAGE_OPENEXR)
1863                         set(OPENEXR ${LIBDIR}/openexr)
1864                         set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1865                         set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1866                         set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1867                         set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1868                 endif()
1869
1870                 if(WITH_IMAGE_TIFF)
1871                         set(TIFF ${LIBDIR}/tiff)
1872                         set(TIFF_LIBRARY tiff)
1873                         set(TIFF_INCLUDE_DIR ${TIFF}/include)
1874                         set(TIFF_LIBPATH ${TIFF}/lib)
1875                 endif()
1876
1877                 if(WITH_JACK)
1878                         set(JACK ${LIBDIR}/jack)
1879                         set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1880                         set(JACK_LIBRARIES jack)
1881                         set(JACK_LIBPATH ${JACK}/lib)
1882
1883                         # TODO, gives linking errors, force off
1884                         set(WITH_JACK OFF)
1885                 endif()
1886
1887                 if(WITH_PYTHON)
1888                         # normally cached but not since we include them with blender
1889                         set(PYTHON_VERSION 3.5) #  CACHE STRING)
1890                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1891                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")  # CACHE PATH)
1892                         set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib")  # CACHE FILEPATH)
1893                         unset(_PYTHON_VERSION_NO_DOTS)
1894
1895                         # uncached vars
1896                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1897                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1898                 endif()
1899
1900                 if(WITH_BOOST)
1901                         set(BOOST ${LIBDIR}/boost)
1902                         set(BOOST_INCLUDE_DIR ${BOOST}/include)
1903                         if(WITH_MINGW64)
1904                                 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1905                                 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1906                         else()
1907                                 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1908                                 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1909                         endif()
1910                         set(BOOST_LIBRARIES
1911                                 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1912                                 boost_regex-${BOOST_POSTFIX}
1913                                 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1914                                 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1915                                 boost_regex-${BOOST_DEBUG_POSTFIX}
1916                                 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1917                         if(WITH_INTERNATIONAL)
1918                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1919                                         optimized boost_locale-${BOOST_POSTFIX}
1920                                         debug boost_locale-${BOOST_DEBUG_POSTFIX}
1921                                 )
1922                         endif()
1923                         if(WITH_CYCLES_OSL)
1924                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1925                                         optimized boost_wave-${BOOST_POSTFIX}
1926                                         debug boost_wave-${BOOST_DEBUG_POSTFIX}
1927                                 )
1928                         endif()
1929                         set(BOOST_LIBPATH ${BOOST}/lib)
1930                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1931                 endif()
1932                         
1933                 if(WITH_OPENIMAGEIO)
1934                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1935                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1936                         set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1937                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1938                         set(OPENIMAGEIO_DEFINITIONS "")
1939                         set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1940                 endif()
1941                 
1942                 if(WITH_LLVM)
1943                         set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
1944                         set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
1945                         # Explicitly set llvm lib order.
1946                         #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1947                         set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1948                                 LLVMAsmParser LLVMAsmPrinter
1949                                 LLVMBitReader LLVMBitWriter
1950                                 LLVMDebugInfo LLVMExecutionEngine
1951                                 LLVMInstCombine LLVMInstrumentation
1952                                 LLVMInterpreter LLVMJIT
1953                                 LLVMLinker LLVMMC
1954                                 LLVMMCDisassembler LLVMMCJIT
1955                                 LLVMMCParser LLVMObject
1956                                 LLVMRuntimeDyld 
1957                                 LLVMSupport
1958                                 LLVMTableGen LLVMTarget
1959                                 LLVMTransformUtils LLVMVectorize
1960                                 LLVMX86AsmParser LLVMX86AsmPrinter
1961                                 LLVMX86CodeGen LLVMX86Desc
1962                                 LLVMX86Disassembler LLVMX86Info
1963                                 LLVMX86Utils LLVMipa
1964                                 LLVMipo LLVMCore)
1965                         # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1966                         list(APPEND PLATFORM_LINKLIBS -limagehlp)
1967                 endif()
1968                 
1969                 if(WITH_OPENCOLORIO)
1970                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1971                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1972                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1973                         set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1974                         set(OPENCOLORIO_DEFINITIONS)
1975                 endif()
1976
1977                 if(WITH_SDL)
1978                         set(SDL ${LIBDIR}/sdl)
1979                         set(SDL_INCLUDE_DIR ${SDL}/include)
1980                         set(SDL_LIBRARY SDL)
1981                         set(SDL_LIBPATH ${SDL}/lib)
1982                 endif()
1983
1984                 if(WITH_OPENVDB)
1985                         set(OPENVDB ${LIBDIR}/openvdb)
1986                         set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
1987                         set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
1988                         set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1989                         set(OPENVDB_DEFINITIONS)
1990                 endif()
1991
1992                 if(WITH_ALEMBIC)
1993                         # TODO(sergey): For until someone drops by and compiles libraries for
1994                         # MinGW we allow users to compile their own Alembic library and use
1995                         # that via find_package(),
1996                         #
1997                         # Once precompiled libraries are there we'll use hardcoded locations.
1998                         find_package_wrapper(Alembic)
1999                         if(WITH_ALEMBIC_HDF5)
2000                                 set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
2001                                 find_package_wrapper(HDF5)
2002                         endif()
2003                         if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
2004                                 set(WITH_ALEMBIC OFF)
2005                                 set(WITH_ALEMBIC_HDF5 OFF)
2006                         endif()
2007                 endif()
2008
2009                 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
2010
2011                 ## DISABLE - causes linking errors 
2012                 ## for re-distribution, so users dont need mingw installed
2013                 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
2014
2015         endif()
2016         
2017         # Things common to both mingw and MSVC  should go here
2018
2019         set(WINTAB_INC ${LIBDIR}/wintab/include)
2020
2021         if(WITH_OPENAL)
2022                 set(OPENAL ${LIBDIR}/openal)
2023                 set(OPENALDIR ${LIBDIR}/openal)
2024                 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
2025                 if(MSVC)
2026                         set(OPENAL_LIBRARY openal32)
2027                 else()
2028                         set(OPENAL_LIBRARY wrap_oal)
2029                 endif()
2030                 set(OPENAL_LIBPATH ${OPENAL}/lib)
2031         endif()
2032
2033         if(WITH_CODEC_SNDFILE)
2034                 set(SNDFILE ${LIBDIR}/sndfile)
2035                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
2036                 set(SNDFILE_LIBRARIES libsndfile-1)
2037                 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
2038         endif()
2039
2040         if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
2041                 add_definitions(-D__SSE__ -D__MMX__)
2042         endif()
2043
2044         if(WITH_CYCLES_OSL)
2045                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2046         
2047                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2048                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2049                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2050                 find_library(OSL_LIB_EXEC_DEBUG NAMES oslexec_d PATHS ${CYCLES_OSL}/lib)
2051                 find_library(OSL_LIB_COMP_DEBUG NAMES oslcomp_d PATHS ${CYCLES_OSL}/lib)
2052                 find_library(OSL_LIB_QUERY_DEBUG NAMES oslquery_d PATHS ${CYCLES_OSL}/lib)
2053                 list(APPEND OSL_LIBRARIES
2054                         optimized ${OSL_LIB_COMP}
2055                         optimized ${OSL_LIB_EXEC}
2056                         optimized ${OSL_LIB_QUERY}
2057                         debug ${OSL_LIB_EXEC_DEBUG}
2058                         debug ${OSL_LIB_COMP_DEBUG}
2059                         debug ${OSL_LIB_QUERY_DEBUG}
2060                 )
2061                 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2062                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2063         
2064                 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2065                         set(OSL_FOUND TRUE)
2066                 else()
2067                         message(STATUS "OSL not found")
2068                         set(WITH_CYCLES_OSL OFF)
2069                 endif()
2070         endif()
2071
2072 elseif(APPLE)
2073
2074         if(NOT DEFINED LIBDIR)
2075                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
2076         else()
2077                 message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
2078         endif()
2079         if(NOT EXISTS "${LIBDIR}/")
2080                 message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
2081         endif()
2082
2083         if(WITH_OPENAL)
2084                 find_package(OpenAL)
2085                 if(OPENAL_FOUND)
2086                         set(WITH_OPENAL ON)
2087                         set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
2088                 else()
2089                         set(WITH_OPENAL OFF)
2090                 endif()
2091         endif()
2092
2093         if(WITH_ALEMBIC)
2094                 set(ALEMBIC ${LIBDIR}/alembic)
2095                 set(ALEMBIC_INCLUDE_DIR ${ALEMBIC}/include)
2096                 set(ALEMBIC_INCLUDE_DIRS ${ALEMBIC_INCLUDE_DIR})
2097                 set(ALEMBIC_LIBPATH ${ALEMBIC}/lib)
2098                 set(ALEMBIC_LIBRARIES Alembic)
2099         endif()
2100
2101         if(WITH_OPENSUBDIV)
2102                 set(OPENSUBDIV ${LIBDIR}/opensubdiv)
2103                 set(OPENSUBDIV_LIBPATH ${OPENSUBDIV}/lib)
2104                 find_library(OSL_LIB_UTIL NAMES osdutil PATHS ${OPENSUBDIV_LIBPATH})
2105                 find_library(OSL_LIB_CPU NAMES osdCPU PATHS ${OPENSUBDIV_LIBPATH})
2106                 find_library(OSL_LIB_GPU NAMES osdGPU PATHS ${OPENSUBDIV_LIBPATH})
2107                 set(OPENSUBDIV_INCLUDE_DIR ${OPENSUBDIV}/include)
2108                 set(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
2109                 list(APPEND OPENSUBDIV_LIBRARIES ${OSL_LIB_UTIL} ${OSL_LIB_CPU} ${OSL_LIB_GPU})
2110         endif()
2111
2112         if(WITH_JACK)
2113                 find_library(JACK_FRAMEWORK
2114                         NAMES jackmp
2115                 )
2116                 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
2117                 if(NOT JACK_FRAMEWORK)
2118                         set(WITH_JACK OFF)
2119                 endif()
2120         endif()
2121
2122         if(WITH_CODEC_SNDFILE)
2123                 set(SNDFILE ${LIBDIR}/sndfile)
2124                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
2125                 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
2126                 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)  # TODO, deprecate
2127         endif()
2128
2129         if(WITH_PYTHON)
2130                 # we use precompiled libraries for py 3.5 and up by default
2131                 set(PYTHON_VERSION 3.5)
2132                 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
2133                         # normally cached but not since we include them with blender
2134                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
2135                         set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}m")
2136                         set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
2137                         set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
2138                         # set(PYTHON_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
2139                 else()
2140                         # module must be compiled against Python framework
2141                         set(_py_framework "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}")
2142
2143                         set(PYTHON_INCLUDE_DIR "${_py_framework}/include/python${PYTHON_VERSION}m")
2144                         set(PYTHON_EXECUTABLE "${_py_framework}/bin/python${PYTHON_VERSION}m")
2145                         set(PYTHON_LIBPATH "${_py_framework}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
2146                         #set(PYTHON_LIBRARY python${PYTHON_VERSION})
2147                         #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python")  # won't  build with this enabled
2148
2149                         unset(_py_framework)
2150                 endif()
2151                 
2152                 # uncached vars
2153                 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
2154                 set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
2155
2156                 if(NOT EXISTS "${PYTHON_EXECUTABLE}")
2157                         message(FATAL_ERROR "Python executable missing: ${PYTHON_EXECUTABLE}")
2158                 endif()
2159         endif()
2160
2161         if(WITH_FFTW3)
2162                 set(FFTW3 ${LIBDIR}/fftw3)
2163                 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
2164                 set(FFTW3_LIBRARIES fftw3)
2165                 set(FFTW3_LIBPATH ${FFTW3}/lib)
2166         endif()
2167
2168         set(PNG_LIBRARIES png)
2169         set(JPEG_LIBRARIES jpeg)
2170
2171         set(ZLIB /usr)
2172         set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
2173         set(ZLIB_LIBRARIES z bz2)
2174
2175         set(FREETYPE ${LIBDIR}/freetype)
2176         set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
2177         set(FREETYPE_LIBPATH ${FREETYPE}/lib)
2178         set(FREETYPE_LIBRARY freetype)
2179
2180         if(WITH_IMAGE_OPENEXR)
2181                 set(OPENEXR ${LIBDIR}/openexr)
2182                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
2183                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
2184                 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
2185                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
2186         endif()
2187
2188         if(WITH_CODEC_FFMPEG)
2189                 set(FFMPEG ${LIBDIR}/ffmpeg)
2190                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
2191                 set(FFMPEG_LIBRARIES
2192                         avcodec avdevice avformat avutil
2193                         mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg
2194                 )
2195                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
2196         endif()
2197
2198         find_library(SYSTEMSTUBS_LIBRARY
2199                 NAMES
2200                 SystemStubs
2201                 PATHS
2202         )
2203         mark_as_advanced(SYSTEMSTUBS_LIBRARY)
2204         if(SYSTEMSTUBS_LIBRARY)
2205                 list(APPEND PLATFORM_LINKLIBS SystemStubs)
2206         endif()
2207
2208         set(PLATFORM_CFLAGS "-pipe -funsigned-char")
2209         set(PLATFORM_LINKFLAGS
2210                 "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio"
2211         )
2212         if(WITH_CODEC_QUICKTIME)
2213                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
2214                 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
2215                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
2216                         # libSDL still needs 32bit carbon quicktime
2217                 endif()
2218         endif()
2219
2220         if(WITH_CXX11)
2221                 list(APPEND PLATFORM_LINKLIBS c++)
2222         else()
2223                 list(APPEND PLATFORM_LINKLIBS stdc++)
2224         endif()
2225
2226         if(WITH_JACK)
2227                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework jackmp")
2228         endif()
2229         
2230         if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
2231                 # force cmake to link right framework
2232                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")
2233         endif()
2234         
2235         if(WITH_OPENCOLLADA)
2236                 set(OPENCOLLADA ${LIBDIR}/opencollada)
2237
2238                 set(OPENCOLLADA_INCLUDE_DIRS
2239                         ${LIBDIR}/opencollada/include/COLLADAStreamWriter
2240                         ${LIBDIR}/opencollada/include/COLLADABaseUtils
2241                         ${LIBDIR}/opencollada/include/COLLADAFramework
2242                         ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
2243                         ${LIBDIR}/opencollada/include/GeneratedSaxParser
2244                 )
2245
2246                 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
2247                 set(OPENCOLLADA_LIBRARIES
2248                         OpenCOLLADASaxFrameworkLoader
2249                         -lOpenCOLLADAFramework
2250                         -lOpenCOLLADABaseUtils
2251                         -lOpenCOLLADAStreamWriter
2252                         -lMathMLSolver
2253                         -lGeneratedSaxParser
2254                         -lxml2 -lbuffer -lftoa
2255                 )
2256                 # Use UTF functions from collada if LLVM is not enabled
2257                 if(NOT WITH_LLVM)
2258                         list(APPEND OPENCOLLADA_LIBRARIES -lUTF)
2259                 endif()
2260                 # pcre is bundled with openCollada
2261                 #set(PCRE ${LIBDIR}/pcre)
2262                 #set(PCRE_LIBPATH ${PCRE}/lib)
2263                 set(PCRE_LIBRARIES pcre)
2264                 #libxml2 is used
2265                 #set(EXPAT ${LIBDIR}/expat)
2266                 #set(EXPAT_LIBPATH ${EXPAT}/lib)
2267                 set(EXPAT_LIB)
2268         endif()
2269
2270         if(WITH_SDL)
2271                 set(SDL ${LIBDIR}/sdl)
2272                 set(SDL_INCLUDE_DIR ${SDL}/include)
2273                 set(SDL_LIBRARY SDL2)
2274                 set(SDL_LIBPATH ${SDL}/lib)
2275                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lazy_framework ForceFeedback")
2276         endif()
2277
2278         set(PNG "${LIBDIR}/png")
2279         set(PNG_INCLUDE_DIRS "${PNG}/include")
2280         set(PNG_LIBPATH ${PNG}/lib)
2281
2282         set(JPEG "${LIBDIR}/jpeg")
2283         set(JPEG_INCLUDE_DIR "${JPEG}/include")
2284         set(JPEG_LIBPATH ${JPEG}/lib)
2285
2286         if(WITH_IMAGE_TIFF)
2287                 set(TIFF ${LIBDIR}/tiff)
2288                 set(TIFF_INCLUDE_DIR ${TIFF}/include)
2289                 set(TIFF_LIBRARY tiff)
2290                 set(TIFF_LIBPATH ${TIFF}/lib)
2291         endif()
2292
2293         if(WITH_BOOST)
2294                 set(BOOST ${LIBDIR}/boost)
2295                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
2296                 set(BOOST_LIBRARIES
2297                         boost_date_time-mt
2298                         boost_filesystem-mt
2299                         boost_regex-mt
2300                         boost_system-mt
2301                         boost_thread-mt
2302                         boost_wave-mt
2303                 )
2304                 if(WITH_INTERNATIONAL)
2305                         list(APPEND BOOST_LIBRARIES boost_locale-mt)
2306                 endif()
2307                 if(WITH_CYCLES_NETWORK)
2308                         list(APPEND BOOST_LIBRARIES boost_serialization-mt)
2309                 endif()
2310                 if(WITH_OPENVDB)
2311                         list(APPEND BOOST_LIBRARIES boost_iostreams-mt)
2312                 endif()
2313                 set(BOOST_LIBPATH ${BOOST}/lib)
2314                 set(BOOST_DEFINITIONS)
2315         endif()
2316         
2317         if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
2318                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale and ffmpeg needs it !
2319         endif()
2320
2321         if(WITH_OPENIMAGEIO)
2322                 set(OPENIMAGEIO ${LIBDIR}/openimageio)
2323                 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
2324                 set(OPENIMAGEIO_LIBRARIES
2325                         ${OPENIMAGEIO}/lib/libOpenImageIO.a
2326                         ${PNG_LIBRARIES}
2327                         ${JPEG_LIBRARIES}
2328                         ${TIFF_LIBRARY}
2329                         ${OPENEXR_LIBRARIES}
2330                         ${ZLIB_LIBRARIES}
2331                 )
2332                 set(OPENIMAGEIO_LIBPATH
2333                         ${OPENIMAGEIO}/lib
2334                         ${JPEG_LIBPATH}
2335                         ${PNG_LIBPATH}
2336                         ${TIFF_LIBPATH}
2337                         ${OPENEXR_LIBPATH}
2338                         ${ZLIB_LIBPATH}
2339                 )
2340                 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
2341                 set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
2342         endif()
2343
2344         if(WITH_OPENCOLORIO)
2345                 set(OPENCOLORIO ${LIBDIR}/opencolorio)
2346                 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
2347                 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
2348                 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
2349         endif()
2350
2351         if(WITH_OPENVDB)
2352                 set(OPENVDB ${LIBDIR}/openvdb)
2353                 set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
2354                 set(TBB_INCLUDE_DIRS ${LIBDIR}/tbb/include)
2355                 set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/libtbb.a)
2356                 set(OPENVDB_LIBRARIES openvdb blosc ${TBB_LIBRARIES})
2357                 set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
2358                 set(OPENVDB_DEFINITIONS)
2359         endif()
2360
2361         if(WITH_LLVM)
2362                 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
2363                 set(LLVM_VERSION "3.4" CACHE STRING     "Version of LLVM to use")
2364                 if(EXISTS "${LLVM_ROOT_DIR}/bin/llvm-config")
2365                         set(LLVM_CONFIG "${LLVM_ROOT_DIR}/bin/llvm-config")
2366                 else()
2367                         set(LLVM_CONFIG llvm-config)
2368                 endif()
2369                 execute_process(COMMAND ${LLVM_CONFIG} --version
2370                                 OUTPUT_VARIABLE LLVM_VERSION
2371                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2372                 execute_process(COMMAND ${LLVM_CONFIG} --prefix
2373                                 OUTPUT_VARIABLE LLVM_ROOT_DIR
2374                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2375                 execute_process(COMMAND ${LLVM_CONFIG} --libdir
2376                                 OUTPUT_VARIABLE LLVM_LIBPATH
2377                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2378                 find_library(LLVM_LIBRARY
2379                              NAMES LLVMAnalysis # first of a whole bunch of libs to get
2380                              PATHS ${LLVM_LIBPATH})
2381
2382                 if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
2383                         if(LLVM_STATIC)
2384                                 # if static LLVM libraries were requested, use llvm-config to generate
2385                                 # the list of what libraries we need, and substitute that in the right
2386                                 # way for LLVM_LIBRARY.
2387                                 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
2388                                                 OUTPUT_VARIABLE LLVM_LIBRARY
2389                                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2390                                 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
2391                         else()
2392                                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
2393                         endif()
2394                 else()
2395                         message(FATAL_ERROR "LLVM not found.")
2396                 endif()
2397         endif()
2398
2399         if(WITH_CYCLES_OSL)
2400                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2401         
2402                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2403                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2404                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2405                 # WARNING! depends on correct order of OSL libs linking
2406                 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
2407                 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2408                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2409         
2410                 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2411                         set(OSL_FOUND TRUE)
2412                 else()
2413                         message(STATUS "OSL not found")
2414                         set(WITH_CYCLES_OSL OFF)
2415                 endif()
2416         endif()
2417         
2418         if(WITH_OPENMP)
2419                 execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VENDOR)
2420                 string(SUBSTRING "${COMPILER_VENDOR}" 0 5 VENDOR_NAME) # truncate output
2421                 if(${VENDOR_NAME} MATCHES "Apple") # Apple does not support OpenMP reliable with gcc and not with clang
2422                         set(WITH_OPENMP OFF)
2423                 else() # vanilla gcc or clang_omp support OpenMP
2424                         message(STATUS "Using special OpenMP enabled compiler !") # letting find_package(OpenMP) module work for gcc
2425                         if(CMAKE_C_COMPILER_ID MATCHES "Clang") # clang-omp in darwin libs
2426                                 set(OPENMP_FOUND ON)
2427                                 set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "C compiler flags for OpenMP parallization" FORCE)
2428                                 set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "C++ compiler flags for OpenMP parallization" FORCE)
2429                                 include_directories(${LIBDIR}/openmp/include)
2430                                 link_directories(${LIBDIR}/openmp/lib)
2431                                 # This is a workaround for our helperbinaries ( datatoc, masgfmt, ... ),
2432                                 # They are linked also to omp lib, so we need it in builddir for runtime exexcution,
2433                                 # TODO: remove all unneeded dependencies from these
2434
2435                                 # for intermediate binaries, in respect to lib ID
2436                                 execute_process(
2437                                         COMMAND ditto -arch ${CMAKE_OSX_ARCHITECTURES}
2438                                         ${LIBDIR}/openmp/lib/libiomp5.dylib
2439                                         ${CMAKE_BINARY_DIR}/Resources/lib/libiomp5.dylib)
2440                         endif()
2441                 endif()
2442         endif()
2443
2444         set(EXETYPE MACOSX_BUNDLE)
2445
2446         set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
2447         set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
2448         if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
2449                 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2450                 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic  -msse -msse2 -msse3 -mssse3")
2451                 if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
2452                         set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
2453                         set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
2454                 endif()
2455         else()
2456                 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2457                 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2458         endif()
2459
2460         if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
2461                 # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
2462                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
2463         endif()
2464         # Get rid of eventually clashes, we export some symbols explicite as local
2465         set(PLATFORM_LINKFLAGS
2466                 "${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker ${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map"
2467         )
2468
2469         if(WITH_CXX11)
2470                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
2471                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -stdlib=libc++")
2472         endif()
2473
2474         # Suppress ranlib "has no symbols" warnings (workaround for T48250)
2475         set(CMAKE_C_ARCHIVE_CREATE   "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
2476         set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
2477         set(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
2478         set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
2479 endif()
2480
2481 #-----------------------------------------------------------------------------
2482 # Common.
2483
2484 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
2485         message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
2486 endif()
2487
2488 if(WITH_CYCLES)
2489         if(NOT WITH_OPENIMAGEIO)
2490                 message(FATAL_ERROR
2491                         "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. "
2492                         "Configure OIIO or disable WITH_CYCLES"
2493                 )
2494         endif()
2495         if(NOT WITH_BOOST)
2496                 message(FATAL_ERROR
2497                         "Cycles requires WITH_BOOST, the library may not have been found. "
2498                         "Configure BOOST or disable WITH_CYCLES"
2499                 )
2500         endif()
2501
2502         if(WITH_CYCLES_OSL)
2503                 if(NOT WITH_LLVM)
2504                         message(FATAL_ERROR
2505                                 "Cycles OSL requires WITH_LLVM, the library may not have been found. "
2506                                 "Configure LLVM or disable WITH_CYCLES_OSL"
2507                         )
2508                 endif()
2509         endif()
2510
2511         if(WITH_CYCLES_OPENSUBDIV AND NOT WITH_OPENSUBDIV)
2512                 message(STATUS "WITH_CYCLES_OPENSUBDIV requires WITH_OPENSUBDIV to be ON, turning OFF")
2513                 set(WITH_CYCLES_OPENSUBDIV OFF)
2514         endif()
2515 endif()
2516
2517 if(WITH_INTERNATIONAL)
2518         if(NOT WITH_BOOST)
2519                 message(FATAL_ERROR
2520                         "Internationalization requires WITH_BOOST, the library may not have been found. "
2521                         "Configure BOOST or disable WITH_INTERNATIONAL"
2522                 )
2523         endif()
2524 endif()
2525
2526 # See TEST_SSE_SUPPORT() for how this is defined.
2527
2528 # Do it globally, SSE2 is required for quite some time now.
2529 # Doing it now allows to use SSE/SSE2 in inline headers.
2530 if(SUPPORT_SSE_BUILD)
2531         set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
2532         add_definitions(-D__SSE__ -D__MMX__)
2533 endif()
2534 if(SUPPORT_SSE2_BUILD)
2535         set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
2536         add_definitions(-D__SSE2__)
2537         if(NOT SUPPORT_SSE_BUILD) # dont double up
2538                 add_definitions(-D__MMX__)
2539         endif()
2540 endif()
2541
2542
2543 # set the endian define
2544 if(MSVC)
2545         # for some reason this fails on msvc
2546         add_definitions(-D__LITTLE_ENDIAN__)
2547         
2548 # OSX-Note: as we do crosscompiling with specific set architecture,
2549 # endianess-detection and autosetting is counterproductive
2550 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
2551
2552 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
2553         add_definitions(-D__LITTLE_ENDIAN__)
2554 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)            
2555         add_definitions(-D__BIG_ENDIAN__)
2556         
2557 else()
2558         include(TestBigEndian)
2559         test_big_endian(_SYSTEM_BIG_ENDIAN)
2560         if(_SYSTEM_BIG_ENDIAN)
2561                 add_definitions(-D__BIG_ENDIAN__)
2562         else()
2563                 add_definitions(-D__LITTLE_ENDIAN__)
2564         endif()
2565         unset(_SYSTEM_BIG_ENDIAN)
2566 endif()
2567 if(WITH_IMAGE_OPENJPEG)
2568         if(WITH_SYSTEM_OPENJPEG)
2569                 # dealt with above
2570                 set(OPENJPEG_DEFINES "")
2571         else()
2572                 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
2573                 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2574         endif()
2575         # Special handling of Windows platform where openjpeg is always static.
2576         if(WIN32)
2577                 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2578         endif()
2579 endif()
2580
2581 if(NOT WITH_SYSTEM_EIGEN3)
2582         set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
2583 endif()
2584
2585 #-----------------------------------------------------------------------------
2586 # Configure OpenGL.
2587
2588 find_package(OpenGL)
2589 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
2590
2591 if(WITH_GLU)
2592         list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
2593         list(APPEND GL_DEFINITIONS -DWITH_GLU)
2594 endif()
2595
2596 if(WITH_SYSTEM_GLES)
2597         find_package_wrapper(OpenGLES)
2598 endif()
2599
2600 if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
2601         list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
2602
2603 elseif(WITH_GL_PROFILE_ES20)
2604         if(WITH_SYSTEM_GLES)
2605                 if(NOT OPENGLES_LIBRARY)
2606                         message(FATAL_ERROR
2607                                 "Unable to find OpenGL ES libraries. "
2608                                 "Install them or disable WITH_SYSTEM_GLES."
2609                         )
2610                 endif()
2611
2612                 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
2613
2614         else()
2615                 set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
2616                 mark_as_advanced(OPENGLES_LIBRARY)
2617
2618                 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
2619
2620                 if(NOT OPENGLES_LIBRARY)
2621                         message(FATAL_ERROR
2622                                 "To compile WITH_GL_EGL you need to set OPENGLES_LIBRARY "
2623                                 "to the file path of an OpenGL ES 2.0 library."
2624                         )
2625                 endif()
2626
2627         endif()
2628
2629         if(WIN32)
2630                 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2631
2632                 set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
2633                 mark_as_advanced(OPENGLES_DLL)
2634
2635                 if(NOT OPENGLES_DLL)
2636                         message(FATAL_ERROR
2637                                 "To compile WITH_GL_PROFILE_ES20 you need to set OPENGLES_DLL to the file "
2638                                 "path of an OpenGL ES 2.0 runtime dynamic link library (DLL)."
2639                         )
2640                 endif()
2641
2642                 if(WITH_GL_ANGLE)
2643                         list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
2644
2645                         set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
2646
2647                         get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
2648                         list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
2649
2650                         mark_as_advanced(D3DCOMPILER_DLL)
2651
2652                         if(D3DCOMPILER_DLL STREQUAL "")
2653                                 message(FATAL_ERROR
2654                                         "To compile WITH_GL_ANGLE you need to set D3DCOMPILER_DLL to the file "
2655                                         "path of a copy of the DirectX redistributable DLL file: D3DCompiler_46.dll"
2656                                 )
2657                         endif()
2658
2659                 endif()
2660
2661         endif()
2662
2663 endif()
2664
2665 if(WITH_GL_EGL)
2666         list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
2667
2668         if(WITH_SYSTEM_GLES)
2669                 if(NOT OPENGLES_EGL_LIBRARY)
2670                         message(FATAL_ERROR
2671                                 "Unable to find OpenGL ES libraries. "
2672                                 "Install them or disable WITH_SYSTEM_GLES."
2673                         )
2674                 endif()
2675
2676                 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
2677
2678         else()
2679                 set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
2680                 mark_as_advanced(OPENGLES_EGL_LIBRARY)
2681
2682                 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
2683
2684                 if(NOT OPENGLES_EGL_LIBRARY)
2685                         message(FATAL_ERROR
2686                                 "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY "
2687                                 "to the file path of an EGL library."
2688                         )
2689                 endif()
2690
2691         endif()
2692
2693         if(WIN32)
2694                 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2695
2696                 set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
2697                 mark_as_advanced(OPENGLES_EGL_DLL)
2698
2699                 if(NOT OPENGLES_EGL_DLL)
2700                         message(FATAL_ERROR
2701                                 "To compile WITH_GL_EGL you need to set OPENGLES_EGL_DLL "
2702                                 "to the file path of an EGL runtime dynamic link library (DLL)."
2703                         )
2704                 endif()
2705
2706         endif()
2707
2708 endif()
2709
2710 if(WITH_GL_PROFILE_COMPAT)
2711         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
2712 endif()
2713
2714 if(WITH_GL_PROFILE_CORE)
2715         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
2716 endif()
2717
2718 if(WITH_GL_PROFILE_ES20)
2719         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
2720 endif()
2721
2722 if(WITH_GL_EGL)
2723         list(APPEND GL_DEFINITIONS -DWITH_EGL)
2724 endif()
2725
2726 #-----------------------------------------------------------------------------
2727 # Configure OpenMP.
2728 if(WITH_OPENMP)
2729         find_package(OpenMP)
2730         if(OPENMP_FOUND)
2731                 if(NOT WITH_OPENMP_STATIC)
2732                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
2733                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
2734                 else()
2735                         # Typically avoid adding flags as defines but we can't
2736                         # pass OpenMP flags to the linker for static builds, meaning
2737                         # we can't add any OpenMP related flags to CFLAGS variables
2738                         # since they're passed to the linker as well.
2739                         add_definitions("${OpenMP_C_FLAGS}")
2740
2741                         find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
2742                 endif()
2743         else()
2744                 set(WITH_OPENMP OFF)
2745         endif()
2746
2747         mark_as_advanced(
2748                 OpenMP_C_FLAGS
2749                 OpenMP_CXX_FLAGS
2750         )
2751 endif()
2752
2753 #-----------------------------------------------------------------------------
2754 # Configure GLEW
2755
2756 if(WITH_GLEW_MX)
2757         list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
2758 endif()
2759
2760 if(WITH_SYSTEM_GLEW)
2761         find_package(GLEW)
2762
2763         # Note: There is an assumption here that the system GLEW is not a static library.
2764
2765         if(NOT GLEW_FOUND)
2766                 message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
2767         endif()
2768
2769         if(WITH_GLEW_MX)
2770                 set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
2771         else()
2772                 set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
2773         endif()
2774 else()
2775         if(WITH_GLEW_ES)
2776                 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
2777
2778                 list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
2779
2780                 # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
2781                 if(NOT WITH_GL_PROFILE_ES20)
2782                         # No ES functions are needed
2783                         list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2784                 elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
2785                         # ES is enabled, but the other functions are all disabled
2786                         list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
2787                 endif()
2788
2789                 if(WITH_GL_PROFILE_ES20)
2790                         if(WITH_GL_EGL)
2791                                 list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
2792                         endif()
2793
2794                         # ToDo: This is an experiment to eliminate ES 1 symbols,
2795                         # GLEW doesn't really properly provide this level of control
2796                         # (for example, without modification it eliminates too many symbols)
2797                         # so there are lots of modifications to GLEW to make this work,
2798                         # and no attempt to make it work beyond Blender at this point.
2799                         list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
2800                 endif()
2801
2802                 if(WITH_GL_EGL)
2803                         list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
2804                 endif()
2805
2806                 set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
2807
2808         else()
2809                 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
2810
2811                 list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
2812
2813                 # This won't affect the non-experimental glew library, 
2814                 # but is used for conditional compilation elsewhere.
2815                 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2816
2817                 set(BLENDER_GLEW_LIBRARIES extern_glew)
2818
2819         endif()
2820
2821 endif()
2822
2823 if(NOT WITH_GLU)
2824         list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
2825 endif()
2826
2827 #-----------------------------------------------------------------------------
2828 # Configure Bullet
2829
2830 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
2831         find_package(Bullet)
2832         if(NOT BULLET_FOUND)
2833                 set(WITH_BULLET OFF)
2834         endif()
2835 else()
2836         set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
2837         # set(BULLET_LIBRARIES "")
2838 endif()
2839
2840 #-----------------------------------------------------------------------------
2841 # Configure Python.
2842
2843 if(WITH_PYTHON_MODULE)
2844         add_definitions(-DPy_ENABLE_SHARED)
2845 endif()
2846
2847 #-----------------------------------------------------------------------------
2848 # Configure GLog/GFlags
2849
2850 if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
2851         set(GLOG_DEFINES
2852                 -DGOOGLE_GLOG_DLL_DECL=
2853         )
2854
2855         set(GFLAGS_DEFINES
2856                 -DGFLAGS_DLL_DEFINE_FLAG=
2857                 -DGFLAGS_DLL_DECLARE_FLAG=
2858                 -DGFLAGS_DLL_DECL=
2859         )
2860 endif()
2861
2862 #-----------------------------------------------------------------------------
2863 # Configure Ceres
2864
2865 if(WITH_LIBMV)
2866         set(CERES_DEFINES)
2867
2868         if(WITH_CXX11)
2869                 # nothing to be done
2870         elseif(SHARED_PTR_FOUND)
2871                 if(SHARED_PTR_TR1_MEMORY_HEADER)
2872                         list(APPEND CERES_DEFINES -DCERES_TR1_MEMORY_HEADER)
2873                 endif()
2874                 if(SHARED_PTR_TR1_NAMESPACE)
2875                         list(APPEND CERES_DEFINES -DCERES_TR1_SHARED_PTR)
2876                 endif()
2877         else()
2878                 message(FATAL_ERROR "Ceres: Unable to find shared_ptr.")
2879         endif()
2880
2881         if(WITH_CXX11)
2882                 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
2883         elseif(HAVE_STD_UNORDERED_MAP_HEADER)
2884                 if(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
2885                         list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
2886                 else()
2887                         if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2888                                 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE)
2889                         else()
2890                                 list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2891                                 message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2892                         endif()
2893                 endif()
2894         else()
2895                 if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2896                         list(APPEND CERES_DEFINES -DCERES_TR1_UNORDERED_MAP)
2897                 else()
2898                         list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2899                         message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2900                 endif()
2901         endif()
2902 endif()
2903
2904 #-----------------------------------------------------------------------------
2905 # Extra compile flags
2906
2907 if(CMAKE_COMPILER_IS_GNUCC)
2908
2909         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2910         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
2911         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2912         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2913         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_VLA -Werror=vla)
2914         # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
2915         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
2916         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2917         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2918         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2919         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2920         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2921         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
2922         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
2923         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
2924         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
2925         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)  # C only
2926         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2927         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2928         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
2929         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness)
2930
2931         # gcc 4.2 gives annoying warnings on every file with this
2932         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2933                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
2934         endif()
2935
2936         # versions before gcc4.6 give many BLI_math warnings
2937         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
2938                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS       -Wredundant-decls)
2939                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
2940         endif()
2941
2942         # versions before gcc4.8 include global name-space.
2943         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.8")
2944                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_SHADOW -Wshadow)
2945         endif()
2946
2947         # disable because it gives warnings for printf() & friends.
2948         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
2949
2950         if(NOT APPLE)
2951                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2952         endif()
2953
2954         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2955         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2956         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2957         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
2958         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
2959         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2960         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2961         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
2962         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2963         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2964         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2965         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2966         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith)
2967         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter)
2968         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings)
2969         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2970         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness)
2971
2972         # gcc 4.2 gives annoying warnings on every file with this
2973         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2974                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
2975         endif()
2976
2977         # causes too many warnings
2978         if(NOT APPLE)
2979                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2980                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
2981         endif()
2982
2983         # flags to undo strict flags
2984         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
2985         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER        -Wno-unused-parameter)
2986
2987         if(NOT APPLE)
2988                 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2989         endif()
2990
2991 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
2992
2993         if(APPLE AND WITH_OPENMP) # we need the Intel omp lib linked here to not fail all tests due presence of -fopenmp !
2994                 set(CMAKE_REQUIRED_FLAGS "-L${LIBDIR}/openmp/lib -liomp5") # these are only used for the checks
2995         endif()
2996
2997         # strange, clang complains these are not supported, but then yses them.
2998         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2999         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
3000         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
3001         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
3002         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
3003         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
3004         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
3005         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
3006         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
3007
3008         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
3009         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
3010         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS     -Wno-unknown-pragmas)
3011         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS     -Wno-char-subscripts)
3012         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.
3013         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE        -Wno-sign-compare)
3014         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF    -Wno-invalid-offsetof)
3015
3016         # gives too many unfixable warnings
3017         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS      -Wunused-macros)
3018         # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS          -Wunused-macros)
3019
3020         # flags to undo strict flags
3021         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
3022         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS    -Wno-unused-macros)
3023
3024         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
3025         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
3026         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
3027         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
3028         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
3029         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
3030         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
3031         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
3032
3033         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
3034         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
3035         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
3036         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
3037         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
3038
3039 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
3040
3041         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
3042         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
3043         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
3044
3045         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
3046         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
3047         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
3048
3049         # disable numbered, false positives
3050         set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
3051         set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
3052 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
3053         # most msvc warnings are C & C++
3054         set(_WARNINGS
3055                 # warning level:
3056                 "/W3"
3057                 "/w34062"  # switch statement contains 'default' but no 'case' labels
3058                 # disable:
3059                 "/wd4018"  # signed/unsigned mismatch
3060                 "/wd4146"  # unary minus operator applied to unsigned type, result still unsigned
3061                 "/wd4065"  # switch statement contains 'default' but no 'case' labels
3062                 "/wd4127"  # conditional expression is constant
3063                 "/wd4181"  # qualifier applied to reference type; ignored
3064                 "/wd4200"  # zero-sized array in struct/union
3065                 "/wd4244"  # conversion from 'type1' to 'type2', possible loss of data
3066                 "/wd4267"  # conversion from 'size_t' to 'type', possible loss of data
3067                 "/wd4305"  # truncation from 'type1' to 'type2'
3068                 "/wd4800"  # forcing value to bool 'true' or 'false'
3069                 # errors:
3070                 "/we4013"  # 'function' undefined; assuming extern returning int
3071                 "/we4431"  # missing type specifier - int assumed
3072         )
3073
3074         string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
3075         set(C_WARNINGS "${_WARNINGS}")
3076         set(CXX_WARNINGS "${_WARNINGS}")
3077         unset(_WARNINGS)
3078 endif()
3079
3080 # ensure python header is found since detection can fail, this could happen
3081 # with _any_ library but since we used a fixed python version this tends to
3082 # be most problematic.
3083 if(WITH_PYTHON)
3084         if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
3085                 message(FATAL_ERROR
3086                         "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
3087                         "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
3088                         "to a valid python include path. Containing "
3089                         "Python.h for python version \"${PYTHON_VERSION}\""
3090                 )
3091         endif()
3092
3093         if(WIN32 OR APPLE)
3094                 # pass, we have this in an archive to extract
3095         elseif(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
3096                 find_python_package(numpy)
3097         endif()
3098
3099         if(WIN32 OR APPLE)
3100                 # pass, we have this in lib/python/site-packages
3101         elseif(WITH_PYTHON_INSTALL_REQUESTS)
3102                 find_python_package(requests)
3103         endif()
3104 endif()
3105
3106 if(WITH_CXX11)
3107         if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
3108                 # TODO(sergey): Do we want c++11 or gnu-c++11 here?
3109                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
3110         elseif(MSVC12)
3111                 # Nothing special is needed, C++11 features are available by default.
3112         else()
3113                 message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER_ID} is not supported for C++11 build yet")
3114         endif()
3115 else()
3116         # GCC-6 switched to C++11 by default, which would break linking with existing libraries
3117         # by default. So we explicitly disable C++11 for a new GCC so no linking issues happens.
3118         if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "6.0"))
3119                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
3120                 # We also disable any of C++11 ABI from usage, so we wouldn't even try to
3121                 # link to stuff from std::__cxx11 namespace.
3122                 add_definitions("-D_GLIBCXX_USE_CXX11_ABI=0")
3123         endif()
3124 endif()
3125
3126 # Visual Studio has all standards it supports available by default
3127 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
3128         # Use C99 + GNU extensions, works with GCC, Clang, ICC
3129         if(WITH_C11)
3130                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
3131         else()
3132                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
3133         endif()
3134 endif()
3135
3136 # Include warnings first, so its possible to disable them with user defined flags
3137 # eg: -Wno-uninitialized
3138 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
3139 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
3140
3141 # defined above, platform spesific but shared names
3142 mark_as_advanced(
3143         CYCLES_OSL
3144         OSL_LIB_EXEC
3145         OSL_COMPILER
3146         OSL_LIB_COMP
3147         OSL_LIB_QUERY
3148         OSL_INCLUDE_DIR
3149 )
3150
3151 mark_as_advanced(
3152         LLVM_CONFIG
3153         LLVM_ROOT_DIR
3154         LLVM_LIBRARY
3155         LLVM_VERSION
3156 )
3157
3158 #-------------------------------------------------------------------------------
3159 # Global Defines
3160
3161 # better not set includes here but this debugging option is off by default.
3162 if(WITH_CXX_GUARDEDALLOC)
3163         include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
3164         add_definitions(-DWITH_CXX_GUARDEDALLOC)
3165 endif()
3166
3167 if(WITH_ASSERT_ABORT)
3168         add_definitions(-DWITH_ASSERT_ABORT)
3169 endif()
3170
3171 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
3172 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
3173
3174 #-----------------------------------------------------------------------------
3175 # Libraries
3176
3177 if(WITH_GTESTS)
3178         include(GTestTesting)
3179 endif()
3180
3181 if(WITH_BLENDER OR WITH_PLAYER)
3182         add_subdirectory(intern)
3183         add_subdirectory(extern)
3184
3185         # source after intern and extern to gather all
3186         # internal and external library information first, for test linking
3187         add_subdirectory(source)
3188 elseif(WITH_CYCLES_STANDALONE)
3189         add_subdirectory(intern/cycles)
3190         add_subdirectory(extern/clew)
3191         if(WITH_CUDA_DYNLOAD)
3192                 add_subdirectory(extern/cuew)
3193         endif()
3194         if(NOT WITH_SYSTEM_GLEW)
3195                 add_subdirectory(extern/glew)
3196         endif()
3197 endif()
3198
3199 #-----------------------------------------------------------------------------
3200 # Blender Application
3201 if(WITH_BLENDER)
3202         add_subdirectory(source/creator)
3203 endif()
3204
3205
3206 #-----------------------------------------------------------------------------
3207 # Blender Player
3208 if(WITH_PLAYER)
3209         add_subdirectory(source/blenderplayer)
3210 endif()
3211
3212
3213 #-----------------------------------------------------------------------------
3214 # Testing
3215 add_subdirectory(tests)
3216
3217
3218 #-----------------------------------------------------------------------------
3219 # CPack for generating packages
3220 include(build_files/cmake/packaging.cmake)
3221
3222 #-----------------------------------------------------------------------------
3223 # Use dynamic loading for OpenMP
3224 if(WITH_BLENDER)
3225         openmp_delayload(blender)
3226 endif(WITH_BLENDER)
3227 if(WITH_PLAYER)
3228         openmp_delayload(blenderplayer)
3229 endif(WITH_PLAYER)
3230
3231 #-----------------------------------------------------------------------------
3232 # Print Final Configuration
3233
3234 if(FIRST_RUN)
3235
3236         set(_config_msg "\nBlender Configuration\n=====================")
3237
3238         function(info_cfg_option
3239                 _setting
3240                 )
3241
3242                 set(_msg "  - ${_setting}")
3243                 string(LENGTH "${_msg}" _len)
3244                 while("32" GREATER "${_len}")
3245                         set(_msg "${_msg} ")
3246                         math(EXPR _len "${_len} + 1")
3247                 endwhile()
3248
3249                 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE)
3250         endfunction()
3251
3252         function(info_cfg_text
3253                 _text
3254                 )
3255
3256                 set(_config_msg "${_config_msg}\n\n  ${_text}" PARENT_SCOPE)
3257         endfunction()
3258
3259         message(STATUS "C Compiler:   \"${CMAKE_C_COMPILER_ID}\"")
3260         message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
3261
3262         info_cfg_text("Build Options:")
3263         info_cfg_option(WITH_GAMEENGINE)
3264         info_cfg_option(WITH_PLAYER)
3265         info_cfg_option(WITH_BULLET)
3266         info_cfg_option(WITH_IK_SOLVER)
3267         info_cfg_option(WITH_IK_ITASC)
3268         info_cfg_option(WITH_OPENCOLLADA)
3269         info_cfg_option(WITH_FFTW3)
3270         info_cfg_option(WITH_INTERNATIONAL)
3271         info_cfg_option(WITH_INPUT_NDOF)
3272         info_cfg_option(WITH_CYCLES)
3273         info_cfg_option(WITH_FREESTYLE)
3274         info_cfg_option(WITH_OPENCOLORIO)
3275         info_cfg_option(WITH_OPENVDB)
3276         info_cfg_option(WITH_ALEMBIC)
3277
3278         info_cfg_text("Compiler Options:")
3279         info_cfg_option(WITH_BUILDINFO)
3280         info_cfg_option(WITH_OPENMP)
3281         info_cfg_option(WITH_RAYOPTIMIZATION)
3282
3283         info_cfg_text("System Options:")
3284         info_cfg_option(WITH_INSTALL_PORTABLE)
3285         info_cfg_option(WITH_X11_ALPHA)
3286         info_cfg_option(WITH_X11_XF86VMODE)
3287         info_cfg_option(WITH_X11_XINPUT)
3288         info_cfg_option(WITH_MEM_JEMALLOC)
3289         info_cfg_option(WITH_MEM_VALGRIND)
3290         info_cfg_option(WITH_SYSTEM_GLEW)
3291         info_cfg_option(WITH_SYSTEM_OPENJPEG)
3292
3293         info_cfg_text("Image Formats:")
3294         info_cfg_option(WITH_OPENIMAGEIO)
3295         info_cfg_option(WITH_IMAGE_CINEON)
3296         info_cfg_option(WITH_IMAGE_DDS)
3297         info_cfg_option(WITH_IMAGE_HDR)
3298         info_cfg_option(WITH_IMAGE_OPENEXR)
3299         info_cfg_option(WITH_IMAGE_OPENJPEG)
3300         info_cfg_option(WITH_IMAGE_TIFF)
3301
3302         info_cfg_text("Audio:")
3303         info_cfg_option(WITH_OPENAL)
3304         info_cfg_option(WITH_SDL)
3305         info_cfg_option(WITH_SDL_DYNLOAD)
3306         info_cfg_option(WITH_JACK)
3307         info_cfg_option(WITH_JACK_DYNLOAD)
3308         info_cfg_option(WITH_CODEC_AVI)
3309         info_cfg_option(WITH_CODEC_FFMPEG)
3310         info_cfg_option(WITH_CODEC_SNDFILE)
3311
3312         info_cfg_text("Compression:")
3313         info_cfg_option(WITH_LZMA)
3314         info_cfg_option(WITH_LZO)
3315
3316         info_cfg_text("Python:")
3317         info_cfg_option(WITH_PYTHON_INSTALL)
3318         info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
3319         info_cfg_option(WITH_PYTHON_MODULE)
3320         info_cfg_option(WITH_PYTHON_SAFETY)
3321         if(APPLE)
3322                 info_cfg_option(WITH_PYTHON_FRAMEWORK)
3323         endif()
3324
3325         info_cfg_text("Modifiers:")
3326         info_cfg_option(WITH_MOD_BOOLEAN)
3327         info_cfg_option(WITH_MOD_REMESH)
3328         info_cfg_option(WITH_MOD_FLUID)
3329         info_cfg_option(WITH_MOD_OCEANSIM)
3330
3331         info_cfg_text("OpenGL:")
3332         info_cfg_option(WITH_GLEW_ES)
3333         info_cfg_option(WITH_GLU)
3334         info_cfg_option(WITH_GL_EGL)
3335         info_cfg_option(WITH_GL_PROFILE_COMPAT)
3336         info_cfg_option(WITH_GL_PROFILE_CORE)
3337         info_cfg_option(WITH_GL_PROFILE_ES20)
3338         if(WIN32)
3339                 info_cfg_option(WITH_GL_ANGLE)
3340         endif()
3341
3342         info_cfg_text("")
3343
3344         message("${_config_msg}")
3345 endif()
3346
3347 if(0)
3348         print_all_vars()
3349 endif()
3350