1 # ***** BEGIN GPL LICENSE BLOCK *****
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.
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.
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.
17 # The Original Code is Copyright (C) 2006, Blender Foundation
18 # All rights reserved.
20 # The Original Code is: all of this file.
22 # Contributor(s): Jacques Beaurain.
24 # ***** END GPL LICENSE BLOCK *****
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.
31 if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
32 if(NOT DEFINED WITH_IN_SOURCE_BUILD)
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.:"
37 "\n rm CMakeCache.txt"
43 "\n Alternately define WITH_IN_SOURCE_BUILD to force this option (not recommended!)"
48 cmake_minimum_required(VERSION 2.8)
50 if(NOT EXECUTABLE_OUTPUT_PATH)
56 # this starts out unset
57 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
59 # avoid having empty buildtype
60 set(CMAKE_BUILD_TYPE_INIT "Release")
62 # quiet output for Makefiles, 'make -s' helps too
63 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
65 # global compile definitions since add_definitions() adds for all.
67 if(NOT (${CMAKE_VERSION} VERSION_LESS 3.0))
68 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
69 $<$<CONFIG:Debug>:DEBUG;_DEBUG>
70 $<$<CONFIG:Release>:NDEBUG>
71 $<$<CONFIG:MinSizeRel>:NDEBUG>
72 $<$<CONFIG:RelWithDebInfo>:NDEBUG>
75 # keep until CMake-3.0 is min requirement
76 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG _DEBUG)
77 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE NDEBUG)
78 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL NDEBUG)
79 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO NDEBUG)
82 #-----------------------------------------------------------------------------
85 # see "cmake --help-policy CMP0003"
86 # So library linking is more sane
87 cmake_policy(SET CMP0003 NEW)
89 # So BUILDINFO and BLENDERPATH strings are automatically quoted
90 cmake_policy(SET CMP0005 NEW)
92 # So syntax problems are errors
93 cmake_policy(SET CMP0010 NEW)
95 # Input directories must have CMakeLists.txt
96 cmake_policy(SET CMP0014 NEW)
98 #-----------------------------------------------------------------------------
100 include(build_files/cmake/macros.cmake)
103 #-----------------------------------------------------------------------------
104 # Initialize project.
106 blender_project_hack_pre()
110 blender_project_hack_post()
114 #-----------------------------------------------------------------------------
115 # Redirect output files
117 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
118 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
119 set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests CACHE INTERNAL "" FORCE)
121 #-----------------------------------------------------------------------------
122 # Set default config options
124 get_blender_version()
127 #-----------------------------------------------------------------------------
128 # Platform Specific Defaults
134 macro(option_defaults_init)
135 foreach(_var ${ARGV})
137 list(APPEND _init_vars "${_var}")
142 # remove from namespace
143 macro(option_defaults_clear)
144 foreach(_var ${_init_vars})
152 # values to initialize WITH_****
153 option_defaults_init(
169 if (UNIX AND NOT APPLE)
170 # some of these libraries are problematic on Linux
171 # disable less important dependencies by default
172 set(_init_CODEC_FFMPEG OFF)
173 set(_init_CYCLES_OSL OFF)
174 set(_init_IMAGE_OPENEXR OFF)
175 set(_init_INPUT_NDOF OFF)
177 set(_init_OPENCOLLADA OFF)
178 set(_init_OPENCOLORIO OFF)
181 set(_init_OPENSUBDIV OFF)
186 set(_init_OPENSUBDIV OFF)
190 #-----------------------------------------------------------------------------
193 # First platform spesific non-cached vars
194 if(UNIX AND NOT APPLE)
198 # Blender internal features
199 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
200 mark_as_advanced(WITH_BLENDER)
202 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
204 option(WITH_PYTHON "Enable Embedded Python API (only disable for development)" ON)
205 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON)
206 mark_as_advanced(WITH_PYTHON) # dont want people disabling this unless they really know what they are doing.
207 mark_as_advanced(WITH_PYTHON_SECURITY) # some distributions see this as a security issue, rather than have them patch it, make a build option.
209 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)
210 mark_as_advanced(WITH_PYTHON_SAFETY)
211 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)
213 option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
216 option(WITH_BUILDINFO "Include extra build details (only disable for development & faster builds)" ${_init_BUILDINFO})
217 if(${CMAKE_VERSION} VERSION_LESS 2.8.8)
218 # add_library OBJECT arg unsupported
219 set(WITH_BUILDINFO OFF)
222 option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
223 option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
224 option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke and audio effects)" ${_init_FFTW3})
225 option(WITH_BULLET "Enable Bullet (Physics Engine)" ON)
226 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
227 mark_as_advanced(WITH_SYSTEM_BULLET)
228 option(WITH_GAMEENGINE "Enable Game Engine" ${_init_GAMEENGINE})
229 option(WITH_PLAYER "Build Player" OFF)
230 option(WITH_OPENCOLORIO "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
233 option(WITH_COMPOSITOR "Enable the tile based nodal compositor" ON)
235 option(WITH_OPENSUBDIV "Enable OpenSubdiv for surface subdivision" _init_OPENSUBDIV)
237 option(WITH_OPENVDB "Enable features relying on OpenVDB" OFF)
238 option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" OFF)
240 # GHOST Windowing Library Options
241 option(WITH_GHOST_DEBUG "Enable debugging output for the GHOST library" OFF)
242 mark_as_advanced(WITH_GHOST_DEBUG)
244 option(WITH_GHOST_SDL "Enable building Blender against SDL for windowing rather than the native APIs" OFF)
245 mark_as_advanced(WITH_GHOST_SDL)
248 option(WITH_GHOST_XDND "Enable drag'n'drop support on X11 using XDND protocol" ON)
252 option(WITH_HEADLESS "Build without graphical support (renderfarm, server mode only)" OFF)
253 mark_as_advanced(WITH_HEADLESS)
255 option(WITH_AUDASPACE "Build with blenders audio library (only disable if you know what you're doing!)" ON)
256 option(WITH_SYSTEM_AUDASPACE "Build with external audaspace library installed on the system (only enable if you know what you're doing!)" OFF)
257 mark_as_advanced(WITH_AUDASPACE)
258 mark_as_advanced(WITH_SYSTEM_AUDASPACE)
260 if(NOT WITH_AUDASPACE)
261 set(WITH_SYSTEM_AUDASPACE OFF)
264 option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ON)
265 if(UNIX AND NOT APPLE)
266 option(WITH_OPENMP_STATIC "Link OpenMP statically (only used by the release environment)" OFF)
267 mark_as_advanced(WITH_OPENMP_STATIC)
271 option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)" ON)
272 option(WITH_X11_XF86VMODE "Enable X11 video mode switching" ON)
275 if(UNIX AND NOT APPLE)
276 option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
277 option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system" ON)
279 # not an option for other OS's
280 set(WITH_SYSTEM_GLEW OFF)
281 set(WITH_SYSTEM_GLES OFF)
285 # (unix defaults to System OpenJPEG On)
286 option(WITH_SYSTEM_OPENJPEG "Use the operating systems OpenJPEG library" OFF)
288 if(UNIX AND NOT APPLE)
289 option(WITH_SYSTEM_EIGEN3 "Use the systems Eigen3 library" OFF)
294 option(WITH_MOD_FLUID "Enable Elbeem Modifier (Fluid Simulation)" ON)
295 option(WITH_MOD_SMOKE "Enable Smoke Modifier (Smoke Simulation)" ON)
296 option(WITH_MOD_BOOLEAN "Enable Boolean Modifier" ON)
297 option(WITH_MOD_REMESH "Enable Remesh Modifier" ON)
298 # option(WITH_MOD_CLOTH_ELTOPO "Enable Experimental cloth solver" OFF) # this is now only available in a branch
299 # mark_as_advanced(WITH_MOD_CLOTH_ELTOPO)
300 option(WITH_MOD_OCEANSIM "Enable Ocean Modifier" OFF)
302 # Image format support
303 option(WITH_OPENIMAGEIO "Enable OpenImageIO Support (http://www.openimageio.org)" ON)
304 option(WITH_IMAGE_OPENEXR "Enable OpenEXR Support (http://www.openexr.com)" ${_init_IMAGE_OPENEXR})
305 option(WITH_IMAGE_OPENJPEG "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
306 option(WITH_IMAGE_TIFF "Enable LibTIFF Support" ON)
307 option(WITH_IMAGE_DDS "Enable DDS Image Support" ON)
308 option(WITH_IMAGE_CINEON "Enable CINEON and DPX Image Support" ON)
309 option(WITH_IMAGE_HDR "Enable HDR Image Support" ON)
310 option(WITH_IMAGE_FRAMESERVER "Enable image FrameServer Support for rendering" ON)
312 # Audio/Video format support
313 option(WITH_CODEC_AVI "Enable Blenders own AVI file support (raw/jpeg)" ON)
314 option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" ${_init_CODEC_FFMPEG})
315 option(WITH_CODEC_SNDFILE "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF)
318 option(WITH_CODEC_QUICKTIME "Enable Quicktime Support" ON)
322 # Disable opencollada when we don't have precompiled libs
323 option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" ${_init_OPENCOLLADA})
326 option(WITH_SDL "Enable SDL for sound and joystick support" ${_init_SDL})
327 option(WITH_OPENAL "Enable OpenAL Support (http://www.openal.org)" ON)
328 option(WITH_JACK "Enable Jack Support (http://www.jackaudio.org)" ${_init_JACK})
329 if(UNIX AND NOT APPLE)
330 option(WITH_JACK_DYNLOAD "Enable runtime dynamic Jack libraries loading" OFF)
332 if(UNIX AND NOT APPLE)
333 option(WITH_SDL_DYNLOAD "Enable runtime dynamic SDL libraries loading" OFF)
337 option(WITH_LZO "Enable fast LZO compression (used for pointcache)" ON)
338 option(WITH_LZMA "Enable best LZMA compression, (used for pointcache)" ON)
339 if(UNIX AND NOT APPLE)
340 option(WITH_SYSTEM_LZO "Use the system LZO library" OFF)
343 # Camera/motion tracking
344 option(WITH_LIBMV "Enable Libmv structure from motion library" ON)
345 option(WITH_LIBMV_SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." OFF)
346 mark_as_advanced(WITH_LIBMV_SCHUR_SPECIALIZATIONS)
349 option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
353 option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
355 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ${_init_INPUT_NDOF})
356 option(WITH_RAYOPTIMIZATION "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
357 if(UNIX AND NOT APPLE)
358 option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
359 option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
361 option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
362 mark_as_advanced(WITH_BOOST_ICU)
365 option(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON)
366 option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder" ON)
367 set(PYTHON_NUMPY_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'numpy' module")
368 mark_as_advanced(PYTHON_NUMPY_PATH)
369 option(WITH_CPU_SSE "Enable SIMD instruction if they're detected on the host machine" ON)
370 mark_as_advanced(WITH_CPU_SSE)
372 if(UNIX AND NOT APPLE)
373 option(WITH_PYTHON_INSTALL_REQUESTS "Copy system requests into the blender install folder" ON)
374 set(PYTHON_REQUESTS_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'requests' module")
375 mark_as_advanced(PYTHON_REQUESTS_PATH)
379 option(WITH_CYCLES "Enable Cycles Render Engine" ON)
380 option(WITH_CYCLES_STANDALONE "Build Cycles standalone application" OFF)
381 option(WITH_CYCLES_STANDALONE_GUI "Build Cycles standalone with GUI" OFF)
382 option(WITH_CYCLES_OSL "Build Cycles with OSL support" ${_init_CYCLES_OSL})
383 option(WITH_CYCLES_CUDA_BINARIES "Build Cycles CUDA binaries" OFF)
384 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_37 sm_50 sm_52 CACHE STRING "CUDA architectures to build binaries for")
385 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
386 unset(PLATFORM_DEFAULT)
387 option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
388 option(WITH_CYCLES_DEBUG "Build Cycles with extra debug capabilities" OFF)
389 mark_as_advanced(WITH_CYCLES_LOGGING)
390 mark_as_advanced(WITH_CYCLES_DEBUG)
392 option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
393 mark_as_advanced(WITH_CUDA_DYNLOAD)
396 option(WITH_LLVM "Use LLVM" OFF)
398 option(LLVM_STATIC "Link with LLVM static libraries" ON) # we prefer static llvm build on Apple, dyn build possible though
400 option(LLVM_STATIC "Link with LLVM static libraries" OFF)
402 mark_as_advanced(LLVM_STATIC)
404 # disable for now, but plan to support on all platforms eventually
405 option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" ON)
406 mark_as_advanced(WITH_MEM_JEMALLOC)
408 # currently only used for BLI_mempool
409 option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
410 mark_as_advanced(WITH_MEM_VALGRIND)
413 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
414 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
416 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
417 mark_as_advanced(WITH_ASSERT_ABORT)
419 option(WITH_BOOST "Enable features depending on boost" ON)
422 option(WITH_GTESTS "Enable GTest unit testing" OFF)
426 if(UNIX AND NOT APPLE)
427 option(WITH_DOC_MANPAGE "Create a manual page (Unix manpage)" OFF)
433 option(WITH_GLEW_MX "Support multiple GLEW contexts (experimental)" OFF )
434 option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
435 option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
436 option(WITH_GL_PROFILE_COMPAT "Support using the OpenGL 'compatibility' profile. (deprecated)" ON )
437 option(WITH_GL_PROFILE_CORE "Support using the OpenGL 3.2+ 'core' profile." OFF)
438 option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
444 WITH_GL_PROFILE_COMPAT
449 if(WITH_GL_PROFILE_COMPAT)
456 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)
457 mark_as_advanced(WITH_GL_ANGLE)
460 if(WITH_GLEW_ES AND WITH_SYSTEM_GLEW)
461 message(WARNING Ignoring WITH_SYSTEM_GLEW and using WITH_GLEW_ES)
462 set(WITH_SYSTEM_GLEW OFF)
466 getDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
467 set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
470 # Experimental support of C++11
471 option(WITH_CPP11 "Build with C++11 standard enabled, for development use only!" OFF)
472 mark_as_advanced(WITH_CPP11)
475 option(WITH_LEGACY_DEPSGRAPH "Build Blender with legacy dependency graph" ON)
476 mark_as_advanced(WITH_LEGACY_DEPSGRAPH)
479 option_defaults_clear()
485 # By default we want to install to the directory we are compiling our executables
486 # unless specified otherwise, which we currently do not allow
487 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
489 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
491 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
493 if(WITH_INSTALL_PORTABLE)
494 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH} CACHE PATH "default install path" FORCE)
504 if(${CMAKE_VERSION} VERSION_LESS 3.0) # else breaks setting CMP0043 policy
505 cmake_minimum_required(VERSION 2.8.8)
506 cmake_policy(VERSION 2.8.8)
509 if(NOT CMAKE_OSX_ARCHITECTURES)
510 set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
511 "Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
515 execute_process(COMMAND uname -r OUTPUT_VARIABLE MAC_SYS) # check for actual system-version
516 if(${MAC_SYS} MATCHES 15)
517 set(OSX_SYSTEM 10.11)
518 # throw an error here, older cmake cannot handle 2 digit subversion!
519 cmake_minimum_required(VERSION 3.0.0)
520 elseif(${MAC_SYS} MATCHES 14)
521 set(OSX_SYSTEM 10.10)
522 # throw an error here, older cmake cannot handle 2 digit subversion!
523 cmake_minimum_required(VERSION 3.0.0)
524 elseif(${MAC_SYS} MATCHES 13)
526 elseif(${MAC_SYS} MATCHES 12)
528 elseif(${MAC_SYS} MATCHES 11)
530 elseif(${MAC_SYS} MATCHES 10)
532 elseif(${MAC_SYS} MATCHES 9)
535 set(OSX_SYSTEM unsupported)
538 # workaround for incorrect cmake xcode lookup for developer previews - XCODE_VERSION does not take xcode-select path into accout
539 # but would always look into /Applications/Xcode.app while dev versions are named Xcode<version>-DP<preview_number>
540 execute_process(COMMAND xcode-select --print-path OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
541 string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case
543 if(${CMAKE_GENERATOR} MATCHES "Xcode")
545 if(${XCODE_VERSION} VERSION_GREATER 4.2) # earlier xcode has no bundled developer dir, no sense in getting xcode path from
546 string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME) # reduce to XCode name without dp extension
547 if(${DP_NAME} MATCHES Xcode5)
552 ##### cmake incompatibility with xcode 4.3 and higher #####
553 if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
554 message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
556 ### end cmake incompatibility with xcode 4.3 and higher ###
558 if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
559 # Xcode 4 defaults to the Apple LLVM Compiler.
560 # Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
561 set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
562 message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
564 else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
565 execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
566 string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
567 unset(XCODE_VERS_BUILD_NR)
570 message(STATUS "Detected OS X ${OSX_SYSTEM} and Xcode ${XCODE_VERSION} at ${XCODE_BUNDLE}")
572 if(${XCODE_VERSION} VERSION_LESS 4.3)
573 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE) # use guaranteed existing sdk
575 # note: xcode-select path could be ambigous, cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
576 # so i use a selfcomposed bundlepath here
577 set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
578 message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
579 set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
580 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
581 if(${CMAKE_GENERATOR} MATCHES "Xcode")
582 set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM}) # to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
586 if(OSX_SYSTEM MATCHES 10.9)
587 set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT}) # make sure syslibs and headers are looked up in sdk ( expecially for 10.9 openGL atm. )
590 if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
591 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" CACHE STRING "" FORCE) # 10.6 is our min. target, if you use higher sdk, weak linking happens
594 if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
595 # force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
596 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
597 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
598 add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
601 option(WITH_LIBS10.5 "Use 10.5 libs (needed for 64bit builds)" OFF)
605 #-----------------------------------------------------------------------------
606 # Check for conflicting/unsupported configurations
608 if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_STANDALONE)
609 message(FATAL_ERROR "At least one of WITH_BLENDER or WITH_PLAYER or WITH_CYCLES_STANDALONE must be enabled, nothing to do!")
612 if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
613 message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
616 if(NOT WITH_AUDASPACE)
618 message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
621 message(FATAL_ERROR "WITH_JACK requires WITH_AUDASPACE")
624 message(FATAL_ERROR "WITH_GAMEENGINE requires WITH_AUDASPACE")
628 if(NOT WITH_SDL AND WITH_GHOST_SDL)
629 message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
632 # python module, needs some different options
633 if(WITH_PYTHON_MODULE AND WITH_PLAYER)
634 message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PLAYER to be OFF")
637 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
638 message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
642 # may as well build python module without a UI
643 if(WITH_PYTHON_MODULE)
644 set(WITH_HEADLESS ON)
651 # enable boost for cycles, audaspace or i18n
652 # otherwise if the user disabled
654 # Explicitly disabled. so disable all deps.
658 message(STATUS "'WITH_BOOST' is disabled: forceing 'set(${_setting} ${_val})'")
660 set(${_setting} ${_val})
663 set_and_warn(WITH_CYCLES OFF)
664 set_and_warn(WITH_AUDASPACE OFF)
665 set_and_warn(WITH_INTERNATIONAL OFF)
666 set_and_warn(WITH_OPENVDB OFF)
667 set_and_warn(WITH_OPENCOLORIO OFF)
668 set_and_warn(WITH_MOD_BOOLEAN OFF)
670 set_and_warn(WITH_OPENAL OFF) # depends on AUDASPACE
671 set_and_warn(WITH_GAMEENGINE OFF) # depends on AUDASPACE
672 set_and_warn(WITH_PLAYER OFF) # depends on GAMEENGINE
673 elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_AUDASPACE OR WITH_INTERNATIONAL OR WITH_OPENVDB OR WITH_OPENCOLORIO OR WITH_MOD_BOOLEAN)
676 # Enabled but we don't need it
680 # auto enable openimageio for cycles
682 set(WITH_OPENIMAGEIO ON)
684 # auto enable llvm for cycles_osl
686 set(WITH_LLVM ON CACHE BOOL "" FORCE)
689 set(WITH_CYCLES_OSL OFF)
692 # auto enable openimageio linking dependencies
694 set(WITH_IMAGE_OPENEXR ON)
695 set(WITH_IMAGE_TIFF ON)
698 # don't store paths to libs for portable distribution
699 if(WITH_INSTALL_PORTABLE)
700 set(CMAKE_SKIP_BUILD_RPATH TRUE)
703 if(WITH_GHOST_SDL OR WITH_HEADLESS)
705 set(WITH_X11_XINPUT OFF)
706 set(WITH_X11_XF86VMODE OFF)
707 set(WITH_GHOST_XDND OFF)
708 set(WITH_INPUT_IME OFF)
712 TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
714 message(STATUS "SSE and SSE2 optimizations are DISABLED!")
715 set(COMPILER_SSE_FLAG)
716 set(COMPILER_SSE2_FLAG)
719 TEST_SHARED_PTR_SUPPORT()
720 TEST_UNORDERED_MAP_SUPPORT()
723 if(WITH_SYSTEM_AUDASPACE)
724 set(AUDASPACE_DEFINITIONS
726 -DWITH_SYSTEM_AUDASPACE
727 "-DAUD_DEVICE_H=<AUD_Device.h>"
728 "-DAUD_SPECIAL_H=<AUD_Special.h>"
729 "-DAUD_SOUND_H=<AUD_Sound.h>"
730 "-DAUD_HANDLE_H=<AUD_Handle.h>"
731 "-DAUD_SEQUENCE_H=<AUD_Sequence.h>"
732 "-DAUD_TYPES_H=<AUD_Types.h>"
733 "-DAUD_PYTHON_H=<python/PyAPI.h>"
736 set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
737 set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
738 set(AUDASPACE_DEFINITIONS
740 "-DAUD_DEVICE_H=<AUD_C-API.h>"
741 "-DAUD_SPECIAL_H=<AUD_C-API.h>"
742 "-DAUD_SOUND_H=<AUD_C-API.h>"
743 "-DAUD_HANDLE_H=<AUD_C-API.h>"
744 "-DAUD_SEQUENCE_H=<AUD_C-API.h>"
745 "-DAUD_TYPES_H=<AUD_Space.h>"
750 #-----------------------------------------------------------------------------
751 # Check for valid directories
752 # ... a partial checkout may cause this.
754 # note: we need to check for a known subdir in both cases.
755 # since uninitialized git submodules will give blank dirs
757 if(WITH_INTERNATIONAL)
758 if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/datafiles/locale/languages")
759 message(WARNING "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
760 "This is a 'git submodule', which are known not to work with bridges to other version "
761 "control systems, disabling 'WITH_INTERNATIONAL'.")
762 set(WITH_INTERNATIONAL OFF)
767 if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/scripts/addons/modules")
768 message(WARNING "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
769 "This is a 'git submodule', which are known not to work with bridges to other version "
770 "control systems: * CONTINUING WITHOUT ADDONS *")
774 #-----------------------------------------------------------------------------
775 # Initialize un-cached vars, avoid unused warning
777 # linux only, not cached
778 set(WITH_BINRELOC OFF)
780 # MAXOSX only, set to avoid uninitialized
786 # these are added to later on.
790 # for gcc -Wno-blah-blah
791 set(CC_REMOVE_STRICT_FLAGS)
793 # libraries to link the binary with passed to target_link_libraries()
794 # known as LLIBS to scons
795 set(PLATFORM_LINKLIBS "")
797 # Added to linker flags in setup_liblinks
798 # - CMAKE_EXE_LINKER_FLAGS
799 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
800 set(PLATFORM_LINKFLAGS "")
801 set(PLATFORM_LINKFLAGS_DEBUG "")
804 # For alternate Python locations the commandline can be used to override detected/default cache settings, e.g:
807 # -D PYTHON_VERSION=3.5 \
808 # -D PYTHON_INCLUDE_DIR=/opt/py35/include/python3.5d \
809 # -D PYTHON_LIBRARY=/opt/py35/lib/libpython3.5d.so
813 # -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.5/include/python3.5 \
814 # -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/config \
817 # When changing any of this remember to update the notes in doc/build_systems/cmake.txt
819 #-----------------------------------------------------------------------------
823 find_package(X11 REQUIRED)
825 find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
826 mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
828 list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
832 list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
834 set(WITH_X11_XINPUT OFF)
838 if(WITH_X11_XF86VMODE)
839 # XXX, why dont cmake make this available?
840 find_library(X11_Xxf86vmode_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
841 mark_as_advanced(X11_Xxf86vmode_LIB)
842 if(X11_Xxf86vmode_LIB)
843 list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
845 set(WITH_X11_XF86VMODE OFF)
852 # ----------------------------------------------------------------------------
853 # Main Platform Checks
859 if(UNIX AND NOT APPLE)
860 macro(find_package_wrapper)
862 find_package_static(${ARGV})
864 find_package(${ARGV})
868 find_package_wrapper(JPEG REQUIRED)
869 find_package_wrapper(PNG REQUIRED)
870 find_package_wrapper(ZLIB REQUIRED)
871 find_package_wrapper(Freetype REQUIRED)
873 if(WITH_LZO AND WITH_SYSTEM_LZO)
874 find_package_wrapper(LZO)
876 message(FATAL_ERROR "Failed finding system LZO version!")
880 if(WITH_SYSTEM_EIGEN3)
881 find_package_wrapper(Eigen3)
883 message(FATAL_ERROR "Failed finding system Eigen3 version!")
886 # else values are set below for all platforms
889 # No way to set py35, remove for now.
890 # find_package(PythonLibs)
892 # Use our own instead, since without py is such a rare case,
893 # require this package
894 # XXX Linking errors with debian static python :/
895 # find_package_wrapper(PythonLibsUnix REQUIRED)
896 find_package(PythonLibsUnix REQUIRED)
899 if(WITH_IMAGE_OPENEXR)
900 find_package_wrapper(OpenEXR) # our own module
901 if(NOT OPENEXR_FOUND)
902 set(WITH_IMAGE_OPENEXR OFF)
906 if(WITH_IMAGE_OPENJPEG)
907 find_package_wrapper(OpenJPEG)
908 if(NOT OPENJPEG_FOUND)
909 set(WITH_IMAGE_OPENJPEG OFF)
914 # XXX Linking errors with debian static tiff :/
915 # find_package_wrapper(TIFF)
918 set(WITH_IMAGE_TIFF OFF)
923 if(WITH_SYSTEM_AUDASPACE)
924 find_package_wrapper(Audaspace)
925 if(NOT AUDASPACE_FOUND OR NOT AUDASPACE_C_FOUND)
926 message(FATAL_ERROR "Audaspace external library not found!")
931 find_package_wrapper(OpenAL)
939 set(SDL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extern/sdlew/include/SDL2")
942 find_package_wrapper(SDL2)
944 # Use same names for both versions of SDL until we move to 2.x.
945 set(SDL_INCLUDE_DIR "${SDL2_INCLUDE_DIR}")
946 set(SDL_LIBRARY "${SDL2_LIBRARY}")
947 set(SDL_FOUND "${SDL2_FOUND}")
949 find_package_wrapper(SDL)
955 # unset(SDLMAIN_LIBRARY CACHE)
963 find_package_wrapper(Jack)
970 if(WITH_CODEC_SNDFILE)
971 find_package_wrapper(SndFile)
972 if(NOT SNDFILE_FOUND)
973 set(WITH_CODEC_SNDFILE OFF)
977 if(WITH_CODEC_FFMPEG)
978 set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
979 set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
981 mark_as_advanced(FFMPEG)
983 # lame, but until we have proper find module for ffmpeg
984 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
985 if(EXISTS "${FFMPEG}/include/ffmpeg/")
986 list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
990 mark_as_advanced(FFMPEG_LIBRARIES)
991 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
995 find_package_wrapper(Fftw3)
1001 if(WITH_OPENCOLLADA)
1002 find_package_wrapper(OpenCOLLADA)
1003 if(OPENCOLLADA_FOUND)
1004 find_package_wrapper(XML2)
1005 find_package_wrapper(PCRE)
1007 set(WITH_OPENCOLLADA OFF)
1011 if(WITH_MEM_JEMALLOC)
1012 find_package_wrapper(JeMalloc)
1013 if(NOT JEMALLOC_FOUND)
1014 set(WITH_MEM_JEMALLOC OFF)
1019 find_package_wrapper(Spacenav)
1020 if(NOT SPACENAV_FOUND)
1021 set(WITH_INPUT_NDOF OFF)
1024 # use generic names within blenders buildsystem.
1026 set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
1027 set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
1032 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1034 set(OSL_ROOT ${CYCLES_OSL})
1036 find_package_wrapper(OpenShadingLanguage)
1038 if(${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6")
1039 # Note: --whole-archive is needed to force loading of all symbols in liboslexec,
1040 # otherwise LLVM is missing the osl_allocate_closure_component function
1041 set(OSL_LIBRARIES ${OSL_OSLCOMP_LIBRARY} -Wl,--whole-archive ${OSL_OSLEXEC_LIBRARY} -Wl,--no-whole-archive ${OSL_OSLQUERY_LIBRARY})
1044 message(STATUS "OSL not found, disabling it from Cycles")
1045 set(WITH_CYCLES_OSL OFF)
1050 find_package_wrapper(OpenVDB)
1051 find_package_wrapper(TBB)
1052 if(NOT OPENVDB_FOUND OR NOT TBB_FOUND)
1053 set(WITH_OPENVDB OFF)
1054 set(WITH_OPENVDB_BLOSC OFF)
1055 message(STATUS "OpenVDB not found, disabling it")
1060 # uses in build instructions to override include and library variables
1061 if(NOT BOOST_CUSTOM)
1062 if(WITH_STATIC_LIBS)
1063 set(Boost_USE_STATIC_LIBS ON)
1065 set(Boost_USE_MULTITHREADED ON)
1066 set(__boost_packages filesystem regex system thread date_time)
1068 if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
1069 list(APPEND __boost_packages wave)
1073 if(WITH_INTERNATIONAL)
1074 list(APPEND __boost_packages locale)
1076 if(WITH_CYCLES_NETWORK)
1077 list(APPEND __boost_packages serialization)
1080 list(APPEND __boost_packages iostreams)
1082 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1084 # try to find non-multithreaded if -mt not found, this flag
1085 # doesn't matter for us, it has nothing to do with thread
1086 # safety, but keep it to not disturb build setups
1087 set(Boost_USE_MULTITHREADED OFF)
1088 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1090 unset(__boost_packages)
1091 if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
1092 find_package(IcuLinux)
1094 mark_as_advanced(Boost_DIR) # why doesnt boost do this?
1097 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1098 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1099 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1100 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1103 if(WITH_OPENIMAGEIO)
1104 find_package_wrapper(OpenImageIO)
1105 if(NOT OPENIMAGEIO_PUGIXML_FOUND AND WITH_CYCLES_STANDALONE)
1106 find_package_wrapper(PugiXML)
1108 set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
1109 set(PUGIXML_LIBRARIES "")
1112 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARIES} ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${ZLIB_LIBRARIES} ${BOOST_LIBRARIES})
1113 set(OPENIMAGEIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
1114 set(OPENIMAGEIO_DEFINITIONS "")
1117 list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
1119 if(WITH_IMAGE_OPENEXR)
1120 list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
1123 if(NOT OPENIMAGEIO_FOUND)
1124 set(WITH_OPENIMAGEIO OFF)
1125 message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
1129 if(WITH_OPENCOLORIO)
1130 find_package_wrapper(OpenColorIO)
1132 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
1133 set(OPENCOLORIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
1134 set(OPENCOLORIO_DEFINITIONS)
1136 if(NOT OPENCOLORIO_FOUND)
1137 set(WITH_OPENCOLORIO OFF)
1138 message(STATUS "OpenColorIO not found")
1143 find_package_wrapper(LLVM)
1147 message(STATUS "LLVM not found")
1151 if(WITH_LLVM OR WITH_SDL_DYNLOAD)
1152 # Fix for conflict with Mesa llvmpipe
1153 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'")
1157 find_package_wrapper(OpenSubdiv)
1159 set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBRARIES})
1160 set(OPENSUBDIV_LIBPATH) # TODO, remove and reference the absolute path everywhere
1162 if(NOT OPENSUBDIV_FOUND)
1163 set(WITH_OPENSUBDIV OFF)
1164 message(STATUS "OpenSubdiv not found")
1168 # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
1169 list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
1171 find_package(Threads REQUIRED)
1172 list(APPEND PLATFORM_LINKLIBS ${CMAKE_THREAD_LIBS_INIT})
1173 # used by other platforms
1174 set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
1177 list(APPEND PLATFORM_LINKLIBS ${CMAKE_DL_LIBS})
1180 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
1181 if(NOT WITH_PYTHON_MODULE)
1182 # binreloc is linux only
1183 set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
1184 set(WITH_BINRELOC ON)
1188 # lfs on glibc, all compilers should use
1189 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1192 if(CMAKE_COMPILER_IS_GNUCC)
1193 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1195 # use ld.gold linker if available, could make optional
1197 COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
1198 ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
1199 if("${LD_VERSION}" MATCHES "GNU gold")
1200 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
1201 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
1203 message(STATUS "GNU gold linker isn't available, using the default system linker.")
1207 # CLang is the same as GCC for now.
1208 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1209 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1211 elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
1212 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
1214 # Intel C++ Compiler
1215 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1216 # think these next two are broken
1217 find_program(XIAR xiar)
1219 set(CMAKE_AR "${XIAR}")
1221 mark_as_advanced(XIAR)
1223 find_program(XILD xild)
1225 set(CMAKE_LINKER "${XILD}")
1227 mark_as_advanced(XILD)
1229 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
1230 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
1232 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
1233 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1234 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
1239 add_definitions(-DWIN32)
1243 # needed for some MSVC installations
1244 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
1245 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
1246 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
1248 list(APPEND PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp)
1251 list(APPEND PLATFORM_LINKLIBS imm32)
1255 -D_CRT_NONSTDC_NO_DEPRECATE
1256 -D_CRT_SECURE_NO_DEPRECATE
1257 -D_SCL_SECURE_NO_DEPRECATE
1262 # MSVC11 needs _ALLOW_KEYWORD_MACROS to build
1263 add_definitions(-D_ALLOW_KEYWORD_MACROS)
1266 # We want to support Vista level ABI for x64
1267 add_definitions(-D_WIN32_WINNT=0x600)
1270 # Make cmake find the msvc redistributables
1271 set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
1272 include(InstallRequiredSystemLibraries)
1274 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
1275 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
1277 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
1278 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
1279 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
1280 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
1281 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
1282 set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
1283 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
1284 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
1286 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
1288 # MSVC only, Mingw doesnt need
1290 set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1292 set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1295 set(PLATFORM_LINKFLAGS_DEBUG "/IGNORE:4099 /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1297 if(NOT DEFINED LIBDIR)
1299 # Setup 64bit and 64bit windows systems
1301 message(STATUS "64 bit compiler detected.")
1302 set(LIBDIR_BASE "win64")
1304 message(STATUS "32 bit compiler detected.")
1305 set(LIBDIR_BASE "windows")
1308 if(MSVC_VERSION EQUAL 1900)
1309 message(STATUS "Visual Studio 2015 detected.")
1310 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc14)
1312 message(STATUS "Visual Studio 2013 detected.")
1313 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc12)
1316 message(STATUS using LIBDIR ${LIBDIR})
1319 # Add each of our libraries to our cmake_prefix_path so find_package() could work
1320 file(GLOB children RELATIVE ${LIBDIR} ${LIBDIR}/*)
1321 foreach(child ${children})
1322 if(IS_DIRECTORY ${LIBDIR}/${child})
1323 list(APPEND CMAKE_PREFIX_PATH ${LIBDIR}/${child})
1327 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1328 set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
1329 set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
1330 set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
1331 set(ZLIB_DIR ${LIBDIR}/zlib)
1332 #find_package(zlib) # we want to find before finding things that depend on it like png
1337 message(WARNING "Using HARDCODED libpng locations")
1338 set(PNG_PNG_INCLUDE_DIR ${LIBDIR}/png/include)
1339 set(PNG_LIBRARIES libpng)
1340 set(PNG "${LIBDIR}/png")
1341 set(PNG_INCLUDE_DIRS "${PNG}/include")
1342 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1345 set(JPEG_NAMES ${JPEG_NAMES} libjpeg)
1346 find_package(jpeg REQUIRED)
1348 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1349 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1351 set(FREETYPE ${LIBDIR}/freetype)
1352 set(FREETYPE_INCLUDE_DIRS
1353 ${LIBDIR}/freetype/include
1354 ${LIBDIR}/freetype/include/freetype2
1356 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1357 find_package(freetype REQUIRED)
1360 set(FFTW3 ${LIBDIR}/fftw3)
1361 set(FFTW3_LIBRARIES libfftw)
1362 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1363 set(FFTW3_LIBPATH ${FFTW3}/lib)
1366 if(WITH_OPENCOLLADA)
1367 set(OPENCOLLADA ${LIBDIR}/opencollada)
1369 set(OPENCOLLADA_INCLUDE_DIRS
1370 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1371 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1372 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1373 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1374 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1377 set(OPENCOLLADA_LIBRARIES
1378 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib
1379 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAFramework.lib
1380 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADABaseUtils.lib
1381 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
1382 ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
1383 ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
1384 ${OPENCOLLADA}/lib/opencollada/xml.lib
1385 ${OPENCOLLADA}/lib/opencollada/buffer.lib
1386 ${OPENCOLLADA}/lib/opencollada/ftoa.lib
1390 list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
1394 ${OPENCOLLADA}/lib/opencollada/pcre.lib
1398 if(WITH_CODEC_FFMPEG)
1399 set(FFMPEG_INCLUDE_DIRS
1400 ${LIBDIR}/ffmpeg/include
1401 ${LIBDIR}/ffmpeg/include/msvc
1403 find_package(FFMPEG)
1404 if(NOT FFMPEG_FOUND)
1405 message(WARNING "Using HARDCODED ffmpeg locations")
1406 set(FFMPEG_LIBRARY_VERSION 55)
1407 set(FFMPEG_LIBRARY_VERSION_AVU 52)
1408 set(FFMPEG_LIBRARIES
1409 ${LIBDIR}/ffmpeg/lib/avcodec-${FFMPEG_LIBRARY_VERSION}.lib
1410 ${LIBDIR}/ffmpeg/lib/avformat-${FFMPEG_LIBRARY_VERSION}.lib
1411 ${LIBDIR}/ffmpeg/lib/avdevice-${FFMPEG_LIBRARY_VERSION}.lib
1412 ${LIBDIR}/ffmpeg/lib/avutil-${FFMPEG_LIBRARY_VERSION_AVU}.lib
1413 ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1418 if(WITH_IMAGE_OPENEXR)
1419 set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
1420 set(OPENEXR_VERSION "2.1")
1421 find_package(OPENEXR REQUIRED)
1422 if(NOT OPENEXR_FOUND)
1423 message(WARNING "Using HARDCODED OpenEXR locations")
1424 set(OPENEXR ${LIBDIR}/openexr)
1425 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1426 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1427 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1428 set(OPENEXR_LIBRARIES
1429 ${OPENEXR_LIBPATH}/Iex-2_2.lib
1430 ${OPENEXR_LIBPATH}/Half.lib
1431 ${OPENEXR_LIBPATH}/IlmImf-2_2.lib
1432 ${OPENEXR_LIBPATH}/Imath-2_2.lib
1433 ${OPENEXR_LIBPATH}/IlmThread-2_2.lib
1439 # Try to find tiff first then complain and set static and maybe wrong paths
1442 message(WARNING "Using HARDCODED libtiff locations")
1443 set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1444 set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1449 set(JACK_INCLUDE_DIRS
1450 ${LIBDIR}/jack/include/jack
1451 ${LIBDIR}/jack/include
1453 set(JACK_LIBRARIES optimized ${LIBDIR}/jack/lib/libjack.lib debug ${LIBDIR}/jack/lib/libjack_d.lib)
1457 set(PYTHON_VERSION 3.5) # CACHE STRING)
1459 string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1460 # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1461 set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1462 unset(_PYTHON_VERSION_NO_DOTS)
1464 # Shared includes for both vc2008 and vc2010
1465 set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1468 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1469 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1474 set(boost_extra_libs wave)
1476 if(WITH_INTERNATIONAL)
1477 list(APPEND boost_extra_libs locale)
1479 set(Boost_USE_STATIC_RUNTIME ON) # prefix lib
1480 set(Boost_USE_MULTITHREADED ON) # suffix -mt
1481 set(Boost_USE_STATIC_LIBS ON) # suffix -s
1482 find_package(Boost COMPONENTS date_time filesystem thread regex system ${boost_extra_libs})
1484 message(WARNING "USING HARDCODED boost locations")
1485 set(BOOST ${LIBDIR}/boost)
1486 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1488 set(BOOST_LIBPATH ${BOOST}/lib)
1489 set(BOOST_POSTFIX "vc120-mt-s-1_60.lib")
1490 set(BOOST_DEBUG_POSTFIX "vc120-mt-sgd-1_60.lib")
1492 set(BOOST_LIBPATH ${BOOST}/lib)
1493 set(BOOST_POSTFIX "vc140-mt-s-1_60.lib")
1494 set(BOOST_DEBUG_POSTFIX "vc140-mt-sgd-1_60.lib")
1497 optimized libboost_date_time-${BOOST_POSTFIX} optimized libboost_filesystem-${BOOST_POSTFIX}
1498 optimized libboost_regex-${BOOST_POSTFIX}
1499 optimized libboost_system-${BOOST_POSTFIX} optimized libboost_thread-${BOOST_POSTFIX}
1500 debug libboost_date_time-${BOOST_DEBUG_POSTFIX} debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1501 debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1502 debug libboost_system-${BOOST_DEBUG_POSTFIX} debug libboost_thread-${BOOST_DEBUG_POSTFIX})
1504 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1505 optimized libboost_wave-${BOOST_POSTFIX}
1506 debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1508 if(WITH_INTERNATIONAL)
1509 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1510 optimized libboost_locale-${BOOST_POSTFIX}
1511 debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1513 else() # we found boost using find_package
1514 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1515 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1516 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1518 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1521 if(WITH_OPENIMAGEIO)
1522 find_package(OpenImageIO)
1523 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1524 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1525 set(OIIO_OPTIMIZED optimized OpenImageIO optimized OpenImageIO_Util)
1526 set(OIIO_DEBUG debug OpenImageIO_d debug OpenImageIO_Util_d)
1527 set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
1528 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1529 set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1530 set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1531 set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1532 add_definitions(-DOIIO_STATIC_BUILD)
1536 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1537 file(GLOB LLVM_LIBRARY_OPTIMIZED ${LLVM_ROOT_DIR}/lib/*.lib)
1539 if(EXISTS ${LLVM_ROOT_DIR}/debug/lib)
1540 foreach(LLVM_OPTIMIZED_LIB ${LLVM_LIBRARY_OPTIMIZED})
1541 get_filename_component(LIBNAME ${LLVM_OPTIMIZED_LIB} ABSOLUTE)
1542 list(APPEND LLVM_LIBS optimized ${LIBNAME})
1543 endforeach(LLVM_OPTIMIZED_LIB)
1545 file(GLOB LLVM_LIBRARY_DEBUG ${LLVM_ROOT_DIR}/debug/lib/*.lib)
1547 foreach(LLVM_DEBUG_LIB ${LLVM_LIBRARY_DEBUG})
1548 get_filename_component(LIBNAME ${LLVM_DEBUG_LIB} ABSOLUTE)
1549 list(APPEND LLVM_LIBS debug ${LIBNAME})
1550 endforeach(LLVM_DEBUG_LIB)
1552 set(LLVM_LIBRARY ${LLVM_LIBS})
1554 message(WARNING "LLVM debug libs not present on this system. Using release libs for debug builds.")
1555 set(LLVM_LIBRARY ${LLVM_LIBRARY_OPTIMIZED})
1560 if(WITH_OPENCOLORIO)
1561 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1562 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1563 set(OPENCOLORIO_LIBRARIES OpenColorIO)
1564 set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1565 set(OPENCOLORIO_DEFINITIONS)
1569 set(OPENVDB ${LIBDIR}/openvdb)
1570 set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
1571 set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
1572 set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1573 set(OPENVDB_DEFINITIONS)
1576 if(WITH_MOD_CLOTH_ELTOPO)
1577 set(LAPACK ${LIBDIR}/lapack)
1578 # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1579 set(LAPACK_LIBPATH ${LAPACK}/lib)
1580 set(LAPACK_LIBRARIES
1581 ${LIBDIR}/lapack/lib/libf2c.lib
1582 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1583 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1588 set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
1589 set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
1590 set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBPATH}/osdCPU.lib ${OPENSUBDIV_LIBPATH}/osdGPU.lib)
1591 find_package(OpenSubdiv)
1595 set(SDL ${LIBDIR}/sdl)
1596 set(SDL_INCLUDE_DIR ${SDL}/include)
1597 set(SDL_LIBPATH ${SDL}/lib)
1598 # MinGW TODO: Update MinGW to SDL2
1599 if(NOT CMAKE_COMPILER_IS_GNUCC)
1600 set(SDL_LIBRARY SDL2)
1602 set(SDL_LIBRARY SDL)
1607 if(WITH_SYSTEM_AUDASPACE)
1608 set(AUDASPACE_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1609 set(AUDASPACE_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace.lib)
1610 set(AUDASPACE_C_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1611 set(AUDASPACE_C_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-c.lib)
1612 set(AUDASPACE_PY_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1613 set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib)
1616 # used in many places so include globally, like OpenGL
1617 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1619 elseif(CMAKE_COMPILER_IS_GNUCC)
1620 # keep GCC specific stuff here
1621 include(CheckCSourceCompiles)
1622 # Setup 64bit and 64bit windows systems
1623 CHECK_C_SOURCE_COMPILES("
1627 int main(void) { return 0; }
1632 message(STATUS "Compiling for 64 bit with MinGW-w64.")
1633 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
1635 message(STATUS "Compiling for 32 bit with MinGW-w32.")
1636 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
1638 if(WITH_RAYOPTIMIZATION)
1639 message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
1643 list(APPEND PLATFORM_LINKLIBS -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp)
1646 list(APPEND PLATFORM_LINKLIBS -limm32)
1649 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1652 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1653 list(APPEND PLATFORM_LINKLIBS -lpthread)
1655 add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1658 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1660 add_definitions(-DFREE_WINDOWS)
1662 set(PNG "${LIBDIR}/png")
1663 set(PNG_INCLUDE_DIRS "${PNG}/include")
1664 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1667 set(JPEG_LIBRARIES jpeg)
1669 set(JPEG_LIBRARIES libjpeg)
1671 set(PNG_LIBRARIES png)
1673 set(ZLIB ${LIBDIR}/zlib)
1674 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1675 set(ZLIB_LIBPATH ${ZLIB}/lib)
1676 set(ZLIB_LIBRARIES z)
1678 set(JPEG "${LIBDIR}/jpeg")
1679 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1680 set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
1682 # comes with own pthread library
1683 if(NOT WITH_MINGW64)
1684 set(PTHREADS ${LIBDIR}/pthreads)
1685 #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1686 set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1687 set(PTHREADS_LIBRARIES pthreadGC2)
1690 set(FREETYPE ${LIBDIR}/freetype)
1691 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1692 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1693 set(FREETYPE_LIBRARY freetype)
1696 set(FFTW3 ${LIBDIR}/fftw3)
1697 set(FFTW3_LIBRARIES fftw3)
1698 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1699 set(FFTW3_LIBPATH ${FFTW3}/lib)
1702 if(WITH_OPENCOLLADA)
1703 set(OPENCOLLADA ${LIBDIR}/opencollada)
1704 set(OPENCOLLADA_INCLUDE_DIRS
1705 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1706 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1707 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1708 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1709 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1711 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
1712 set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver buffer ftoa xml)
1713 set(PCRE_LIBRARIES pcre)
1716 if(WITH_CODEC_FFMPEG)
1717 set(FFMPEG ${LIBDIR}/ffmpeg)
1718 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1720 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1722 set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
1724 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1727 if(WITH_IMAGE_OPENEXR)
1728 set(OPENEXR ${LIBDIR}/openexr)
1729 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1730 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1731 set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1732 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1736 set(TIFF ${LIBDIR}/tiff)
1737 set(TIFF_LIBRARY tiff)
1738 set(TIFF_INCLUDE_DIR ${TIFF}/include)
1739 set(TIFF_LIBPATH ${TIFF}/lib)
1743 set(JACK ${LIBDIR}/jack)
1744 set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1745 set(JACK_LIBRARIES jack)
1746 set(JACK_LIBPATH ${JACK}/lib)
1748 # TODO, gives linking errors, force off
1753 # normally cached but not since we include them with blender
1754 set(PYTHON_VERSION 3.5) # CACHE STRING)
1755 string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1756 set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}") # CACHE PATH)
1757 set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib") # CACHE FILEPATH)
1758 unset(_PYTHON_VERSION_NO_DOTS)
1761 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1762 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1766 set(BOOST ${LIBDIR}/boost)
1767 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1769 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1770 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1772 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1773 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1776 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1777 boost_regex-${BOOST_POSTFIX}
1778 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1779 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1780 boost_regex-${BOOST_DEBUG_POSTFIX}
1781 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1782 if(WITH_INTERNATIONAL)
1783 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1784 optimized boost_locale-${BOOST_POSTFIX}
1785 debug boost_locale-${BOOST_DEBUG_POSTFIX})
1788 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1789 optimized boost_wave-${BOOST_POSTFIX}
1790 debug boost_wave-${BOOST_DEBUG_POSTFIX})
1792 set(BOOST_LIBPATH ${BOOST}/lib)
1793 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1796 if(WITH_OPENIMAGEIO)
1797 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1798 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1799 set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1800 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1801 set(OPENIMAGEIO_DEFINITIONS "")
1802 set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1806 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1807 set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
1808 # Explicitly set llvm lib order.
1809 #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1810 set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1811 LLVMAsmParser LLVMAsmPrinter
1812 LLVMBitReader LLVMBitWriter
1813 LLVMDebugInfo LLVMExecutionEngine
1814 LLVMInstCombine LLVMInstrumentation
1815 LLVMInterpreter LLVMJIT
1817 LLVMMCDisassembler LLVMMCJIT
1818 LLVMMCParser LLVMObject
1821 LLVMTableGen LLVMTarget
1822 LLVMTransformUtils LLVMVectorize
1823 LLVMX86AsmParser LLVMX86AsmPrinter
1824 LLVMX86CodeGen LLVMX86Desc
1825 LLVMX86Disassembler LLVMX86Info
1826 LLVMX86Utils LLVMipa
1828 # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1829 list(APPEND PLATFORM_LINKLIBS -limagehlp)
1832 if(WITH_OPENCOLORIO)
1833 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1834 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1835 set(OPENCOLORIO_LIBRARIES OpenColorIO)
1836 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1837 set(OPENCOLORIO_DEFINITIONS)
1841 set(SDL ${LIBDIR}/sdl)
1842 set(SDL_INCLUDE_DIR ${SDL}/include)
1843 set(SDL_LIBRARY SDL)
1844 set(SDL_LIBPATH ${SDL}/lib)
1848 set(OPENVDB ${LIBDIR}/openvdb)
1849 set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
1850 set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
1851 set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1852 set(OPENVDB_DEFINITIONS)
1855 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
1857 ## DISABLE - causes linking errors
1858 ## for re-distribution, so users dont need mingw installed
1859 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
1863 # Things common to both mingw and MSVC should go here
1865 set(WINTAB_INC ${LIBDIR}/wintab/include)
1868 set(OPENAL ${LIBDIR}/openal)
1869 set(OPENALDIR ${LIBDIR}/openal)
1870 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
1872 set(OPENAL_LIBRARY openal32)
1874 set(OPENAL_LIBRARY wrap_oal)
1876 set(OPENAL_LIBPATH ${OPENAL}/lib)
1879 if(WITH_CODEC_SNDFILE)
1880 set(SNDFILE ${LIBDIR}/sndfile)
1881 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1882 set(SNDFILE_LIBRARIES libsndfile-1)
1883 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
1886 if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
1887 add_definitions(-D__SSE__ -D__MMX__)
1891 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1893 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
1894 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
1895 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
1896 find_library(OSL_LIB_EXEC_DEBUG NAMES oslexec_d PATHS ${CYCLES_OSL}/lib)
1897 find_library(OSL_LIB_COMP_DEBUG NAMES oslcomp_d PATHS ${CYCLES_OSL}/lib)
1898 find_library(OSL_LIB_QUERY_DEBUG NAMES oslquery_d PATHS ${CYCLES_OSL}/lib)
1899 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})
1900 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
1901 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
1903 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
1906 message(STATUS "OSL not found")
1907 set(WITH_CYCLES_OSL OFF)
1913 if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STRGREATER "10.5")
1914 set(WITH_LIBS10.5 ON CACHE BOOL "Use 10.5 libs" FORCE) # valid also for 10.6/7/8/9
1918 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
1920 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1921 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.x.i386)
1923 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.0.0-powerpc)
1929 find_package(OpenAL)
1932 set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
1934 set(WITH_OPENAL OFF)
1939 set(OPENSUBDIV ${LIBDIR}/opensubdiv)
1940 set(OPENSUBDIV_LIBPATH ${OPENSUBDIV}/lib)
1941 find_library(OSL_LIB_UTIL NAMES osdutil PATHS ${OPENSUBDIV_LIBPATH})
1942 find_library(OSL_LIB_CPU NAMES osdCPU PATHS ${OPENSUBDIV_LIBPATH})
1943 find_library(OSL_LIB_GPU NAMES osdGPU PATHS ${OPENSUBDIV_LIBPATH})
1944 set(OPENSUBDIV_INCLUDE_DIR ${OPENSUBDIV}/include)
1945 set(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
1946 list(APPEND OPENSUBDIV_LIBRARIES ${OSL_LIB_UTIL} ${OSL_LIB_CPU} ${OSL_LIB_GPU})
1950 find_library(JACK_FRAMEWORK
1953 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
1954 if(NOT JACK_FRAMEWORK)
1959 if(WITH_CODEC_SNDFILE)
1960 set(SNDFILE ${LIBDIR}/sndfile)
1961 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1962 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
1963 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib) # TODO, deprecate
1967 # we use precompiled libraries for py 3.5 and up by default
1968 set(PYTHON_VERSION 3.5)
1969 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
1970 # normally cached but not since we include them with blender
1971 set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
1972 # set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
1973 set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
1974 set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
1975 # set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled
1977 # module must be compiled against Python framework
1978 set(PYTHON_INCLUDE_DIR "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/include/python${PYTHON_VERSION}m")
1979 set(PYTHON_EXECUTABLE "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}")
1980 #set(PYTHON_LIBRARY python${PYTHON_VERSION})
1981 set(PYTHON_LIBPATH "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
1982 #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python") # won't build with this enabled
1986 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1987 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1991 set(FFTW3 ${LIBDIR}/fftw3)
1992 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1993 set(FFTW3_LIBRARIES fftw3)
1994 set(FFTW3_LIBPATH ${FFTW3}/lib)
1997 set(PNG_LIBRARIES png)
1998 set(JPEG_LIBRARIES jpeg)
2001 set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
2002 set(ZLIB_LIBRARIES z bz2)
2004 set(FREETYPE ${LIBDIR}/freetype)
2005 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
2006 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
2007 set(FREETYPE_LIBRARY freetype)
2009 if(WITH_IMAGE_OPENEXR)
2010 set(OPENEXR ${LIBDIR}/openexr)
2011 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
2012 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
2013 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
2014 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
2017 if(WITH_CODEC_FFMPEG)
2018 set(FFMPEG ${LIBDIR}/ffmpeg)
2019 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
2020 set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
2021 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
2024 find_library(SYSTEMSTUBS_LIBRARY
2029 mark_as_advanced(SYSTEMSTUBS_LIBRARY)
2030 if(SYSTEMSTUBS_LIBRARY)
2031 list(APPEND PLATFORM_LINKLIBS stdc++ SystemStubs)
2033 list(APPEND PLATFORM_LINKLIBS stdc++)
2036 set(PLATFORM_CFLAGS "-pipe -funsigned-char")
2037 set(PLATFORM_LINKFLAGS "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio")
2038 if(WITH_CODEC_QUICKTIME)
2039 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
2040 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
2041 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
2042 # libSDL still needs 32bit carbon quicktime
2046 # XXX - SOME MAC DEV PLEASE TEST WITH THE SDK INSTALLED!
2047 # ALSO SHOULD BE MOVED INTO OWN MODULE WHEN FUNCTIONAL
2049 # This thread it *should* work and check the framework - campbell
2050 # http://www.cmake.org/pipermail/cmake/2005-December/007740.html
2051 find_library(3DCONNEXION_CLIENT_FRAMEWORK
2052 NAMES 3DconnexionClient
2054 if(NOT 3DCONNEXION_CLIENT_FRAMEWORK)
2055 set(WITH_INPUT_NDOF OFF)
2059 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework 3DconnexionClient")
2060 set(NDOF_INCLUDE_DIRS /Library/Frameworks/3DconnexionClient.framework/Headers )
2065 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework jackmp")
2068 if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
2069 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")# force cmake to link right framework
2072 if(WITH_OPENCOLLADA)
2073 set(OPENCOLLADA ${LIBDIR}/opencollada)
2075 set(OPENCOLLADA_INCLUDE_DIRS
2076 ${LIBDIR}/opencollada/include/COLLADAStreamWriter
2077 ${LIBDIR}/opencollada/include/COLLADABaseUtils
2078 ${LIBDIR}/opencollada/include/COLLADAFramework
2079 ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
2080 ${LIBDIR}/opencollada/include/GeneratedSaxParser
2083 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
2084 set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lxml2 -lbuffer -lftoa")
2085 # Use UTF functions from collada if LLVM is not enabled
2087 set(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES} -lUTF")
2089 # pcre is bundled with openCollada
2090 #set(PCRE ${LIBDIR}/pcre)
2091 #set(PCRE_LIBPATH ${PCRE}/lib)
2092 set(PCRE_LIBRARIES pcre)
2094 #set(EXPAT ${LIBDIR}/expat)
2095 #set(EXPAT_LIBPATH ${EXPAT}/lib)
2100 set(SDL ${LIBDIR}/sdl)
2101 set(SDL_INCLUDE_DIR ${SDL}/include)
2102 set(SDL_LIBRARY SDL2)
2103 set(SDL_LIBPATH ${SDL}/lib)
2104 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lazy_framework ForceFeedback")
2107 set(PNG "${LIBDIR}/png")
2108 set(PNG_INCLUDE_DIRS "${PNG}/include")
2109 set(PNG_LIBPATH ${PNG}/lib)
2111 set(JPEG "${LIBDIR}/jpeg")
2112 set(JPEG_INCLUDE_DIR "${JPEG}/include")
2113 set(JPEG_LIBPATH ${JPEG}/lib)
2116 set(TIFF ${LIBDIR}/tiff)
2117 set(TIFF_INCLUDE_DIR ${TIFF}/include)
2118 set(TIFF_LIBRARY tiff)
2119 set(TIFF_LIBPATH ${TIFF}/lib)
2123 # linker needs "-weak_framework 3DconnexionClient"
2127 set(BOOST ${LIBDIR}/boost)
2128 set(BOOST_INCLUDE_DIR ${BOOST}/include)
2129 set(BOOST_LIBRARIES boost_date_time-mt boost_filesystem-mt boost_regex-mt boost_system-mt boost_thread-mt boost_wave-mt)
2130 if(WITH_INTERNATIONAL)
2131 list(APPEND BOOST_LIBRARIES boost_locale-mt)
2133 if(WITH_CYCLES_NETWORK)
2134 list(APPEND BOOST_LIBRARIES boost_serialization-mt)
2137 list(APPEND BOOST_LIBRARIES boost_iostreams-mt)
2139 set(BOOST_LIBPATH ${BOOST}/lib)
2140 set(BOOST_DEFINITIONS)
2143 if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
2144 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale and ffmpeg needs it !
2147 if(WITH_OPENIMAGEIO)
2148 set(OPENIMAGEIO ${LIBDIR}/openimageio)
2149 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
2150 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO}/lib/libOpenImageIO.a ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARY} ${OPENEXR_LIBRARIES} ${ZLIB_LIBRARIES})
2151 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib ${JPEG_LIBPATH} ${PNG_LIBPATH} ${TIFF_LIBPATH} ${OPENEXR_LIBPATH} ${ZLIB_LIBPATH})
2152 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
2153 set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
2156 if(WITH_OPENCOLORIO)
2157 set(OPENCOLORIO ${LIBDIR}/opencolorio)
2158 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
2159 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
2160 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
2164 set(OPENVDB ${LIBDIR}/openvdb)
2165 set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
2166 set(TBB_INCLUDE_DIRS ${LIBDIR}/tbb/include)
2167 set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/libtbb.a)
2168 set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
2169 set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
2170 set(OPENVDB_DEFINITIONS)
2174 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
2175 set(LLVM_VERSION "3.4" CACHE STRING "Version of LLVM to use")
2176 if(EXISTS "${LLVM_ROOT_DIR}/bin/llvm-config")
2177 set(LLVM_CONFIG "${LLVM_ROOT_DIR}/bin/llvm-config")
2179 set(LLVM_CONFIG llvm-config)
2181 execute_process(COMMAND ${LLVM_CONFIG} --version
2182 OUTPUT_VARIABLE LLVM_VERSION
2183 OUTPUT_STRIP_TRAILING_WHITESPACE)
2184 execute_process(COMMAND ${LLVM_CONFIG} --prefix
2185 OUTPUT_VARIABLE LLVM_ROOT_DIR
2186 OUTPUT_STRIP_TRAILING_WHITESPACE)
2187 execute_process(COMMAND ${LLVM_CONFIG} --libdir
2188 OUTPUT_VARIABLE LLVM_LIBPATH
2189 OUTPUT_STRIP_TRAILING_WHITESPACE)
2190 find_library(LLVM_LIBRARY
2191 NAMES LLVMAnalysis # first of a whole bunch of libs to get
2192 PATHS ${LLVM_LIBPATH})
2194 if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
2196 # if static LLVM libraries were requested, use llvm-config to generate
2197 # the list of what libraries we need, and substitute that in the right
2198 # way for LLVM_LIBRARY.
2199 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
2200 OUTPUT_VARIABLE LLVM_LIBRARY
2201 OUTPUT_STRIP_TRAILING_WHITESPACE)
2202 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
2204 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
2207 message(FATAL_ERROR "LLVM not found.")
2212 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2214 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2215 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2216 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2217 # WARNING! depends on correct order of OSL libs linking
2218 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
2219 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2220 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2222 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2225 message(STATUS "OSL not found")
2226 set(WITH_CYCLES_OSL OFF)
2231 execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VENDOR)
2232 string(SUBSTRING "${COMPILER_VENDOR}" 0 5 VENDOR_NAME) # truncate output
2233 if(${VENDOR_NAME} MATCHES "Apple") # Apple does not support OpenMP reliable with gcc and not with clang
2234 set(WITH_OPENMP OFF)
2235 else() # vanilla gcc or clang_omp support OpenMP
2236 message(STATUS "Using special OpenMP enabled compiler !") # letting find_package(OpenMP) module work for gcc
2237 if(CMAKE_C_COMPILER_ID MATCHES "Clang") # clang-omp in darwin libs
2238 set(OPENMP_FOUND ON)
2239 set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "C compiler flags for OpenMP parallization" FORCE)
2240 set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "C++ compiler flags for OpenMP parallization" FORCE)
2241 include_directories(${LIBDIR}/openmp/include)
2242 link_directories(${LIBDIR}/openmp/lib)
2243 # This is a workaround for our helperbinaries ( datatoc, masgfmt, ... ),
2244 # They are linked also to omp lib, so we need it in builddir for runtime exexcution, TODO: remove all unneeded dependencies from these
2245 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
2250 set(EXETYPE MACOSX_BUNDLE)
2252 set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
2253 set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
2254 if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
2255 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2256 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2257 if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
2258 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize -fvariable-expansion-in-unroller")
2259 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize -fvariable-expansion-in-unroller")
2262 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2263 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2266 if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
2267 # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
2268 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
2270 # Get rid of eventually clashes, we export some symbols explicite as local
2271 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker ${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map")
2274 #-----------------------------------------------------------------------------
2278 if(NOT EXISTS "${LIBDIR}/")
2279 message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'")
2283 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
2284 message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
2288 if(NOT WITH_OPENIMAGEIO)
2289 message(FATAL_ERROR "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. Configure OIIO or disable WITH_CYCLES")
2292 message(FATAL_ERROR "Cycles requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
2297 message(FATAL_ERROR "Cycles OSL requires WITH_LLVM, the library may not have been found. Configure LLVM or disable WITH_CYCLES_OSL")
2302 if(WITH_INTERNATIONAL)
2304 message(FATAL_ERROR "Internationalization requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_INTERNATIONAL")
2308 # See TEST_SSE_SUPPORT() for how this is defined.
2310 if(WITH_RAYOPTIMIZATION)
2311 if(SUPPORT_SSE_BUILD)
2312 set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
2313 add_definitions(-D__SSE__ -D__MMX__)
2315 if(SUPPORT_SSE2_BUILD)
2316 set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
2317 add_definitions(-D__SSE2__)
2318 if(NOT SUPPORT_SSE_BUILD) # dont double up
2319 add_definitions(-D__MMX__)
2325 # set the endian define
2327 # for some reason this fails on msvc
2328 add_definitions(-D__LITTLE_ENDIAN__)
2330 # OSX-Note: as we do crosscompiling with specific set architecture,
2331 # endianess-detection and autosetting is counterproductive
2332 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
2334 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
2335 add_definitions(-D__LITTLE_ENDIAN__)
2336 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)
2337 add_definitions(-D__BIG_ENDIAN__)
2340 include(TestBigEndian)
2341 test_big_endian(_SYSTEM_BIG_ENDIAN)
2342 if(_SYSTEM_BIG_ENDIAN)
2343 add_definitions(-D__BIG_ENDIAN__)
2345 add_definitions(-D__LITTLE_ENDIAN__)
2347 unset(_SYSTEM_BIG_ENDIAN)
2351 if(WITH_IMAGE_OPENJPEG)
2352 if(WITH_SYSTEM_OPENJPEG)
2354 set(OPENJPEG_DEFINES "")
2356 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
2357 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2359 # Special handling of Windows platform where openjpeg is always static.
2361 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2365 if(NOT WITH_SYSTEM_EIGEN3)
2366 set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
2369 #-----------------------------------------------------------------------------
2372 find_package(OpenGL)
2373 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
2376 list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
2377 list(APPEND GL_DEFINITIONS -DWITH_GLU)
2380 if(WITH_SYSTEM_GLES)
2381 find_package_wrapper(OpenGLES)
2384 if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
2385 list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
2387 elseif(WITH_GL_PROFILE_ES20)
2388 if(WITH_SYSTEM_GLES)
2389 if(NOT OPENGLES_LIBRARY)
2390 message(FATAL_ERROR "Unable to find OpenGL ES libraries. Install them or disable WITH_SYSTEM_GLES.")
2393 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
2396 set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
2397 mark_as_advanced(OPENGLES_LIBRARY)
2399 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
2401 if(NOT OPENGLES_LIBRARY)
2402 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.")
2408 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2410 set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
2411 mark_as_advanced(OPENGLES_DLL)
2413 if(NOT OPENGLES_DLL)
2414 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).")
2418 list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
2420 set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
2422 get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
2423 list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
2425 mark_as_advanced(D3DCOMPILER_DLL)
2427 if(D3DCOMPILER_DLL STREQUAL "")
2428 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")
2438 list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
2440 if(WITH_SYSTEM_GLES)
2441 if(NOT OPENGLES_EGL_LIBRARY)
2442 message(FATAL_ERROR "Unable to find OpenGL ES libraries. Install them or disable WITH_SYSTEM_GLES.")
2445 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
2448 set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
2449 mark_as_advanced(OPENGLES_EGL_LIBRARY)
2451 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
2453 if(NOT OPENGLES_EGL_LIBRARY)
2454 message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY to the file path of an EGL library.")
2460 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2462 set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
2463 mark_as_advanced(OPENGLES_EGL_DLL)
2465 if(NOT OPENGLES_EGL_DLL)
2466 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).")
2473 if(WITH_GL_PROFILE_COMPAT)
2474 list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
2477 if(WITH_GL_PROFILE_CORE)
2478 list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
2481 if(WITH_GL_PROFILE_ES20)
2482 list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
2486 list(APPEND GL_DEFINITIONS -DWITH_EGL)
2489 #-----------------------------------------------------------------------------
2492 find_package(OpenMP)
2494 if(NOT WITH_OPENMP_STATIC)
2495 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
2496 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
2498 # Typically avoid adding flags as defines but we can't
2499 # pass OpenMP flags to the linker for static builds, meaning
2500 # we can't add any OpenMP related flags to CFLAGS variables
2501 # since they're passed to the linker as well.
2502 add_definitions("${OpenMP_C_FLAGS}")
2504 find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
2507 set(WITH_OPENMP OFF)
2516 #-----------------------------------------------------------------------------
2520 list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
2523 if(WITH_SYSTEM_GLEW)
2526 # Note: There is an assumption here that the system GLEW is not a static library.
2529 message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
2533 set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
2535 set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
2539 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
2541 list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
2543 # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
2544 if(NOT WITH_GL_PROFILE_ES20)
2545 # No ES functions are needed
2546 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2547 elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
2548 # ES is enabled, but the other functions are all disabled
2549 list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
2552 if(WITH_GL_PROFILE_ES20)
2554 list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
2557 # ToDo: This is an experiment to eliminate ES 1 symbols,
2558 # GLEW doesn't really properly provide this level of control
2559 # (for example, without modification it eliminates too many symbols)
2560 # so there are lots of modifications to GLEW to make this work,
2561 # and no attempt to make it work beyond Blender at this point.
2562 list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
2566 list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
2569 set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
2572 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
2574 list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
2576 # This won't affect the non-experimental glew library,
2577 # but is used for conditional compilation elsewhere.
2578 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2580 set(BLENDER_GLEW_LIBRARIES extern_glew)
2587 list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
2590 #-----------------------------------------------------------------------------
2593 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
2594 find_package(Bullet)
2595 if(NOT BULLET_FOUND)
2596 set(WITH_BULLET OFF)
2599 set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
2600 # set(BULLET_LIBRARIES "")
2603 #-----------------------------------------------------------------------------
2606 if(WITH_PYTHON_MODULE)
2607 add_definitions(-DPy_ENABLE_SHARED)
2610 #-----------------------------------------------------------------------------
2611 # Configure GLog/GFlags
2613 if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
2615 -DGOOGLE_GLOG_DLL_DECL=
2619 -DGFLAGS_DLL_DEFINE_FLAG=
2620 -DGFLAGS_DLL_DECLARE_FLAG=
2625 #-----------------------------------------------------------------------------
2631 if(SHARED_PTR_FOUND)
2632 if(SHARED_PTR_TR1_MEMORY_HEADER)
2633 list(APPEND CERES_DEFINES -DCERES_TR1_MEMORY_HEADER)
2635 if(SHARED_PTR_TR1_NAMESPACE)
2636 list(APPEND CERES_DEFINES -DCERES_TR1_SHARED_PTR)
2639 message(FATAL_ERROR "Ceres: Unable to find shared_ptr.")
2642 if(HAVE_STD_UNORDERED_MAP_HEADER)
2643 if(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
2644 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
2646 if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2647 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE)
2649 list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2650 message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2654 if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2655 list(APPEND CERES_DEFINES -DCERES_TR1_UNORDERED_MAP)
2657 list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2658 message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2663 #-----------------------------------------------------------------------------
2664 # Extra compile flags
2666 if(CMAKE_COMPILER_IS_GNUCC)
2668 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2669 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
2670 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2671 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2672 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_VLA -Werror=vla)
2673 # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
2674 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES -Wstrict-prototypes)
2675 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2676 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2677 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2678 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2679 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2680 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
2681 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
2682 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
2683 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self) # needs -Wuninitialized
2684 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull) # C only
2685 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2686 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2687 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
2688 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness)
2690 # gcc 4.2 gives annoying warnings on every file with this
2691 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2692 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
2695 # versions before gcc4.6 give many BLI_math warnings
2696 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
2697 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS -Wredundant-decls)
2698 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
2701 # versions before gcc4.8 include global name-space.
2702 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.8")
2703 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_SHADOW -Wshadow)
2706 # disable because it gives warnings for printf() & friends.
2707 # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
2710 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2713 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2714 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2715 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2716 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
2717 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self) # needs -Wuninitialized
2718 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2719 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2720 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
2721 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2722 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2723 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2724 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2725 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith)
2726 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter)
2727 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings)
2728 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2729 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness)
2731 # gcc 4.2 gives annoying warnings on every file with this
2732 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2733 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
2736 # causes too many warnings
2738 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2739 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
2742 # flags to undo strict flags
2743 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
2744 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2747 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2750 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
2752 if(APPLE AND WITH_OPENMP) # we need the Intel omp lib linked here to not fail all tests due presence of -fopenmp !
2753 set(CMAKE_REQUIRED_FLAGS "-L${LIBDIR}/openmp/lib -liomp5") # these are only used for the checks
2756 # strange, clang complains these are not supported, but then yses them.
2757 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2758 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2759 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2760 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2761 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2762 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2763 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES -Wstrict-prototypes)
2764 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2765 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2767 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2768 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2769 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2770 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2771 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.
2772 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2773 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2775 # gives too many unfixable warnings
2776 # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS -Wunused-macros)
2777 # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS -Wunused-macros)
2779 # flags to undo strict flags
2780 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2781 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2783 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
2784 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
2785 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
2786 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
2787 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
2788 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
2789 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
2790 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
2792 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
2793 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
2794 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
2795 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2796 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
2798 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
2800 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2801 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2802 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2804 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2805 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2806 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2808 # disable numbered, false positives
2809 set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
2810 set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
2811 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
2812 # most msvc warnings are C & C++
2816 "/w34062" # switch statement contains 'default' but no 'case' labels
2818 "/wd4018" # signed/unsigned mismatch
2819 "/wd4146" # unary minus operator applied to unsigned type, result still unsigned
2820 "/wd4065" # switch statement contains 'default' but no 'case' labels
2821 "/wd4127" # conditional expression is constant
2822 "/wd4181" # qualifier applied to reference type; ignored
2823 "/wd4200" # zero-sized array in struct/union
2824 "/wd4244" # conversion from 'type1' to 'type2', possible loss of data
2825 "/wd4267" # conversion from 'size_t' to 'type', possible loss of data
2826 "/wd4305" # truncation from 'type1' to 'type2'
2827 "/wd4800" # forcing value to bool 'true' or 'false'
2829 "/we4013" # 'function' undefined; assuming extern returning int
2830 "/we4431" # missing type specifier - int assumed
2833 string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
2834 set(C_WARNINGS "${_WARNINGS}")
2835 set(CXX_WARNINGS "${_WARNINGS}")
2839 # ensure python header is found since detection can fail, this could happen
2840 # with _any_ library but since we used a fixed python version this tends to
2841 # be most problematic.
2843 if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
2844 message(FATAL_ERROR "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
2845 "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
2846 "to a valid python include path. Containing "
2847 "Python.h for python version \"${PYTHON_VERSION}\"")
2851 # pass, we have this in an archive to extract
2852 elseif(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
2853 find_python_package(numpy)
2857 # pass, we have this in lib/python/site-packages
2858 elseif(WITH_PYTHON_INSTALL_REQUESTS)
2859 find_python_package(requests)
2864 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
2865 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
2867 # Nothing special is needed, C++11 features are available by default.
2869 message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER_ID} is not supported for C++11 build yet")
2873 # Visual Studio has all standards it supports available by default
2874 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
2875 # Use C99 + GNU extensions, works with GCC, Clang, ICC
2876 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
2879 # Include warnings first, so its possible to disable them with user defined flags
2880 # eg: -Wno-uninitialized
2881 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
2882 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
2884 # defined above, platform spesific but shared names
2901 #-------------------------------------------------------------------------------
2904 # better not set includes here but this debugging option is off by default.
2905 if(WITH_CXX_GUARDEDALLOC)
2906 include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
2907 add_definitions(-DWITH_CXX_GUARDEDALLOC)
2910 if(WITH_ASSERT_ABORT)
2911 add_definitions(-DWITH_ASSERT_ABORT)
2914 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
2915 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
2917 #-----------------------------------------------------------------------------
2921 include(GTestTesting)
2924 if(WITH_BLENDER OR WITH_PLAYER)
2925 add_subdirectory(intern)
2926 add_subdirectory(extern)
2928 # source after intern and extern to gather all
2929 # internal and external library information first, for test linking
2930 add_subdirectory(source)
2931 elseif(WITH_CYCLES_STANDALONE)
2932 add_subdirectory(intern/cycles)
2933 add_subdirectory(extern/clew)
2934 if(WITH_CUDA_DYNLOAD)
2935 add_subdirectory(extern/cuew)
2937 if(NOT WITH_SYSTEM_GLEW)
2938 add_subdirectory(extern/glew)
2942 #-----------------------------------------------------------------------------
2943 # Blender Application
2945 add_subdirectory(source/creator)
2949 #-----------------------------------------------------------------------------
2952 add_subdirectory(source/blenderplayer)
2956 #-----------------------------------------------------------------------------
2958 add_subdirectory(tests)
2961 #-----------------------------------------------------------------------------
2962 # CPack for generating packages
2963 include(build_files/cmake/packaging.cmake)
2966 #-----------------------------------------------------------------------------
2967 # Print Final Configuration
2971 set(_config_msg "\nBlender Configuration\n=====================")
2973 function(info_cfg_option
2977 set(_msg " - ${_setting}")
2978 string(LENGTH "${_msg}" _len)
2979 while("32" GREATER "${_len}")
2980 set(_msg "${_msg} ")
2981 math(EXPR _len "${_len} + 1")
2984 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE)
2987 function(info_cfg_text
2991 set(_config_msg "${_config_msg}\n\n ${_text}" PARENT_SCOPE)
2994 message(STATUS "C Compiler: \"${CMAKE_C_COMPILER_ID}\"")
2995 message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
2997 info_cfg_text("Build Options:")
2998 info_cfg_option(WITH_GAMEENGINE)
2999 info_cfg_option(WITH_PLAYER)
3000 info_cfg_option(WITH_BULLET)
3001 info_cfg_option(WITH_IK_SOLVER)
3002 info_cfg_option(WITH_IK_ITASC)
3003 info_cfg_option(WITH_OPENCOLLADA)
3004 info_cfg_option(WITH_FFTW3)
3005 info_cfg_option(WITH_INTERNATIONAL)
3006 info_cfg_option(WITH_INPUT_NDOF)
3007 info_cfg_option(WITH_CYCLES)
3008 info_cfg_option(WITH_FREESTYLE)
3009 info_cfg_option(WITH_OPENCOLORIO)
3010 info_cfg_option(WITH_OPENVDB)
3012 info_cfg_text("Compiler Options:")
3013 info_cfg_option(WITH_BUILDINFO)
3014 info_cfg_option(WITH_OPENMP)
3015 info_cfg_option(WITH_RAYOPTIMIZATION)
3017 info_cfg_text("System Options:")
3018 info_cfg_option(WITH_INSTALL_PORTABLE)
3019 info_cfg_option(WITH_X11_XF86VMODE)
3020 info_cfg_option(WITH_X11_XINPUT)
3021 info_cfg_option(WITH_MEM_JEMALLOC)
3022 info_cfg_option(WITH_MEM_VALGRIND)
3023 info_cfg_option(WITH_SYSTEM_GLEW)
3024 info_cfg_option(WITH_SYSTEM_OPENJPEG)
3026 info_cfg_text("Image Formats:")
3027 info_cfg_option(WITH_OPENIMAGEIO)
3028 info_cfg_option(WITH_IMAGE_CINEON)
3029 info_cfg_option(WITH_IMAGE_DDS)
3030 info_cfg_option(WITH_IMAGE_HDR)
3031 info_cfg_option(WITH_IMAGE_OPENEXR)
3032 info_cfg_option(WITH_IMAGE_OPENJPEG)
3033 info_cfg_option(WITH_IMAGE_TIFF)
3035 info_cfg_text("Audio:")
3036 info_cfg_option(WITH_OPENAL)
3037 info_cfg_option(WITH_SDL)
3038 info_cfg_option(WITH_SDL_DYNLOAD)
3039 info_cfg_option(WITH_JACK)
3040 info_cfg_option(WITH_JACK_DYNLOAD)
3041 info_cfg_option(WITH_CODEC_AVI)
3042 info_cfg_option(WITH_CODEC_FFMPEG)
3043 info_cfg_option(WITH_CODEC_SNDFILE)
3045 info_cfg_text("Compression:")
3046 info_cfg_option(WITH_LZMA)
3047 info_cfg_option(WITH_LZO)
3049 info_cfg_text("Python:")
3050 info_cfg_option(WITH_PYTHON_INSTALL)
3051 info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
3052 info_cfg_option(WITH_PYTHON_MODULE)
3053 info_cfg_option(WITH_PYTHON_SAFETY)
3055 info_cfg_option(WITH_PYTHON_FRAMEWORK)
3058 info_cfg_text("Modifiers:")
3059 info_cfg_option(WITH_MOD_BOOLEAN)
3060 info_cfg_option(WITH_MOD_REMESH)
3061 info_cfg_option(WITH_MOD_FLUID)
3062 info_cfg_option(WITH_MOD_OCEANSIM)
3064 info_cfg_text("OpenGL:")
3065 info_cfg_option(WITH_GLEW_ES)
3066 info_cfg_option(WITH_GLU)
3067 info_cfg_option(WITH_GL_EGL)
3068 info_cfg_option(WITH_GL_PROFILE_COMPAT)
3069 info_cfg_option(WITH_GL_PROFILE_CORE)
3070 info_cfg_option(WITH_GL_PROFILE_ES20)
3072 info_cfg_option(WITH_GL_ANGLE)
3077 message("${_config_msg}")