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