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 (${CMAKE_VERSION} VERSION_LESS 3.0))
51 # keep until CMake-3.0 is min requirement
52 cmake_policy(SET CMP0043 OLD)
55 if(NOT EXECUTABLE_OUTPUT_PATH)
59 # this starts out unset
60 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
62 # avoid having empty buildtype
63 set(CMAKE_BUILD_TYPE_INIT "Release")
65 # quiet output for Makefiles, 'make -s' helps too
66 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
68 # global compile definitions since add_definitions() adds for all.
69 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG _DEBUG)
70 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE NDEBUG)
71 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL NDEBUG)
72 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO NDEBUG)
75 #-----------------------------------------------------------------------------
78 # see "cmake --help-policy CMP0003"
79 # So library linking is more sane
80 cmake_policy(SET CMP0003 NEW)
82 # So BUILDINFO and BLENDERPATH strings are automatically quoted
83 cmake_policy(SET CMP0005 NEW)
85 # So syntax problems are errors
86 cmake_policy(SET CMP0010 NEW)
88 # Input directories must have CMakeLists.txt
89 cmake_policy(SET CMP0014 NEW)
91 #-----------------------------------------------------------------------------
93 include(build_files/cmake/macros.cmake)
96 #-----------------------------------------------------------------------------
99 blender_project_hack_pre()
103 blender_project_hack_post()
107 #-----------------------------------------------------------------------------
108 # Redirect output files
110 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
111 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
112 set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests CACHE INTERNAL "" FORCE)
114 #-----------------------------------------------------------------------------
115 # Set default config options
117 get_blender_version()
120 #-----------------------------------------------------------------------------
121 # Platform Specific Defaults
127 macro(option_defaults_init)
128 foreach(_var ${ARGV})
130 list(APPEND _init_vars "${_var}")
135 # remove from namespace
136 macro(option_defaults_clear)
137 foreach(_var ${_init_vars})
145 # values to initialize WITH_****
146 option_defaults_init(
154 _init_LIBMV_SCHUR_SPECIALIZATION
163 if(UNIX AND NOT APPLE)
164 # some of these libraries are problematic on Linux
165 # disable less important dependencies by default
166 set(_init_BUILDINFO OFF)
167 set(_init_CODEC_FFMPEG OFF)
168 set(_init_CYCLES_OSL OFF)
169 set(_init_IMAGE_OPENEXR OFF)
170 set(_init_IMAGE_REDCODE OFF)
171 set(_init_INPUT_NDOF OFF)
173 set(_init_LIBMV_SCHUR_SPECIALIZATION OFF)
174 set(_init_OPENCOLLADA OFF)
175 set(_init_OPENCOLORIO OFF)
178 set(_init_GAMEENGINE OFF)
182 #-----------------------------------------------------------------------------
185 # First platform spesific non-cached vars
186 if(UNIX AND NOT APPLE)
190 # Blender internal features
191 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
192 mark_as_advanced(WITH_BLENDER)
194 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
196 option(WITH_PYTHON "Enable Embedded Python API (only disable for development)" ON)
197 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON)
198 mark_as_advanced(WITH_PYTHON) # dont want people disabling this unless they really know what they are doing.
199 mark_as_advanced(WITH_PYTHON_SECURITY) # some distributions see this as a security issue, rather than have them patch it, make a build option.
200 set(WITH_PYTHON_SECURITY ON CACHE BOOL "ON" FORCE) # temp force on.
202 option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency, only enable for development)." OFF)
203 mark_as_advanced(WITH_PYTHON_SAFETY)
204 option(WITH_PYTHON_MODULE "Enable building as a python module which runs without a user interface, like running regular blender in background mode (experimental, only enable for development), installs to PYTHON_SITE_PACKAGES (or CMAKE_INSTALL_PREFIX if WITH_INSTALL_PORTABLE is enabled)." OFF)
206 option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
209 option(WITH_BUILDINFO "Include extra build details (only disable for development & faster builds)" ${_init_BUILDINFO})
210 if(${CMAKE_VERSION} VERSION_LESS 2.8.8)
211 # add_library OBJECT arg unsupported
212 set(WITH_BUILDINFO OFF)
215 option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
216 option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
217 option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke and audio effects)" ${_init_FFTW3})
218 option(WITH_BULLET "Enable Bullet (Physics Engine)" ON)
219 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
220 mark_as_advanced(WITH_SYSTEM_BULLET)
221 option(WITH_GAMEENGINE "Enable Game Engine" ${_init_GAMEENGINE})
222 option(WITH_PLAYER "Build Player" OFF)
223 option(WITH_OPENCOLORIO "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
224 option(WITH_COMPOSITOR "Enable the tile based nodal compositor" ON)
226 # GHOST Windowing Library Options
227 option(WITH_GHOST_DEBUG "Enable debugging output for the GHOST library" OFF)
228 mark_as_advanced(WITH_GHOST_DEBUG)
230 option(WITH_GHOST_SDL "Enable building blender against SDL for windowing rather then the native APIs" OFF)
231 mark_as_advanced(WITH_GHOST_SDL)
234 option(WITH_GHOST_XDND "Enable drag'n'drop support on X11 using XDND protocol" ON)
238 option(WITH_HEADLESS "Build without graphical support (renderfarm, server mode only)" OFF)
239 mark_as_advanced(WITH_HEADLESS)
241 option(WITH_AUDASPACE "Build with blenders audio library (only disable if you know what you're doing!)" ON)
242 mark_as_advanced(WITH_AUDASPACE)
244 option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ON)
247 option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)" ON)
248 option(WITH_X11_XF86VMODE "Enable X11 video mode switching" ON)
251 if(UNIX AND NOT APPLE)
252 option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
253 option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system" ON)
255 # not an option for other OS's
256 set(WITH_SYSTEM_GLEW OFF)
257 set(WITH_SYSTEM_GLES OFF)
261 # (unix defaults to System OpenJPEG On)
262 option(WITH_SYSTEM_OPENJPEG "Use the operating systems OpenJPEG library" OFF)
264 if(UNIX AND NOT APPLE)
265 option(WITH_SYSTEM_EIGEN3 "Use the systems Eigen3 library" OFF)
270 option(WITH_MOD_FLUID "Enable Elbeem Modifier (Fluid Simulation)" ON)
271 option(WITH_MOD_SMOKE "Enable Smoke Modifier (Smoke Simulation)" ON)
272 option(WITH_MOD_BOOLEAN "Enable Boolean Modifier" ON)
273 option(WITH_MOD_REMESH "Enable Remesh Modifier" ON)
274 # option(WITH_MOD_CLOTH_ELTOPO "Enable Experimental cloth solver" OFF) # this is now only available in a branch
275 # mark_as_advanced(WITH_MOD_CLOTH_ELTOPO)
276 option(WITH_MOD_OCEANSIM "Enable Ocean Modifier" OFF)
278 # Image format support
279 option(WITH_OPENIMAGEIO "Enable OpenImageIO Support (http://www.openimageio.org)" ON)
280 option(WITH_IMAGE_OPENEXR "Enable OpenEXR Support (http://www.openexr.com)" ${_init_IMAGE_OPENEXR})
281 option(WITH_IMAGE_OPENJPEG "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
282 option(WITH_IMAGE_TIFF "Enable LibTIFF Support" ON)
283 option(WITH_IMAGE_DDS "Enable DDS Image Support" ON)
284 option(WITH_IMAGE_CINEON "Enable CINEON and DPX Image Support" ON)
285 option(WITH_IMAGE_HDR "Enable HDR Image Support" ON)
286 option(WITH_IMAGE_REDCODE "Enable RedCode Image Support" ${_init_IMAGE_REDCODE})
287 option(WITH_IMAGE_FRAMESERVER "Enable image FrameServer Support for rendering" ON)
289 # Audio/Video format support
290 option(WITH_CODEC_AVI "Enable Blenders own AVI file support (raw/jpeg)" ON)
291 option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" ${_init_CODEC_FFMPEG})
292 option(WITH_CODEC_SNDFILE "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF)
295 option(WITH_CODEC_QUICKTIME "Enable Quicktime Support" ON)
299 # Disable opencollada when we don't have precompiled libs
300 option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" ${_init_OPENCOLLADA})
303 option(WITH_SDL "Enable SDL for sound and joystick support" ${_init_SDL})
304 option(WITH_OPENAL "Enable OpenAL Support (http://www.openal.org)" ON)
305 option(WITH_JACK "Enable Jack Support (http://www.jackaudio.org)" ${_init_JACK})
306 if(UNIX AND NOT APPLE)
307 option(WITH_JACK_DYNLOAD "Enable runtime dynamic Jack libraries loading" OFF)
309 if(UNIX AND NOT APPLE)
310 option(WITH_SDL_DYNLOAD "Enable runtime dynamic SDL libraries loading" OFF)
314 option(WITH_LZO "Enable fast LZO compression (used for pointcache)" ON)
315 option(WITH_LZMA "Enable best LZMA compression, (used for pointcache)" ON)
316 if(UNIX AND NOT APPLE)
317 option(WITH_SYSTEM_LZO "Use the system LZO library" OFF)
320 # Camera/motion tracking
321 option(WITH_LIBMV "Enable libmv structure from motion library" ON)
322 option(WITH_LIBMV_SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." ${_init_LIBMV_SCHUR_SPECIALIZATION})
323 mark_as_advanced(WITH_LIBMV_SCHUR_SPECIALIZATIONS)
326 option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
330 option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
332 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ${_init_INPUT_NDOF})
333 option(WITH_RAYOPTIMIZATION "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
334 option(WITH_OPENNL "Enable use of Open Numerical Library" ON)
335 if(UNIX AND NOT APPLE)
336 option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
337 option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
339 option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
340 mark_as_advanced(WITH_BOOST_ICU)
343 option(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON)
344 option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder" ON)
345 set(PYTHON_NUMPY_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'numpy' module")
346 mark_as_advanced(PYTHON_NUMPY_PATH)
347 option(WITH_CPU_SSE "Enable SIMD instruction if they're detected on the host machine" ON)
348 mark_as_advanced(WITH_CPU_SSE)
350 if(UNIX AND NOT APPLE)
351 option(WITH_PYTHON_INSTALL_REQUESTS "Copy system requests into the blender install folder" ON)
352 set(PYTHON_REQUESTS_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'requests' module")
353 mark_as_advanced(PYTHON_REQUESTS_PATH)
357 option(WITH_CYCLES "Enable cycles Render Engine" ON)
358 option(WITH_CYCLES_STANDALONE "Build cycles standalone application" OFF)
359 option(WITH_CYCLES_STANDALONE_GUI "Build cycles standalone with GUI" OFF)
360 option(WITH_CYCLES_OSL "Build Cycles with OSL support" ${_init_CYCLES_OSL})
361 option(WITH_CYCLES_CUDA_BINARIES "Build cycles CUDA binaries" OFF)
362 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_50 CACHE STRING "CUDA architectures to build binaries for")
363 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
364 unset(PLATFORM_DEFAULT)
365 option(WITH_CYCLES_LOGGING "Build cycles with logging support" ON)
366 option(WITH_CYCLES_DEBUG "Build cycles with extra debug capabilities" OFF)
367 mark_as_advanced(WITH_CYCLES_LOGGING)
368 mark_as_advanced(WITH_CYCLES_DEBUG)
371 option(WITH_LLVM "Use LLVM" OFF)
373 option(LLVM_STATIC "Link with LLVM static libraries" ON) # we prefer static llvm build on Apple, dyn build possible though
375 option(LLVM_STATIC "Link with LLVM static libraries" OFF)
377 mark_as_advanced(LLVM_STATIC)
379 # disable for now, but plan to support on all platforms eventually
380 option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" ON)
381 mark_as_advanced(WITH_MEM_JEMALLOC)
383 # currently only used for BLI_mempool
384 option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
385 mark_as_advanced(WITH_MEM_VALGRIND)
388 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
389 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
391 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
392 mark_as_advanced(WITH_ASSERT_ABORT)
394 option(WITH_BOOST "Enable features depending on boost" ON)
397 option(WITH_GTESTS "Enable GTest unit testing" OFF)
401 if(UNIX AND NOT APPLE)
402 option(WITH_DOC_MANPAGE "Create a manual page (Unix manpage)" OFF)
408 option(WITH_GLEW_MX "Support multiple GLEW contexts (experimental)" OFF )
409 option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
410 option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
411 option(WITH_GL_PROFILE_COMPAT "Support using the OpenGL 'compatibility' profile. (deprecated)" ON )
412 option(WITH_GL_PROFILE_CORE "Support using the OpenGL 3.2+ 'core' profile." OFF)
413 option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
414 option(WITH_GPU_DEBUG "Create a debug OpenGL context (allows inserting custom messages and getting notifications for bad GL use)" OFF)
420 WITH_GL_PROFILE_COMPAT
426 if(WITH_GL_PROFILE_COMPAT)
433 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)
434 mark_as_advanced(WITH_GL_ANGLE)
437 if(WITH_GLEW_ES AND WITH_SYSTEM_GLEW)
438 message(WARNING Ignoring WITH_SYSTEM_GLEW and using WITH_GLEW_ES)
439 set(WITH_SYSTEM_GLEW OFF)
443 getDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
444 set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
447 # Experimental support of C++11
448 option(WITH_CPP11 "Build with C++11 standard enabled, for development use only!" OFF)
449 mark_as_advanced(WITH_CPP11)
452 option_defaults_clear()
458 # By default we want to install to the directory we are compiling our executables
459 # unless specified otherwise, which we currently do not allow
460 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
462 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
464 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
466 if(WITH_INSTALL_PORTABLE)
467 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH} CACHE PATH "default install path" FORCE)
477 if(${CMAKE_VERSION} VERSION_LESS 3.0) # else breaks setting CMP0043 policy
478 cmake_minimum_required(VERSION 2.8.8)
479 cmake_policy(VERSION 2.8.8)
482 if(NOT CMAKE_OSX_ARCHITECTURES)
483 set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
484 "Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
488 execute_process(COMMAND uname -r OUTPUT_VARIABLE MAC_SYS) # check for actual system-version
489 if(${MAC_SYS} MATCHES 14)
490 set(OSX_SYSTEM 10.10)
491 # throw an error here, older cmake cannot handle 2 digit subversion!
492 cmake_minimum_required(VERSION 3.0.0)
493 elseif(${MAC_SYS} MATCHES 13)
495 elseif(${MAC_SYS} MATCHES 12)
497 elseif(${MAC_SYS} MATCHES 11)
499 elseif(${MAC_SYS} MATCHES 10)
501 elseif(${MAC_SYS} MATCHES 9)
504 set(OSX_SYSTEM unsupported)
506 message(STATUS "Detected system-version: " ${OSX_SYSTEM})
508 # workaround for incorrect cmake xcode lookup for developer previews - XCODE_VERSION does not take xcode-select path into accout
509 # but would always look into /Applications/Xcode.app while dev versions are named Xcode<version>-DP<preview_number>
510 execute_process(COMMAND xcode-select --print-path OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
511 string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case
512 message(STATUS "Xcode-bundle : " ${XCODE_BUNDLE})
514 if(${CMAKE_GENERATOR} MATCHES "Xcode")
516 if(${XCODE_VERSION} VERSION_GREATER 4.2) # earlier xcode has no bundled developer dir, no sense in getting xcode path from
517 string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME) # reduce to XCode name without dp extension
518 if(${DP_NAME} MATCHES Xcode5)
523 ##### cmake incompatibility with xcode 4.3 and higher #####
524 if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
525 message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
527 ### end cmake incompatibility with xcode 4.3 and higher ###
529 if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
530 # Xcode 4 defaults to the Apple LLVM Compiler.
531 # Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
532 set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
533 message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
535 else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
536 execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
537 string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
538 unset(XCODE_VERS_BUILD_NR)
541 message(STATUS "Detected Xcode-version: " ${XCODE_VERSION})
543 if(${XCODE_VERSION} VERSION_LESS 4.3)
544 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE) # use guaranteed existing sdk
546 # note: xcode-select path could be ambigous, cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
547 # so i use a selfcomposed bundlepath here
548 set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
549 message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
550 set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
551 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
552 if(${CMAKE_GENERATOR} MATCHES "Xcode")
553 set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM}) # to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
557 if(OSX_SYSTEM MATCHES 10.9)
558 set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT}) # make sure syslibs and headers are looked up in sdk ( expecially for 10.9 openGL atm. )
561 if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
562 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" CACHE STRING "" FORCE) # 10.6 is our min. target, if you use higher sdk, weak linking happens
565 if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
566 # force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
567 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
568 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
569 add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
572 option(WITH_LIBS10.5 "Use 10.5 libs (needed for 64bit builds)" OFF)
576 #-----------------------------------------------------------------------------
577 # Check for conflicting/unsupported configurations
579 if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_STANDALONE)
580 message(FATAL_ERROR "At least one of WITH_BLENDER or WITH_PLAYER or WITH_CYCLES_STANDALONE must be enabled, nothing to do!")
583 if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
584 message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
587 if(NOT WITH_AUDASPACE)
589 message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
592 message(FATAL_ERROR "WITH_JACK requires WITH_AUDASPACE")
595 message(FATAL_ERROR "WITH_GAMEENGINE requires WITH_AUDASPACE")
599 if(NOT WITH_SDL AND WITH_GHOST_SDL)
600 message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
603 if(WITH_IMAGE_REDCODE AND ((NOT WITH_IMAGE_OPENJPEG) OR (NOT WITH_CODEC_FFMPEG)))
604 message(FATAL_ERROR "WITH_IMAGE_REDCODE requires WITH_IMAGE_OPENJPEG and WITH_CODEC_FFMPEG")
607 # python module, needs some different options
608 if(WITH_PYTHON_MODULE AND WITH_PLAYER)
609 message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PLAYER to be OFF")
612 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
613 message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
617 # may as well build python module without a UI
618 if(WITH_PYTHON_MODULE)
619 set(WITH_HEADLESS ON)
626 # enable boost for cycles, audaspace or i18n
627 # otherwise if the user disabled
629 # Explicitly disabled. so disable all deps.
633 message(STATUS "'WITH_BOOST' is disabled: forceing 'set(${_setting} ${_val})'")
635 set(${_setting} ${_val})
638 set_and_warn(WITH_CYCLES OFF)
639 set_and_warn(WITH_AUDASPACE OFF)
640 set_and_warn(WITH_INTERNATIONAL OFF)
642 set_and_warn(WITH_OPENAL OFF) # depends on AUDASPACE
643 set_and_warn(WITH_GAMEENGINE OFF) # depends on AUDASPACE
644 elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_AUDASPACE OR WITH_INTERNATIONAL)
647 # Enabled but we don't need it
651 # auto enable openimageio for cycles
653 set(WITH_OPENIMAGEIO ON)
656 # auto enable openimageio linking dependencies
658 set(WITH_IMAGE_OPENEXR ON)
659 set(WITH_IMAGE_TIFF ON)
662 # auto enable llvm for cycles_osl
664 set(WITH_LLVM ON CACHE BOOL "" FORCE)
667 # don't store paths to libs for portable distribution
668 if(WITH_INSTALL_PORTABLE)
669 set(CMAKE_SKIP_BUILD_RPATH TRUE)
672 if(WITH_GHOST_SDL OR WITH_HEADLESS)
674 set(WITH_X11_XINPUT OFF)
675 set(WITH_X11_XF86VMODE OFF)
676 set(WITH_GHOST_XDND OFF)
677 set(WITH_INPUT_IME OFF)
681 TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
683 message(STATUS "SSE and SSE2 optimizations are DISABLED!")
684 set(COMPILER_SSE_FLAG)
685 set(COMPILER_SSE2_FLAG)
688 TEST_STDBOOL_SUPPORT()
690 add_definitions(-DHAVE_STDBOOL_H)
693 #-----------------------------------------------------------------------------
694 # Check for valid directories
695 # ... a partial checkout may cause this.
697 # note: we need to check for a known subdir in both cases.
698 # since uninitialized git submodules will give blank dirs
700 if(WITH_INTERNATIONAL)
701 if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/datafiles/locale/languages")
702 message(WARNING "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
703 "This is a 'git submodule', which are known not to work with bridges to other version "
704 "control systems, disabling 'WITH_INTERNATIONAL'.")
705 set(WITH_INTERNATIONAL OFF)
710 if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/scripts/addons/modules")
711 message(WARNING "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
712 "This is a 'git submodule', which are known not to work with bridges to other version "
713 "control systems: * CONTINUING WITHOUT ADDONS *")
717 #-----------------------------------------------------------------------------
718 # Initialize un-cached vars, avoid unused warning
720 # linux only, not cached
721 set(WITH_BINRELOC OFF)
723 # MAXOSX only, set to avoid uninitialized
729 # these are added to later on.
733 # for gcc -Wno-blah-blah
734 set(CC_REMOVE_STRICT_FLAGS)
736 # libraries to link the binary with passed to target_link_libraries()
737 # known as LLIBS to scons
738 set(PLATFORM_LINKLIBS "")
740 # Added to linker flags in setup_liblinks
741 # - CMAKE_EXE_LINKER_FLAGS
742 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
743 set(PLATFORM_LINKFLAGS "")
744 set(PLATFORM_LINKFLAGS_DEBUG "")
747 # For alternate Python locations the commandline can be used to override detected/default cache settings, e.g:
750 # -D PYTHON_VERSION=3.4 \
751 # -D PYTHON_INCLUDE_DIR=/opt/py34/include/python3.4d \
752 # -D PYTHON_LIBRARY=/opt/py34/lib/libpython3.4d.so
756 # -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4 \
757 # -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/config \
760 # When changing any of this remember to update the notes in doc/build_systems/cmake.txt
762 #-----------------------------------------------------------------------------
766 find_package(X11 REQUIRED)
768 find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
769 mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
771 list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
775 list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
777 set(WITH_X11_XINPUT OFF)
781 if(WITH_X11_XF86VMODE)
782 # XXX, why dont cmake make this available?
783 find_library(X11_Xxf86vmode_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
784 mark_as_advanced(X11_Xxf86vmode_LIB)
785 if(X11_Xxf86vmode_LIB)
786 list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
788 set(WITH_X11_XF86VMODE OFF)
794 if(UNIX AND NOT APPLE)
795 macro(find_package_wrapper)
797 set(_cmake_find_library_suffixes_back ${CMAKE_FIND_LIBRARY_SUFFIXES})
798 set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
800 find_package(${ARGV})
802 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_cmake_find_library_suffixes_back})
803 unset(_cmake_find_library_suffixes_back)
807 find_package_wrapper(JPEG REQUIRED)
808 find_package_wrapper(PNG REQUIRED)
809 find_package_wrapper(ZLIB REQUIRED)
810 find_package_wrapper(Freetype REQUIRED)
812 if(WITH_LZO AND WITH_SYSTEM_LZO)
813 find_package_wrapper(LZO)
815 message(FATAL_ERROR "Failed finding system LZO version!")
819 if(WITH_SYSTEM_EIGEN3)
820 find_package_wrapper(Eigen3)
822 message(FATAL_ERROR "Failed finding system Eigen3 version!")
825 # else values are set below for all platforms
828 # No way to set py34. remove for now.
829 # find_package(PythonLibs)
831 # Use our own instead, since wothout py is such a rare case,
832 # require this package
833 # XXX Linking errors with debian static python :/
834 # find_package_wrapper(PythonLibsUnix REQUIRED)
835 find_package(PythonLibsUnix REQUIRED)
838 if(WITH_IMAGE_OPENEXR)
839 find_package_wrapper(OpenEXR) # our own module
840 if(NOT OPENEXR_FOUND)
841 set(WITH_IMAGE_OPENEXR OFF)
845 if(WITH_IMAGE_OPENJPEG)
846 find_package_wrapper(OpenJPEG)
847 if(NOT OPENJPEG_FOUND)
848 set(WITH_IMAGE_OPENJPEG OFF)
853 # XXX Linking errors with debian static tiff :/
854 # find_package_wrapper(TIFF)
857 set(WITH_IMAGE_TIFF OFF)
863 find_package_wrapper(OpenAL)
871 set(SDL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extern/sdlew/include/SDL2")
874 find_package_wrapper(SDL2)
876 # Use same names for both versions of SDL until we move to 2.x.
877 set(SDL_INCLUDE_DIR "${SDL2_INCLUDE_DIR}")
878 set(SDL_LIBRARY "${SDL2_LIBRARY}")
879 set(SDL_FOUND "${SDL2_FOUND}")
881 find_package_wrapper(SDL)
887 # unset(SDLMAIN_LIBRARY CACHE)
895 find_package_wrapper(Jack)
902 if(WITH_CODEC_SNDFILE)
903 find_package_wrapper(SndFile)
904 if(NOT SNDFILE_FOUND)
905 set(WITH_CODEC_SNDFILE OFF)
909 if(WITH_CODEC_FFMPEG)
910 set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
911 set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
913 mark_as_advanced(FFMPEG)
915 # lame, but until we have proper find module for ffmpeg
916 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
917 if(EXISTS "${FFMPEG}/include/ffmpeg/")
918 list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
922 mark_as_advanced(FFMPEG_LIBRARIES)
923 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
927 find_package_wrapper(Fftw3)
934 find_package_wrapper(OpenCOLLADA)
935 if(OPENCOLLADA_FOUND)
936 find_package_wrapper(XML2)
937 find_package_wrapper(PCRE)
939 set(WITH_OPENCOLLADA OFF)
943 if(WITH_MEM_JEMALLOC)
944 find_package_wrapper(JeMalloc)
945 if(NOT JEMALLOC_FOUND)
946 set(WITH_MEM_JEMALLOC OFF)
951 find_package_wrapper(Spacenav)
952 if(NOT SPACENAV_FOUND)
953 set(WITH_INPUT_NDOF OFF)
956 # use generic names within blenders buildsystem.
958 set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
959 set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
964 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
966 set(OSL_ROOT ${CYCLES_OSL})
968 find_package_wrapper(OpenShadingLanguage)
970 if(${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6")
971 # Note: --whole-archive is needed to force loading of all symbols in liboslexec,
972 # otherwise LLVM is missing the osl_allocate_closure_component function
973 set(OSL_LIBRARIES ${OSL_OSLCOMP_LIBRARY} -Wl,--whole-archive ${OSL_OSLEXEC_LIBRARY} -Wl,--no-whole-archive ${OSL_OSLQUERY_LIBRARY})
976 message(STATUS "OSL not found, disabling it from Cycles")
977 set(WITH_CYCLES_OSL OFF)
982 # uses in build instructions to override include and library variables
985 set(Boost_USE_STATIC_LIBS ON)
987 set(Boost_USE_MULTITHREADED ON)
988 set(__boost_packages filesystem regex system thread date_time)
990 if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
991 list(APPEND __boost_packages wave)
995 if(WITH_INTERNATIONAL)
996 list(APPEND __boost_packages locale)
998 if(WITH_CYCLES_NETWORK)
999 list(APPEND __boost_packages serialization)
1001 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1003 # try to find non-multithreaded if -mt not found, this flag
1004 # doesn't matter for us, it has nothing to do with thread
1005 # safety, but keep it to not disturb build setups
1006 set(Boost_USE_MULTITHREADED OFF)
1007 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1009 unset(__boost_packages)
1010 if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
1011 find_package(IcuLinux)
1013 mark_as_advanced(Boost_DIR) # why doesnt boost do this?
1016 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1017 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1018 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1019 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1022 if(WITH_OPENIMAGEIO)
1023 find_package_wrapper(OpenImageIO)
1024 if(NOT OPENIMAGEIO_PUGIXML_FOUND AND WITH_CYCLES_STANDALONE)
1025 find_package_wrapper(PugiXML)
1027 set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
1028 set(PUGIXML_LIBRARIES "")
1031 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARIES} ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${ZLIB_LIBRARIES} ${BOOST_LIBRARIES})
1032 set(OPENIMAGEIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
1033 set(OPENIMAGEIO_DEFINITIONS "")
1036 list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
1038 if(WITH_IMAGE_OPENEXR)
1039 list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
1042 if(NOT OPENIMAGEIO_FOUND)
1043 set(WITH_OPENIMAGEIO OFF)
1044 message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
1048 if(WITH_OPENCOLORIO)
1049 find_package_wrapper(OpenColorIO)
1051 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
1052 set(OPENCOLORIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
1053 set(OPENCOLORIO_DEFINITIONS)
1055 if(NOT OPENCOLORIO_FOUND)
1056 set(WITH_OPENCOLORIO OFF)
1057 message(STATUS "OpenColorIO not found")
1061 # XXX Maybe most of this section should go into an llvm module?
1065 if(NOT DEFINED LLVM_VERSION)
1066 find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION} HINTS ${LLVM_ROOT_DIR}/bin NO_CMAKE_PATH)
1069 find_program(LLVM_CONFIG llvm-config HINTS ${LLVM_ROOT_DIR}/bin NO_CMAKE_PATH)
1072 if(NOT DEFINED LLVM_VERSION)
1073 find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION})
1076 find_program(LLVM_CONFIG llvm-config)
1080 if(NOT DEFINED LLVM_VERSION)
1081 execute_process(COMMAND ${LLVM_CONFIG} --version
1082 OUTPUT_VARIABLE LLVM_VERSION
1083 OUTPUT_STRIP_TRAILING_WHITESPACE)
1084 set(LLVM_VERSION ${LLVM_VERSION} CACHE STRING "Version of LLVM to use")
1086 if(NOT DEFINED LLVM_ROOT_DIR)
1087 execute_process(COMMAND ${LLVM_CONFIG} --prefix
1088 OUTPUT_VARIABLE LLVM_ROOT_DIR
1089 OUTPUT_STRIP_TRAILING_WHITESPACE)
1090 set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation")
1092 if(NOT DEFINED LLVM_LIBPATH)
1093 execute_process(COMMAND ${LLVM_CONFIG} --libdir
1094 OUTPUT_VARIABLE LLVM_LIBPATH
1095 OUTPUT_STRIP_TRAILING_WHITESPACE)
1096 set(LLVM_LIBPATH ${LLVM_LIBPATH} CACHE PATH "Path to the LLVM library path")
1097 mark_as_advanced(LLVM_LIBPATH)
1101 find_library(LLVM_LIBRARY
1102 NAMES LLVMAnalysis # first of a whole bunch of libs to get
1103 PATHS ${LLVM_LIBPATH})
1105 find_library(LLVM_LIBRARY
1106 NAMES LLVM-${LLVM_VERSION}
1107 PATHS ${LLVM_LIBPATH})
1111 if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
1113 # if static LLVM libraries were requested, use llvm-config to generate
1114 # the list of what libraries we need, and substitute that in the right
1115 # way for LLVM_LIBRARY.
1116 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
1117 OUTPUT_VARIABLE LLVM_LIBRARY
1118 OUTPUT_STRIP_TRAILING_WHITESPACE)
1119 string(REPLACE " " ";" LLVM_LIBRARY "${LLVM_LIBRARY}")
1122 message(FATAL_ERROR "LLVM not found.")
1127 if(WITH_LLVM OR WITH_SDL_DYNLOAD)
1128 # Fix for conflict with Mesa llvmpipe
1129 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/source/creator/blender.map")
1132 # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
1133 list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
1135 find_package(Threads REQUIRED)
1136 list(APPEND PLATFORM_LINKLIBS ${CMAKE_THREAD_LIBS_INIT})
1137 # used by other platforms
1138 set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
1141 list(APPEND PLATFORM_LINKLIBS ${CMAKE_DL_LIBS})
1144 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
1145 if(NOT WITH_PYTHON_MODULE)
1146 # binreloc is linux only
1147 set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
1148 set(WITH_BINRELOC ON)
1152 # lfs on glibc, all compilers should use
1153 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1156 if(CMAKE_COMPILER_IS_GNUCC)
1157 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1158 # CLang is the same as GCC for now.
1159 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1160 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1162 elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
1163 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
1165 # Intel C++ Compiler
1166 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1167 # think these next two are broken
1168 find_program(XIAR xiar)
1170 set(CMAKE_AR "${XIAR}")
1172 mark_as_advanced(XIAR)
1174 find_program(XILD xild)
1176 set(CMAKE_LINKER "${XILD}")
1178 mark_as_advanced(XILD)
1180 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
1181 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
1183 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
1184 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1185 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
1190 add_definitions(-DWIN32)
1194 # needed for some MSVC installations
1195 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
1196 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
1197 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
1199 list(APPEND PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp)
1202 list(APPEND PLATFORM_LINKLIBS imm32)
1206 -D_CRT_NONSTDC_NO_DEPRECATE
1207 -D_CRT_SECURE_NO_DEPRECATE
1208 -D_SCL_SECURE_NO_DEPRECATE
1213 # MSVC11 needs _ALLOW_KEYWORD_MACROS to build
1214 add_definitions(-D_ALLOW_KEYWORD_MACROS)
1217 # We want to support Vista level ABI for x64
1218 add_definitions(-D_WIN32_WINNT=0x600)
1221 # Make cmake find the msvc redistributables
1222 set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
1223 include(InstallRequiredSystemLibraries)
1225 set(CMAKE_CXX_FLAGS "/nologo /J /Gd /EHsc /MP" CACHE STRING "MSVC MT C++ flags " FORCE)
1226 set(CMAKE_C_FLAGS "/nologo /J /Gd /MP" CACHE STRING "MSVC MT C++ flags " FORCE)
1229 set(CMAKE_CXX_FLAGS_DEBUG "/Od /RTC1 /MTd /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
1231 set(CMAKE_CXX_FLAGS_DEBUG "/Od /RTC1 /MTd /ZI /MP" CACHE STRING "MSVC MT flags " FORCE)
1233 set(CMAKE_CXX_FLAGS_RELEASE "/O2 /Ob2 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
1234 set(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /Ob1 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
1235 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
1237 set(CMAKE_C_FLAGS_DEBUG "/Od /RTC1 /MTd /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
1239 set(CMAKE_C_FLAGS_DEBUG "/Od /RTC1 /MTd /ZI /MP" CACHE STRING "MSVC MT flags " FORCE)
1241 set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
1242 set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Ob1 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
1243 set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
1246 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
1248 # MSVC only, Mingw doesnt need
1250 set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1252 set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1255 set(PLATFORM_LINKFLAGS_DEBUG "/IGNORE:4099 /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1257 if(NOT DEFINED LIBDIR)
1258 # Setup 64bit and 64bit windows systems
1260 message(STATUS "64 bit compiler detected.")
1261 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/win64_vc12)
1263 message(STATUS "32 bit compiler detected.")
1264 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/windows_vc12)
1267 message(STATUS using LIBDIR ${LIBDIR})
1270 # Add each of our libraries to our cmake_prefix_path so find_package() could work
1271 file(GLOB children RELATIVE ${LIBDIR} ${LIBDIR}/*)
1272 foreach(child ${children})
1273 if(IS_DIRECTORY ${LIBDIR}/${child})
1274 list(APPEND CMAKE_PREFIX_PATH ${LIBDIR}/${child})
1278 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1279 set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
1280 set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
1281 set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
1282 set(ZLIB_DIR ${LIBDIR}/zlib)
1283 #find_package(zlib) # we want to find before finding things that depend on it like png
1288 message(WARNING "Using HARDCODED libpng locations")
1289 set(PNG_PNG_INCLUDE_DIR ${LIBDIR}/png/include)
1290 set(PNG_LIBRARIES libpng)
1291 set(PNG "${LIBDIR}/png")
1292 set(PNG_INCLUDE_DIRS "${PNG}/include")
1293 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1297 set(JPEG_NAMES ${JPEG_NAMES} libjpeg)
1299 find_package(jpeg REQUIRED)
1301 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1302 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1304 set(FREETYPE ${LIBDIR}/freetype)
1305 set(FREETYPE_INCLUDE_DIRS
1306 ${LIBDIR}/freetype/include
1307 ${LIBDIR}/freetype/include/freetype2
1309 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1310 find_package(freetype REQUIRED)
1313 set(FFTW3 ${LIBDIR}/fftw3)
1314 set(FFTW3_LIBRARIES libfftw)
1315 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1316 set(FFTW3_LIBPATH ${FFTW3}/lib)
1319 if(WITH_OPENCOLLADA)
1320 set(OPENCOLLADA ${LIBDIR}/opencollada)
1322 set(OPENCOLLADA_INCLUDE_DIRS
1323 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1324 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1325 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1326 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1327 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1330 set(OPENCOLLADA_LIBRARIES
1331 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib
1332 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAFramework.lib
1333 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADABaseUtils.lib
1334 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
1335 ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
1336 ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
1337 ${OPENCOLLADA}/lib/opencollada/xml.lib
1338 ${OPENCOLLADA}/lib/opencollada/buffer.lib
1339 ${OPENCOLLADA}/lib/opencollada/ftoa.lib
1343 list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
1347 ${OPENCOLLADA}/lib/opencollada/pcre.lib
1351 if(WITH_CODEC_FFMPEG)
1352 set(FFMPEG_INCLUDE_DIRS
1353 ${LIBDIR}/ffmpeg/include
1354 ${LIBDIR}/ffmpeg/include/msvc
1356 find_package(FFMPEG)
1357 if(NOT FFMPEG_FOUND)
1358 message(WARNING "Using HARDCODED ffmpeg locations")
1359 set(FFMPEG_LIBRARY_VERSION 55)
1360 set(FFMPEG_LIBRARY_VERSION_AVU 52)
1361 set(FFMPEG_LIBRARIES
1362 ${LIBDIR}/ffmpeg/lib/avcodec-${FFMPEG_LIBRARY_VERSION}.lib
1363 ${LIBDIR}/ffmpeg/lib/avformat-${FFMPEG_LIBRARY_VERSION}.lib
1364 ${LIBDIR}/ffmpeg/lib/avdevice-${FFMPEG_LIBRARY_VERSION}.lib
1365 ${LIBDIR}/ffmpeg/lib/avutil-${FFMPEG_LIBRARY_VERSION_AVU}.lib
1366 ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1371 if(WITH_IMAGE_OPENEXR)
1372 set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
1373 set(OPENEXR_VERSION "2.1")
1374 find_package(OPENEXR REQUIRED)
1375 if(NOT OPENEXR_FOUND)
1376 message(WARNING "Using HARDCODED OpenEXR locations")
1377 set(OPENEXR ${LIBDIR}/openexr)
1378 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1379 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1380 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1381 set(OPENEXR_LIBRARIES
1382 ${OPENEXR_LIBPATH}/Iex-2_2.lib
1383 ${OPENEXR_LIBPATH}/Half.lib
1384 ${OPENEXR_LIBPATH}/IlmImf-2_2.lib
1385 ${OPENEXR_LIBPATH}/Imath-2_2.lib
1386 ${OPENEXR_LIBPATH}/IlmThread-2_2.lib
1392 # Try to find tiff first then complain and set static and maybe wrong paths
1395 message(WARNING "Using HARDCODED libtiff locations")
1396 set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1397 set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1402 set(JACK_INCLUDE_DIRS
1403 ${LIBDIR}/jack/include/jack
1404 ${LIBDIR}/jack/include
1406 set(JACK_LIBRARIES optimized ${LIBDIR}/jack/lib/libjack.lib debug ${LIBDIR}/jack/lib/libjack_d.lib)
1410 set(PYTHON_VERSION 3.4) # CACHE STRING)
1412 string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1413 # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1414 set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1415 unset(_PYTHON_VERSION_NO_DOTS)
1417 # Shared includes for both vc2008 and vc2010
1418 set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1421 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1422 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1427 set(boost_extra_libs wave)
1429 if(WITH_INTERNATIONAL)
1430 list(APPEND boost_extra_libs locale)
1432 set(Boost_USE_STATIC_RUNTIME ON) # prefix lib
1433 set(Boost_USE_MULTITHREADED ON) # suffix -mt
1434 set(Boost_USE_STATIC_LIBS ON) # suffix -s
1435 find_package(Boost COMPONENTS date_time filesystem thread regex system ${boost_extra_libs})
1437 message(WARNING "USING HARDCODED boost locations")
1438 set(BOOST ${LIBDIR}/boost)
1439 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1441 set(BOOST_LIBPATH ${BOOST}/lib)
1442 set(BOOST_POSTFIX "vc120-mt-s-1_55.lib")
1443 set(BOOST_DEBUG_POSTFIX "vc120-mt-sgd-1_55.lib")
1445 set(BOOST_LIBPATH ${BOOST}/lib)
1446 set(BOOST_POSTFIX "vc90-mt-s-1_49.lib")
1447 set(BOOST_DEBUG_POSTFIX "vc90-mt-sgd-1_49.lib")
1450 optimized libboost_date_time-${BOOST_POSTFIX} optimized libboost_filesystem-${BOOST_POSTFIX}
1451 optimized libboost_regex-${BOOST_POSTFIX}
1452 optimized libboost_system-${BOOST_POSTFIX} optimized libboost_thread-${BOOST_POSTFIX}
1453 debug libboost_date_time-${BOOST_DEBUG_POSTFIX} debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1454 debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1455 debug libboost_system-${BOOST_DEBUG_POSTFIX} debug libboost_thread-${BOOST_DEBUG_POSTFIX})
1457 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1458 optimized libboost_wave-${BOOST_POSTFIX}
1459 debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1461 if(WITH_INTERNATIONAL)
1462 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1463 optimized libboost_locale-${BOOST_POSTFIX}
1464 debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1466 else() # we found boost using find_package
1467 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1468 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1469 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1471 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1474 if(WITH_OPENIMAGEIO)
1475 find_package(OpenImageIO)
1476 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1477 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1478 set(OIIO_OPTIMIZED optimized OpenImageIO optimized OpenImageIO_Util)
1479 set(OIIO_DEBUG debug OpenImageIO_d debug OpenImageIO_Util_d)
1480 set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
1481 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1482 set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1483 set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1484 set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1485 add_definitions(-DOIIO_STATIC_BUILD)
1489 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1490 file(GLOB LLVM_LIBRARY_OPTIMIZED ${LLVM_ROOT_DIR}/lib/*.lib)
1492 if(EXISTS ${LLVM_ROOT_DIR}/debug/lib)
1493 foreach(LLVM_OPTIMIZED_LIB ${LLVM_LIBRARY_OPTIMIZED})
1494 get_filename_component(LIBNAME ${LLVM_OPTIMIZED_LIB} ABSOLUTE)
1495 list(APPEND LLVM_LIBS optimized ${LIBNAME})
1496 endforeach(LLVM_OPTIMIZED_LIB)
1498 file(GLOB LLVM_LIBRARY_DEBUG ${LLVM_ROOT_DIR}/debug/lib/*.lib)
1500 foreach(LLVM_DEBUG_LIB ${LLVM_LIBRARY_DEBUG})
1501 get_filename_component(LIBNAME ${LLVM_DEBUG_LIB} ABSOLUTE)
1502 list(APPEND LLVM_LIBS debug ${LIBNAME})
1503 endforeach(LLVM_DEBUG_LIB)
1505 set(LLVM_LIBRARY ${LLVM_LIBS})
1507 message(WARNING "LLVM debug libs not present on this system. Using release libs for debug builds.")
1508 set(LLVM_LIBRARY ${LLVM_LIBRARY_OPTIMIZED})
1513 if(WITH_OPENCOLORIO)
1514 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1515 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1516 set(OPENCOLORIO_LIBRARIES OpenColorIO)
1517 set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1518 set(OPENCOLORIO_DEFINITIONS)
1522 if(WITH_MOD_CLOTH_ELTOPO)
1523 set(LAPACK ${LIBDIR}/lapack)
1524 # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1525 set(LAPACK_LIBPATH ${LAPACK}/lib)
1526 set(LAPACK_LIBRARIES
1527 ${LIBDIR}/lapack/lib/libf2c.lib
1528 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1529 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1534 set(SDL ${LIBDIR}/sdl)
1535 set(SDL_INCLUDE_DIR ${SDL}/include)
1536 set(SDL_LIBRARY SDL2)
1537 set(SDL_LIBPATH ${SDL}/lib)
1540 # used in many places so include globally, like OpenGL
1541 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1543 elseif(CMAKE_COMPILER_IS_GNUCC)
1544 # keep GCC specific stuff here
1545 include(CheckCSourceCompiles)
1546 # Setup 64bit and 64bit windows systems
1547 CHECK_C_SOURCE_COMPILES("
1551 int main(void) { return 0; }
1556 message(STATUS "Compiling for 64 bit with MinGW-w64.")
1557 execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
1558 if(GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
1559 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64_gcc49)
1561 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
1564 message(STATUS "Compiling for 32 bit with MinGW-w32.")
1565 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
1567 if(WITH_RAYOPTIMIZATION)
1568 message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
1572 list(APPEND PLATFORM_LINKLIBS -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp)
1575 list(APPEND PLATFORM_LINKLIBS -limm32)
1578 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1581 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1582 list(APPEND PLATFORM_LINKLIBS -lpthread)
1584 add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1587 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1589 add_definitions(-DFREE_WINDOWS)
1591 set(PNG "${LIBDIR}/png")
1592 set(PNG_INCLUDE_DIRS "${PNG}/include")
1593 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1596 set(JPEG_LIBRARIES jpeg)
1598 set(JPEG_LIBRARIES libjpeg)
1600 set(PNG_LIBRARIES png)
1602 set(ZLIB ${LIBDIR}/zlib)
1603 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1604 set(ZLIB_LIBPATH ${ZLIB}/lib)
1605 set(ZLIB_LIBRARIES z)
1607 set(JPEG "${LIBDIR}/jpeg")
1608 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1609 set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
1611 # comes with own pthread library
1612 if(NOT WITH_MINGW64)
1613 set(PTHREADS ${LIBDIR}/pthreads)
1614 #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1615 set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1616 set(PTHREADS_LIBRARIES pthreadGC2)
1619 set(FREETYPE ${LIBDIR}/freetype)
1620 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1621 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1622 set(FREETYPE_LIBRARY freetype)
1625 set(FFTW3 ${LIBDIR}/fftw3)
1626 set(FFTW3_LIBRARIES fftw3)
1627 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1628 set(FFTW3_LIBPATH ${FFTW3}/lib)
1631 if(WITH_OPENCOLLADA)
1632 set(OPENCOLLADA ${LIBDIR}/opencollada)
1633 set(OPENCOLLADA_INCLUDE_DIRS
1634 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1635 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1636 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1637 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1638 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1640 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
1641 set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver buffer ftoa xml)
1642 set(PCRE_LIBRARIES pcre)
1645 if(WITH_CODEC_FFMPEG)
1646 set(FFMPEG ${LIBDIR}/ffmpeg)
1647 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1649 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1651 set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
1653 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1656 if(WITH_IMAGE_OPENEXR)
1657 set(OPENEXR ${LIBDIR}/openexr)
1658 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1659 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1660 set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1661 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1665 set(TIFF ${LIBDIR}/tiff)
1666 set(TIFF_LIBRARY tiff)
1667 set(TIFF_INCLUDE_DIR ${TIFF}/include)
1668 set(TIFF_LIBPATH ${TIFF}/lib)
1672 set(JACK ${LIBDIR}/jack)
1673 set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1674 set(JACK_LIBRARIES jack)
1675 set(JACK_LIBPATH ${JACK}/lib)
1677 # TODO, gives linking errors, force off
1682 # normally cached but not since we include them with blender
1683 set(PYTHON_VERSION 3.4) # CACHE STRING)
1684 string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1685 set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}") # CACHE PATH)
1686 set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib") # CACHE FILEPATH)
1687 unset(_PYTHON_VERSION_NO_DOTS)
1690 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1691 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1695 set(BOOST ${LIBDIR}/boost)
1696 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1698 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1699 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1701 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1702 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1705 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1706 boost_regex-${BOOST_POSTFIX}
1707 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1708 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1709 boost_regex-${BOOST_DEBUG_POSTFIX}
1710 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1711 if(WITH_INTERNATIONAL)
1712 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1713 optimized boost_locale-${BOOST_POSTFIX}
1714 debug boost_locale-${BOOST_DEBUG_POSTFIX})
1717 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1718 optimized boost_wave-${BOOST_POSTFIX}
1719 debug boost_wave-${BOOST_DEBUG_POSTFIX})
1721 set(BOOST_LIBPATH ${BOOST}/lib)
1722 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1725 if(WITH_OPENIMAGEIO)
1726 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1727 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1728 set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1729 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1730 set(OPENIMAGEIO_DEFINITIONS "")
1731 set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1735 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1736 set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
1737 # Explicitly set llvm lib order.
1738 #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1739 set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1740 LLVMAsmParser LLVMAsmPrinter
1741 LLVMBitReader LLVMBitWriter
1742 LLVMDebugInfo LLVMExecutionEngine
1743 LLVMInstCombine LLVMInstrumentation
1744 LLVMInterpreter LLVMJIT
1746 LLVMMCDisassembler LLVMMCJIT
1747 LLVMMCParser LLVMObject
1750 LLVMTableGen LLVMTarget
1751 LLVMTransformUtils LLVMVectorize
1752 LLVMX86AsmParser LLVMX86AsmPrinter
1753 LLVMX86CodeGen LLVMX86Desc
1754 LLVMX86Disassembler LLVMX86Info
1755 LLVMX86Utils LLVMipa
1757 # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1758 list(APPEND PLATFORM_LINKLIBS -limagehlp)
1761 if(WITH_OPENCOLORIO)
1762 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1763 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1764 set(OPENCOLORIO_LIBRARIES OpenColorIO)
1765 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1766 set(OPENCOLORIO_DEFINITIONS)
1770 set(SDL ${LIBDIR}/sdl)
1771 set(SDL_INCLUDE_DIR ${SDL}/include)
1772 set(SDL_LIBRARY SDL)
1773 set(SDL_LIBPATH ${SDL}/lib)
1776 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
1778 ## DISABLE - causes linking errors
1779 ## for re-distribution, so users dont need mingw installed
1780 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
1784 # Things common to both mingw and MSVC should go here
1786 set(WINTAB_INC ${LIBDIR}/wintab/include)
1789 set(OPENAL ${LIBDIR}/openal)
1790 set(OPENALDIR ${LIBDIR}/openal)
1791 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
1793 set(OPENAL_LIBRARY openal32)
1795 set(OPENAL_LIBRARY wrap_oal)
1797 set(OPENAL_LIBPATH ${OPENAL}/lib)
1800 if(WITH_CODEC_SNDFILE)
1801 set(SNDFILE ${LIBDIR}/sndfile)
1802 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1803 set(SNDFILE_LIBRARIES libsndfile-1)
1804 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
1807 if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
1808 add_definitions(-D__SSE__ -D__MMX__)
1812 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1814 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
1815 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
1816 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
1817 find_library(OSL_LIB_EXEC_DEBUG NAMES oslexec_d PATHS ${CYCLES_OSL}/lib)
1818 find_library(OSL_LIB_COMP_DEBUG NAMES oslcomp_d PATHS ${CYCLES_OSL}/lib)
1819 find_library(OSL_LIB_QUERY_DEBUG NAMES oslquery_d PATHS ${CYCLES_OSL}/lib)
1820 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})
1821 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
1822 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
1824 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
1827 message(STATUS "OSL not found")
1828 set(WITH_CYCLES_OSL OFF)
1834 if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STRGREATER "10.5")
1835 set(WITH_LIBS10.5 ON CACHE BOOL "Use 10.5 libs" FORCE) # valid also for 10.6/7/8/9
1839 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
1841 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1842 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.x.i386)
1844 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.0.0-powerpc)
1850 find_package(OpenAL)
1853 set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
1855 set(WITH_OPENAL OFF)
1860 find_library(JACK_FRAMEWORK
1863 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
1864 if(NOT JACK_FRAMEWORK)
1869 if(WITH_CODEC_SNDFILE)
1870 set(SNDFILE ${LIBDIR}/sndfile)
1871 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1872 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
1873 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib) # TODO, deprecate
1877 # we use precompiled libraries for py 3.4 and up by default
1878 set(PYTHON_VERSION 3.4)
1879 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
1880 # normally cached but not since we include them with blender
1881 set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
1882 # set(PYTHON_BINARY "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
1883 set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
1884 set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
1885 # set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled
1887 # module must be compiled against Python framework
1888 set(PYTHON_INCLUDE_DIR "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/include/python${PYTHON_VERSION}m")
1889 set(PYTHON_BINARY "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}")
1890 #set(PYTHON_LIBRARY python${PYTHON_VERSION})
1891 set(PYTHON_LIBPATH "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
1892 #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python") # won't build with this enabled
1896 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1897 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1901 set(FFTW3 ${LIBDIR}/fftw3)
1902 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1903 set(FFTW3_LIBRARIES fftw3)
1904 set(FFTW3_LIBPATH ${FFTW3}/lib)
1907 set(PNG_LIBRARIES png)
1908 set(JPEG_LIBRARIES jpeg)
1911 set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
1912 set(ZLIB_LIBRARIES z bz2)
1914 set(FREETYPE ${LIBDIR}/freetype)
1915 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1916 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1917 set(FREETYPE_LIBRARY freetype)
1919 if(WITH_IMAGE_OPENEXR)
1920 set(OPENEXR ${LIBDIR}/openexr)
1921 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1922 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1923 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
1924 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1927 if(WITH_CODEC_FFMPEG)
1928 set(FFMPEG ${LIBDIR}/ffmpeg)
1929 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1930 set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
1931 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1934 find_library(SYSTEMSTUBS_LIBRARY
1939 mark_as_advanced(SYSTEMSTUBS_LIBRARY)
1940 if(SYSTEMSTUBS_LIBRARY)
1941 list(APPEND PLATFORM_LINKLIBS stdc++ SystemStubs)
1943 list(APPEND PLATFORM_LINKLIBS stdc++)
1946 set(PLATFORM_CFLAGS "-pipe -funsigned-char")
1947 set(PLATFORM_LINKFLAGS "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio")
1948 if(WITH_CODEC_QUICKTIME)
1949 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
1950 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1951 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
1952 # libSDL still needs 32bit carbon quicktime
1956 # XXX - SOME MAC DEV PLEASE TEST WITH THE SDK INSTALLED!
1957 # ALSO SHOULD BE MOVED INTO OWN MODULE WHEN FUNCTIONAL
1959 # This thread it *should* work and check the framework - campbell
1960 # http://www.cmake.org/pipermail/cmake/2005-December/007740.html
1961 find_library(3DCONNEXION_CLIENT_FRAMEWORK
1962 NAMES 3DconnexionClient
1964 if(NOT 3DCONNEXION_CLIENT_FRAMEWORK)
1965 set(WITH_INPUT_NDOF OFF)
1969 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework 3DconnexionClient")
1970 set(NDOF_INCLUDE_DIRS /Library/Frameworks/3DconnexionClient.framework/Headers )
1975 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework jackmp")
1978 if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
1979 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")# force cmake to link right framework
1982 if(WITH_OPENCOLLADA)
1983 set(OPENCOLLADA ${LIBDIR}/opencollada)
1985 set(OPENCOLLADA_INCLUDE_DIRS
1986 ${LIBDIR}/opencollada/include/COLLADAStreamWriter
1987 ${LIBDIR}/opencollada/include/COLLADABaseUtils
1988 ${LIBDIR}/opencollada/include/COLLADAFramework
1989 ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
1990 ${LIBDIR}/opencollada/include/GeneratedSaxParser
1993 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
1994 set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lxml2 -lbuffer -lftoa")
1995 # Use UTF functions from collada if LLVM is not enabled
1997 set(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES} -lUTF")
1999 # pcre is bundled with openCollada
2000 #set(PCRE ${LIBDIR}/pcre)
2001 #set(PCRE_LIBPATH ${PCRE}/lib)
2002 set(PCRE_LIBRARIES pcre)
2004 #set(EXPAT ${LIBDIR}/expat)
2005 #set(EXPAT_LIBPATH ${EXPAT}/lib)
2010 set(SDL ${LIBDIR}/sdl)
2011 set(SDL_INCLUDE_DIR ${SDL}/include)
2012 set(SDL_LIBRARY SDL2)
2013 set(SDL_LIBPATH ${SDL}/lib)
2014 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lazy_framework ForceFeedback")
2017 set(PNG "${LIBDIR}/png")
2018 set(PNG_INCLUDE_DIRS "${PNG}/include")
2019 set(PNG_LIBPATH ${PNG}/lib)
2021 set(JPEG "${LIBDIR}/jpeg")
2022 set(JPEG_INCLUDE_DIR "${JPEG}/include")
2023 set(JPEG_LIBPATH ${JPEG}/lib)
2026 set(TIFF ${LIBDIR}/tiff)
2027 set(TIFF_INCLUDE_DIR ${TIFF}/include)
2028 set(TIFF_LIBRARY tiff)
2029 set(TIFF_LIBPATH ${TIFF}/lib)
2033 # linker needs "-weak_framework 3DconnexionClient"
2037 set(BOOST ${LIBDIR}/boost)
2038 set(BOOST_INCLUDE_DIR ${BOOST}/include)
2039 set(BOOST_LIBRARIES boost_date_time-mt boost_filesystem-mt boost_regex-mt boost_system-mt boost_thread-mt boost_wave-mt)
2040 if(WITH_INTERNATIONAL)
2041 list(APPEND BOOST_LIBRARIES boost_locale-mt)
2043 if(WITH_CYCLES_NETWORK)
2044 list(APPEND BOOST_LIBRARIES boost_serialization-mt)
2046 set(BOOST_LIBPATH ${BOOST}/lib)
2047 set(BOOST_DEFINITIONS)
2050 if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
2051 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale and ffmpeg needs it !
2054 if(WITH_OPENIMAGEIO)
2055 set(OPENIMAGEIO ${LIBDIR}/openimageio)
2056 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
2057 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO}/lib/libOpenImageIO.a ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARY} ${OPENEXR_LIBRARIES} ${ZLIB_LIBRARIES})
2058 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib ${JPEG_LIBPATH} ${PNG_LIBPATH} ${TIFF_LIBPATH} ${OPENEXR_LIBPATH} ${ZLIB_LIBPATH})
2059 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
2060 set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
2063 if(WITH_OPENCOLORIO)
2064 set(OPENCOLORIO ${LIBDIR}/opencolorio)
2065 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
2066 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
2067 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
2071 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
2072 set(LLVM_VERSION "3.4" CACHE STRING "Version of LLVM to use")
2073 if(EXISTS "${LLVM_ROOT_DIR}/bin/llvm-config")
2074 set(LLVM_CONFIG "${LLVM_ROOT_DIR}/bin/llvm-config")
2076 set(LLVM_CONFIG llvm-config)
2078 execute_process(COMMAND ${LLVM_CONFIG} --version
2079 OUTPUT_VARIABLE LLVM_VERSION
2080 OUTPUT_STRIP_TRAILING_WHITESPACE)
2081 execute_process(COMMAND ${LLVM_CONFIG} --prefix
2082 OUTPUT_VARIABLE LLVM_ROOT_DIR
2083 OUTPUT_STRIP_TRAILING_WHITESPACE)
2084 execute_process(COMMAND ${LLVM_CONFIG} --libdir
2085 OUTPUT_VARIABLE LLVM_LIBPATH
2086 OUTPUT_STRIP_TRAILING_WHITESPACE)
2087 find_library(LLVM_LIBRARY
2088 NAMES LLVMAnalysis # first of a whole bunch of libs to get
2089 PATHS ${LLVM_LIBPATH})
2091 if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
2093 # if static LLVM libraries were requested, use llvm-config to generate
2094 # the list of what libraries we need, and substitute that in the right
2095 # way for LLVM_LIBRARY.
2096 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
2097 OUTPUT_VARIABLE LLVM_LIBRARY
2098 OUTPUT_STRIP_TRAILING_WHITESPACE)
2099 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
2101 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
2104 message(FATAL_ERROR "LLVM not found.")
2109 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2111 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2112 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2113 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2114 # WARNING! depends on correct order of OSL libs linking
2115 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
2116 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2117 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2119 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2122 message(STATUS "OSL not found")
2123 set(WITH_CYCLES_OSL OFF)
2128 execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VENDOR)
2129 string(SUBSTRING "${COMPILER_VENDOR}" 0 5 VENDOR_NAME) # truncate output
2130 if(${VENDOR_NAME} MATCHES "Apple") # Apple does not support OpenMP reliable with gcc and not with clang
2131 set(WITH_OPENMP OFF)
2132 else() # vanilla gcc or clang_omp support OpenMP
2133 message(STATUS "Using special OpenMP enabled compiler !") # letting find_package(OpenMP) module work for gcc
2134 if(CMAKE_C_COMPILER_ID MATCHES "Clang") # clang-omp in darwin libs
2135 set(OPENMP_FOUND ON)
2136 set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "C compiler flags for OpenMP parallization" FORCE)
2137 set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "C++ compiler flags for OpenMP parallization" FORCE)
2138 include_directories(${LIBDIR}/openmp/include)
2139 link_directories(${LIBDIR}/openmp/lib)
2140 # This is a workaround for our helperbinaries ( datatoc, masgfmt, ... ),
2141 # They are linked also to omp lib, so we need it in builddir for runtime exexcution, TODO: remove all unneeded dependencies from these
2142 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
2147 set(EXETYPE MACOSX_BUNDLE)
2149 set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
2150 set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
2151 if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
2152 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2153 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2154 if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
2155 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize -fvariable-expansion-in-unroller")
2156 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize -fvariable-expansion-in-unroller")
2159 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2160 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2163 if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
2164 # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
2165 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
2167 # Get rid of eventually clashes, we export some symbols explicite as local
2168 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker ${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map")
2171 #-----------------------------------------------------------------------------
2175 if(NOT EXISTS "${LIBDIR}/")
2176 message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'")
2180 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
2181 message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
2185 if(NOT WITH_OPENIMAGEIO)
2186 message(FATAL_ERROR "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. Configure OIIO or disable WITH_CYCLES")
2189 message(FATAL_ERROR "Cycles requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
2194 message(FATAL_ERROR "Cycles OSL requires WITH_LLVM, the library may not have been found. Configure LLVM or disable WITH_CYCLES_OSL")
2199 if(WITH_INTERNATIONAL)
2201 message(FATAL_ERROR "Internationalization requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_INTERNATIONAL")
2205 # See TEST_SSE_SUPPORT() for how this is defined.
2207 if(WITH_RAYOPTIMIZATION)
2208 if(SUPPORT_SSE_BUILD)
2209 set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
2210 add_definitions(-D__SSE__ -D__MMX__)
2212 if(SUPPORT_SSE2_BUILD)
2213 set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
2214 add_definitions(-D__SSE2__)
2215 if(NOT SUPPORT_SSE_BUILD) # dont double up
2216 add_definitions(-D__MMX__)
2222 # set the endian define
2224 # for some reason this fails on msvc
2225 add_definitions(-D__LITTLE_ENDIAN__)
2227 # OSX-Note: as we do crosscompiling with specific set architecture,
2228 # endianess-detection and autosetting is counterproductive
2229 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
2231 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
2232 add_definitions(-D__LITTLE_ENDIAN__)
2233 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)
2234 add_definitions(-D__BIG_ENDIAN__)
2237 include(TestBigEndian)
2238 test_big_endian(_SYSTEM_BIG_ENDIAN)
2239 if(_SYSTEM_BIG_ENDIAN)
2240 add_definitions(-D__BIG_ENDIAN__)
2242 add_definitions(-D__LITTLE_ENDIAN__)
2244 unset(_SYSTEM_BIG_ENDIAN)
2248 if(WITH_IMAGE_OPENJPEG)
2249 if(WITH_SYSTEM_OPENJPEG)
2252 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
2253 add_definitions(-DOPJ_STATIC)
2257 if(WITH_IMAGE_REDCODE)
2258 set(REDCODE ${CMAKE_SOURCE_DIR}/extern)
2259 set(REDCODE_INC ${REDCODE})
2262 if(NOT WITH_SYSTEM_EIGEN3)
2263 set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
2266 #-----------------------------------------------------------------------------
2269 find_package(OpenGL)
2270 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
2273 list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
2274 list(APPEND GL_DEFINITIONS -DWITH_GLU)
2277 if(WITH_SYSTEM_GLES)
2278 find_package_wrapper(OpenGLES)
2281 if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
2282 list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
2284 elseif(WITH_GL_PROFILE_ES20)
2285 if(WITH_SYSTEM_GLES)
2286 if(NOT OPENGLES_LIBRARY)
2287 message(FATAL_ERROR "Unable to find OpenGL ES libraries. Install them or disable WITH_SYSTEM_GLES.")
2290 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
2293 set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
2294 mark_as_advanced(OPENGLES_LIBRARY)
2296 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
2298 if(NOT OPENGLES_LIBRARY)
2299 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.")
2305 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2307 set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
2308 mark_as_advanced(OPENGLES_DLL)
2310 if(NOT OPENGLES_DLL)
2311 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).")
2315 list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
2317 set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
2319 get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
2320 list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
2322 mark_as_advanced(D3DCOMPILER_DLL)
2324 if(D3DCOMPILER_DLL STREQUAL "")
2325 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")
2335 list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
2337 if(WITH_SYSTEM_GLES)
2338 if(NOT OPENGLES_EGL_LIBRARY)
2339 message(FATAL_ERROR "Unable to find OpenGL ES libraries. Install them or disable WITH_SYSTEM_GLES.")
2342 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
2345 set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
2346 mark_as_advanced(OPENGLES_EGL_LIBRARY)
2348 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
2350 if(NOT OPENGLES_EGL_LIBRARY)
2351 message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY to the file path of an EGL library.")
2357 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2359 set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
2360 mark_as_advanced(OPENGLES_EGL_DLL)
2362 if(NOT OPENGLES_EGL_DLL)
2363 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).")
2370 if(WITH_GL_PROFILE_COMPAT)
2371 list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
2374 if(WITH_GL_PROFILE_CORE)
2375 list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
2378 if(WITH_GL_PROFILE_ES20)
2379 list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
2383 list(APPEND GL_DEFINITIONS -DWITH_EGL)
2387 list(APPEND GL_DEFINITIONS -DWITH_GPU_DEBUG)
2390 #-----------------------------------------------------------------------------
2393 find_package(OpenMP)
2395 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
2396 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
2398 set(WITH_OPENMP OFF)
2407 #-----------------------------------------------------------------------------
2411 list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
2414 if(WITH_SYSTEM_GLEW)
2417 # Note: There is an assumption here that the system GLEW is not a static library.
2420 message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
2424 set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
2426 set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
2430 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
2432 list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
2434 # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
2435 if(NOT WITH_GL_PROFILE_ES20)
2436 # No ES functions are needed
2437 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2438 elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
2439 # ES is enabled, but the other functions are all disabled
2440 list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
2443 if(WITH_GL_PROFILE_ES20)
2445 list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
2448 # ToDo: This is an experiment to eliminate ES 1 symbols,
2449 # GLEW doesn't really properly provide this level of control
2450 # (for example, without modification it eliminates too many symbols)
2451 # so there are lots of modifications to GLEW to make this work,
2452 # and no attempt to make it work beyond Blender at this point.
2453 list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
2457 list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
2460 set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
2463 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
2465 list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
2467 # This won't affect the non-experimental glew library,
2468 # but is used for conditional compilation elsewhere.
2469 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2471 set(BLENDER_GLEW_LIBRARIES extern_glew)
2478 list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
2481 #-----------------------------------------------------------------------------
2484 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
2485 find_package(Bullet)
2486 if(NOT BULLET_FOUND)
2487 set(WITH_BULLET OFF)
2490 set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
2491 # set(BULLET_LIBRARIES "")
2494 #-----------------------------------------------------------------------------
2497 if(WITH_PYTHON_MODULE)
2498 add_definitions(-DPy_ENABLE_SHARED)
2501 #-----------------------------------------------------------------------------
2502 # Extra compile flags
2504 if(CMAKE_COMPILER_IS_GNUCC)
2506 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2507 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
2508 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement)
2509 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2510 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2511 # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
2512 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES -Wstrict-prototypes)
2513 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2514 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2515 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2516 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2517 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2518 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
2519 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
2520 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
2521 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self) # needs -Wuninitialized
2522 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull) # C only
2523 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2524 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2525 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
2527 # gcc 4.2 gives annoying warnings on every file with this
2528 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2529 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
2532 # versions before gcc4.6 give many BLI_math warnings
2533 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
2534 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS -Wredundant-decls)
2535 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
2538 # disable because it gives warnings for printf() & friends.
2539 # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
2542 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2545 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2546 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2547 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2548 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
2549 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self) # needs -Wuninitialized
2550 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2551 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2552 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
2554 # gcc 4.2 gives annoying warnings on every file with this
2555 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2556 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
2559 # causes too many warnings
2561 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2562 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
2565 # flags to undo strict flags
2566 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
2567 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2570 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2573 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
2575 if(APPLE AND WITH_OPENMP) # we need the Intel omp lib linked here to not fail all tests due presence of -fopenmp !
2576 set(CMAKE_REQUIRED_FLAGS "-L${LIBDIR}/openmp/lib -liomp5") # these are only used for the checks
2579 # strange, clang complains these are not supported, but then yses them.
2580 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2581 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement)
2582 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2583 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2584 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2585 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2586 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2587 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES -Wstrict-prototypes)
2588 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2589 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2591 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2592 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2593 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2594 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2595 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.
2596 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2597 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2599 # gives too many unfixable warnings
2600 # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS -Wunused-macros)
2601 # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS -Wunused-macros)
2603 # flags to undo strict flags
2604 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2605 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2607 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
2608 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
2609 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
2610 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
2611 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
2612 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
2613 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
2614 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
2616 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
2617 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
2618 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
2619 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2620 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
2622 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
2624 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2625 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2626 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2628 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2629 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2630 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2632 # disable numbered, false positives
2633 set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
2634 set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
2635 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
2636 # most msvc warnings are C & C++
2640 "/w34062" # switch statement contains 'default' but no 'case' labels
2642 "/wd4018" # signed/unsigned mismatch
2643 "/wd4065" # switch statement contains 'default' but no 'case' labels
2644 "/wd4127" # conditional expression is constant
2645 "/wd4181" # qualifier applied to reference type; ignored
2646 "/wd4200" # zero-sized array in struct/union
2647 "/wd4244" # conversion from 'type1' to 'type2', possible loss of data
2648 "/wd4267" # conversion from 'size_t' to 'type', possible loss of data
2649 "/wd4305" # truncation from 'type1' to 'type2'
2650 "/wd4800" # forcing value to bool 'true' or 'false'
2652 "/we4013" # 'function' undefined; assuming extern returning int
2653 "/we4431" # missing type specifier - int assumed
2656 string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
2657 set(C_WARNINGS "${_WARNINGS}")
2658 set(CXX_WARNINGS "${_WARNINGS}")
2662 # ensure python header is found since detection can fail, this could happen
2663 # with _any_ library but since we used a fixed python version this tends to
2664 # be most problematic.
2666 if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
2667 message(FATAL_ERROR "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
2668 "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
2669 "to a valid python include path. Containing "
2670 "Python.h for python version \"${PYTHON_VERSION}\"")
2674 # pass, we have this in an archive to extract
2675 elseif(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
2676 find_python_package(numpy)
2680 # pass, we have this in lib/python/site-packages
2681 elseif(WITH_PYTHON_INSTALL_REQUESTS)
2682 find_python_package(requests)
2687 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
2688 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
2690 # Nothing special is needed, C++11 features are available by default.
2692 message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER_ID} is not supported for C++11 build yet")
2696 # Include warnings first, so its possible to disable them with user defined flags
2697 # eg: -Wno-uninitialized
2698 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
2699 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
2701 # defined above, platform spesific but shared names
2718 #-------------------------------------------------------------------------------
2721 # better not set includes here but this debugging option is off by default.
2722 if(WITH_CXX_GUARDEDALLOC)
2723 include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
2724 add_definitions(-DWITH_CXX_GUARDEDALLOC)
2727 if(WITH_ASSERT_ABORT)
2728 add_definitions(-DWITH_ASSERT_ABORT)
2731 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
2732 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
2734 #-----------------------------------------------------------------------------
2738 include(GTestTesting)
2741 if(WITH_BLENDER OR WITH_PLAYER)
2742 add_subdirectory(intern)
2743 add_subdirectory(extern)
2745 # source after intern and extern to gather all
2746 # internal and external library information first, for test linking
2747 add_subdirectory(source)
2748 elseif(WITH_CYCLES_STANDALONE)
2749 add_subdirectory(intern/cycles)
2750 add_subdirectory(extern/clew)
2751 add_subdirectory(extern/cuew)
2752 if(NOT WITH_SYSTEM_GLEW)
2753 add_subdirectory(extern/glew)
2757 #-----------------------------------------------------------------------------
2758 # Blender Application
2760 add_subdirectory(source/creator)
2764 #-----------------------------------------------------------------------------
2767 add_subdirectory(source/blenderplayer)
2771 #-----------------------------------------------------------------------------
2773 add_subdirectory(tests)
2776 #-----------------------------------------------------------------------------
2777 # CPack for generating packages
2778 include(build_files/cmake/packaging.cmake)
2781 #-----------------------------------------------------------------------------
2782 # Print Final Configuration
2785 set(_config_msg "\n* Blender Configuration *")
2786 macro(info_cfg_option
2788 set(_msg " * ${_setting}")
2789 string(LENGTH "${_msg}" _len)
2790 while("32" GREATER "${_len}")
2791 set(_msg "${_msg} ")
2792 math(EXPR _len "${_len} + 1")
2795 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}")
2800 set(_config_msg "${_config_msg}\n\n ${_text}")
2805 message(STATUS "C Compiler: \"${CMAKE_C_COMPILER_ID}\"")
2806 message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
2808 info_cfg_text("Build Options:")
2809 info_cfg_option(WITH_GAMEENGINE)
2810 info_cfg_option(WITH_PLAYER)
2811 info_cfg_option(WITH_BULLET)
2812 info_cfg_option(WITH_IK_SOLVER)
2813 info_cfg_option(WITH_IK_ITASC)
2814 info_cfg_option(WITH_OPENCOLLADA)
2815 info_cfg_option(WITH_FFTW3)
2816 info_cfg_option(WITH_INTERNATIONAL)
2817 info_cfg_option(WITH_INPUT_NDOF)
2818 info_cfg_option(WITH_CYCLES)
2819 info_cfg_option(WITH_FREESTYLE)
2820 info_cfg_option(WITH_OPENCOLORIO)
2822 info_cfg_text("Compiler Options:")
2823 info_cfg_option(WITH_BUILDINFO)
2824 info_cfg_option(WITH_OPENMP)
2825 info_cfg_option(WITH_RAYOPTIMIZATION)
2827 info_cfg_text("System Options:")
2828 info_cfg_option(WITH_INSTALL_PORTABLE)
2829 info_cfg_option(WITH_X11_XF86VMODE)
2830 info_cfg_option(WITH_X11_XINPUT)
2831 info_cfg_option(WITH_MEM_JEMALLOC)
2832 info_cfg_option(WITH_MEM_VALGRIND)
2833 info_cfg_option(WITH_SYSTEM_GLEW)
2834 info_cfg_option(WITH_SYSTEM_OPENJPEG)
2836 info_cfg_text("Image Formats:")
2837 info_cfg_option(WITH_OPENIMAGEIO)
2838 info_cfg_option(WITH_IMAGE_CINEON)
2839 info_cfg_option(WITH_IMAGE_DDS)
2840 info_cfg_option(WITH_IMAGE_HDR)
2841 info_cfg_option(WITH_IMAGE_OPENEXR)
2842 info_cfg_option(WITH_IMAGE_OPENJPEG)
2843 info_cfg_option(WITH_IMAGE_REDCODE)
2844 info_cfg_option(WITH_IMAGE_TIFF)
2846 info_cfg_text("Audio:")
2847 info_cfg_option(WITH_OPENAL)
2848 info_cfg_option(WITH_SDL)
2849 info_cfg_option(WITH_SDL_DYNLOAD)
2850 info_cfg_option(WITH_JACK)
2851 info_cfg_option(WITH_JACK_DYNLOAD)
2852 info_cfg_option(WITH_CODEC_AVI)
2853 info_cfg_option(WITH_CODEC_FFMPEG)
2854 info_cfg_option(WITH_CODEC_SNDFILE)
2856 info_cfg_text("Compression:")
2857 info_cfg_option(WITH_LZMA)
2858 info_cfg_option(WITH_LZO)
2860 info_cfg_text("Python:")
2861 info_cfg_option(WITH_PYTHON_INSTALL)
2862 info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
2863 info_cfg_option(WITH_PYTHON_MODULE)
2864 info_cfg_option(WITH_PYTHON_SAFETY)
2866 info_cfg_option(WITH_PYTHON_FRAMEWORK)
2869 info_cfg_text("Modifiers:")
2870 info_cfg_option(WITH_MOD_BOOLEAN)
2871 info_cfg_option(WITH_MOD_REMESH)
2872 info_cfg_option(WITH_MOD_FLUID)
2873 info_cfg_option(WITH_MOD_OCEANSIM)
2875 info_cfg_text("OpenGL:")
2876 info_cfg_option(WITH_GLEW_ES)
2877 info_cfg_option(WITH_GLU)
2878 info_cfg_option(WITH_GL_EGL)
2879 info_cfg_option(WITH_GL_PROFILE_COMPAT)
2880 info_cfg_option(WITH_GL_PROFILE_CORE)
2881 info_cfg_option(WITH_GL_PROFILE_ES20)
2882 info_cfg_option(WITH_GPU_DEBUG)
2884 info_cfg_option(WITH_GL_ANGLE)
2887 info_cfg_text("Other:")
2888 info_cfg_option(WITH_OPENNL)
2891 message(STATUS "HAVE_STDBOOL_H = ${HAVE_STDBOOL_H}")
2895 message("${_config_msg}")