1 # ***** BEGIN GPL LICENSE BLOCK *****
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # The Original Code is Copyright (C) 2006, Blender Foundation
18 # All rights reserved.
20 # The Original Code is: all of this file.
22 # Contributor(s): Jacques Beaurain.
24 # ***** END GPL LICENSE BLOCK *****
26 #-----------------------------------------------------------------------------
27 # We don't allow in-source builds. This causes no end of troubles because
28 # all out-of-source builds will use the CMakeCache.txt file there and even
29 # build the libs and objects in it.
31 if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
32 if(NOT DEFINED WITH_IN_SOURCE_BUILD)
34 "CMake generation for blender is not allowed within the source directory!"
35 "\n Remove the CMakeCache.txt file and try again from another folder, e.g.:"
37 "\n rm CMakeCache.txt"
43 "\n Alternately define WITH_IN_SOURCE_BUILD to force this option (not recommended!)"
48 cmake_minimum_required(VERSION 2.8)
50 if(NOT EXECUTABLE_OUTPUT_PATH)
54 # this starts out unset
55 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
57 # avoid having empty buildtype
58 set(CMAKE_BUILD_TYPE_INIT "Release")
60 # quiet output for Makefiles, 'make -s' helps too
61 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
63 # global compile definitions since add_definitions() adds for all.
64 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG _DEBUG)
65 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE NDEBUG)
66 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL NDEBUG)
67 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO NDEBUG)
70 #-----------------------------------------------------------------------------
73 # see "cmake --help-policy CMP0003"
74 # So library linking is more sane
75 cmake_policy(SET CMP0003 NEW)
77 # So BUILDINFO and BLENDERPATH strings are automatically quoted
78 cmake_policy(SET CMP0005 NEW)
80 # So syntax problems are errors
81 cmake_policy(SET CMP0010 NEW)
83 # Input directories must have CMakeLists.txt
84 cmake_policy(SET CMP0014 NEW)
86 #-----------------------------------------------------------------------------
88 include(build_files/cmake/macros.cmake)
91 #-----------------------------------------------------------------------------
94 blender_project_hack_pre()
98 blender_project_hack_post()
102 #-----------------------------------------------------------------------------
103 # Redirect output files
105 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
106 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
108 #-----------------------------------------------------------------------------
109 # Set default config options
111 get_blender_version()
114 # Blender internal features
115 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
116 mark_as_advanced(WITH_BLENDER)
118 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
120 option(WITH_PYTHON "Enable Embedded Python API (only disable for development)" ON)
121 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON)
122 mark_as_advanced(WITH_PYTHON) # dont want people disabling this unless they really know what they are doing.
123 mark_as_advanced(WITH_PYTHON_SECURITY) # some distributions see this as a security issue, rather than have them patch it, make a build option.
124 set(WITH_PYTHON_SECURITY ON CACHE BOOL "ON" FORCE) # temp force on.
126 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)
127 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)" OFF)
129 option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
132 option(WITH_BUILDINFO "Include extra build details (only disable for development & faster builds)" ON)
133 option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
134 option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
135 option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke and audio effects)" ON)
136 option(WITH_BULLET "Enable Bullet (Physics Engine)" ON)
137 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
138 mark_as_advanced(WITH_SYSTEM_BULLET)
139 option(WITH_GAMEENGINE "Enable Game Engine" ON)
140 option(WITH_PLAYER "Build Player" OFF)
141 option(WITH_OPENCOLORIO "Enable OpenColorIO color management" ON)
142 option(WITH_COMPOSITOR "Enable the tile based nodal compositor" ON)
144 # GHOST Windowing Library Options
145 option(WITH_GHOST_DEBUG "Enable debugging output for the GHOST library" OFF)
146 mark_as_advanced(WITH_GHOST_DEBUG)
148 option(WITH_GHOST_SDL "Enable building blender against SDL for windowing rather then the native APIs" OFF)
149 mark_as_advanced(WITH_GHOST_SDL)
152 option(WITH_HEADLESS "Build without graphical support (renderfarm, server mode only)" OFF)
153 mark_as_advanced(WITH_HEADLESS)
155 option(WITH_AUDASPACE "Build with blenders audio library (only disable if you know what you're doing!)" ON)
156 mark_as_advanced(WITH_AUDASPACE)
158 option(WITH_BOOL_COMPAT "Continue defining \"TRUE\" and \"FALSE\" until these can be replaced with \"true\" and \"false\" from stdbool.h" ON)
159 mark_as_advanced(WITH_BOOL_COMPAT)
161 # (unix defaults to OpenMP On)
162 if((UNIX AND NOT APPLE) OR (MINGW))
163 set(PLATFORM_DEFAULT ON)
165 set(PLATFORM_DEFAULT OFF)
167 option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ${PLATFORM_DEFAULT})
168 unset(PLATFORM_DEFAULT)
171 if(UNIX AND NOT APPLE)
172 option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)" ON)
173 option(WITH_X11_XF86VMODE "Enable X11 video mode switching" ON)
174 option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
176 # freebsd doesn't seems to support XDND
177 if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
178 option(WITH_GHOST_XDND "Enable drag'n'drop support on Linux using XDND protocol" ON)
181 # not an option for other OS's
182 set(WITH_SYSTEM_GLEW OFF)
186 # (unix defaults to System OpenJPEG On)
187 if(UNIX AND NOT APPLE)
188 set(PLATFORM_DEFAULT ON)
190 set(PLATFORM_DEFAULT OFF)
192 option(WITH_SYSTEM_OPENJPEG "Use the operating systems OpenJPEG library" ${PLATFORM_DEFAULT})
193 unset(PLATFORM_DEFAULT)
197 option(WITH_MOD_FLUID "Enable Elbeem Modifier (Fluid Simulation)" ON)
198 option(WITH_MOD_SMOKE "Enable Smoke Modifier (Smoke Simulation)" ON)
199 option(WITH_MOD_BOOLEAN "Enable Boolean Modifier" ON)
200 option(WITH_MOD_REMESH "Enable Remesh Modifier" ON)
201 # option(WITH_MOD_CLOTH_ELTOPO "Enable Experimental cloth solver" OFF) # this is now only available in a branch
202 # mark_as_advanced(WITH_MOD_CLOTH_ELTOPO)
203 option(WITH_MOD_OCEANSIM "Enable Ocean Modifier" OFF)
205 # Image format support
206 option(WITH_OPENIMAGEIO "Enable OpenImageIO Support (http://www.openimageio.org)" OFF)
207 option(WITH_IMAGE_OPENEXR "Enable OpenEXR Support (http://www.openexr.com)" ON)
208 option(WITH_IMAGE_OPENJPEG "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
209 option(WITH_IMAGE_TIFF "Enable LibTIFF Support" ON)
210 option(WITH_IMAGE_DDS "Enable DDS Image Support" ON)
211 option(WITH_IMAGE_CINEON "Enable CINEON and DPX Image Support" ON)
212 option(WITH_IMAGE_HDR "Enable HDR Image Support" ON)
213 option(WITH_IMAGE_REDCODE "Enable RedCode Image Support" OFF)
214 option(WITH_IMAGE_FRAMESERVER "Enable image FrameServer Support for rendering" ON)
216 # Audio/Video format support
217 option(WITH_CODEC_AVI "Enable Blenders own AVI file support (raw/jpeg)" ON)
218 option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" OFF)
219 option(WITH_CODEC_SNDFILE "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF)
222 option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" ON)
223 option(WITH_CODEC_QUICKTIME "Enable Quicktime Support" ON)
225 option(WITH_CODEC_FFMPEG "Enable FFMPeg Support (http://ffmpeg.org)" OFF)
229 # Disable opencollada when we don't have precompiled libs
231 option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" ON)
233 option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" OFF)
237 option(WITH_SDL "Enable SDL for sound and joystick support" ON)
238 option(WITH_OPENAL "Enable OpenAL Support (http://www.openal.org)" ON)
239 option(WITH_JACK "Enable Jack Support (http://www.jackaudio.org)" OFF)
240 if(UNIX AND NOT APPLE)
241 option(WITH_JACK_DYNLOAD "Enable runtime dynamic Jack libraries loading" OFF)
245 option(WITH_LZO "Enable fast LZO compression (used for pointcache)" ON)
246 option(WITH_LZMA "Enable best LZMA compression, (used for pointcache)" ON)
248 # Camera/motion tracking
249 option(WITH_LIBMV "Enable libmv structure from motion library" ON)
252 option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
255 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
256 option(WITH_RAYOPTIMIZATION "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
257 option(WITH_OPENNL "Enable use of Open Numerical Library" ON)
258 if(UNIX AND NOT APPLE)
259 option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
260 option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
262 option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
263 mark_as_advanced(WITH_BOOST_ICU)
266 option(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON)
267 option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder" ON)
268 set(PYTHON_NUMPY_PATH "" CACHE PATH "Python to python site-packages or dist-packages containing 'numpy' module")
269 mark_as_advanced(PYTHON_NUMPY_PATH)
272 option(WITH_CYCLES "Enable cycles Render Engine" ON)
273 option(WITH_CYCLES_STANDALONE "Build cycles standalone application" OFF)
274 option(WITH_CYCLES_STANDALONE_GUI "Build cycles standalone with GUI" OFF)
275 option(WITH_CYCLES_OSL "Build Cycles with OSL support" OFF)
276 option(WITH_CYCLES_CUDA_BINARIES "Build cycles CUDA binaries" OFF)
277 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 CACHE STRING "CUDA architectures to build binaries for")
278 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
279 unset(PLATFORM_DEFAULT)
282 option(WITH_LLVM "Use LLVM" OFF)
283 option(LLVM_STATIC "Link with LLVM static libraries" ON)
284 mark_as_advanced(LLVM_STATIC)
286 # disable for now, but plan to support on all platforms eventually
287 option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
288 mark_as_advanced(WITH_MEM_JEMALLOC)
290 # currently only used for BLI_mempool
291 option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
292 mark_as_advanced(WITH_MEM_VALGRIND)
295 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
296 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
298 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
299 mark_as_advanced(WITH_ASSERT_ABORT)
301 option(WITH_BOOST "Enable features depending on boost" ON)
303 if(CMAKE_COMPILER_IS_GNUCC)
304 option(WITH_GCC_MUDFLAP "Enable mudflap" OFF)
305 mark_as_advanced(WITH_GCC_MUDFLAP)
309 cmake_minimum_required(VERSION 2.8.8)
310 cmake_policy(VERSION 2.8.8)
312 if(NOT CMAKE_OSX_ARCHITECTURES)
313 set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
314 "Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
318 execute_process(COMMAND uname -r OUTPUT_VARIABLE MAC_SYS) # check for actual system-version
319 if(${MAC_SYS} MATCHES 13)
321 elseif(${MAC_SYS} MATCHES 12)
323 elseif(${MAC_SYS} MATCHES 11)
325 elseif(${MAC_SYS} MATCHES 10)
327 elseif(${MAC_SYS} MATCHES 9)
330 set(OSX_SYSTEM unsupported)
332 message(STATUS "Detected system-version: " ${OSX_SYSTEM})
334 # workaround for incorrect cmake xcode lookup for developer previews - XCODE_VERSION does not take xcode-select path into accout
335 # but would always look into /Applications/Xcode.app while dev versions are named Xcode<version>-DP<preview_number>
336 execute_process(COMMAND xcode-select --print-path OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
337 string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case
338 message(STATUS "Xcode-bundle : " ${XCODE_BUNDLE})
340 if(${CMAKE_GENERATOR} MATCHES "Xcode")
342 if(${XCODE_VERSION} VERSION_GREATER 4.2) # earlier xcode has no bundled developer dir, no sense in getting xcode path from
343 string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME) # reduce to XCode name without dp extension
344 if(${DP_NAME} MATCHES Xcode5)
349 ##### cmake incompatibility with xcode 4.3 and higher #####
350 if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
351 message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
353 ### end cmake incompatibility with xcode 4.3 and higher ###
355 if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
356 # Xcode 4 defaults to the Apple LLVM Compiler.
357 # Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
358 set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
359 message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
361 else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
362 execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
363 string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
364 unset(XCODE_VERS_BUILD_NR)
367 message(STATUS "Detected Xcode-version: " ${XCODE_VERSION})
369 if(${XCODE_VERSION} VERSION_LESS 4.3)
370 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE) # use guaranteed existing sdk
372 # note: xcode-select path could be ambigous, cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
373 # so i use a selfcomposed bundlepath here
374 set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
375 message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
376 set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
377 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
378 if(${CMAKE_GENERATOR} MATCHES "Xcode")
379 set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM}) # to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
383 if(OSX_SYSTEM MATCHES 10.9)
384 set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT}) # make sure syslibs and headers are looked up in sdk ( expecially for 10.9 openGL atm. )
387 if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
388 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" CACHE STRING "" FORCE) # 10.6 is our min. target, if you use higher sdk, weak linking happens
391 if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
392 # force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
393 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
394 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
395 add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
398 option(WITH_LIBS10.5 "Use 10.5 libs (needed for 64bit builds)" OFF)
402 #-----------------------------------------------------------------------------
403 # Check for conflicting/unsupported configurations
405 if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_STANDALONE)
406 message(FATAL_ERROR "At least one of WITH_BLENDER or WITH_PLAYER must be enabled, nothing to do!")
409 if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
410 message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
413 if(NOT WITH_AUDASPACE)
415 message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
418 message(FATAL_ERROR "WITH_JACK requires WITH_AUDASPACE")
421 message(FATAL_ERROR "WITH_GAMEENGINE requires WITH_AUDASPACE")
425 if(NOT WITH_SDL AND WITH_GHOST_SDL)
426 message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
429 if(WITH_IMAGE_REDCODE AND ((NOT WITH_IMAGE_OPENJPEG) OR (NOT WITH_CODEC_FFMPEG)))
430 message(FATAL_ERROR "WITH_IMAGE_REDCODE requires WITH_IMAGE_OPENJPEG and WITH_CODEC_FFMPEG")
433 # python module, needs some different options
434 if(WITH_PYTHON_MODULE AND WITH_PLAYER)
435 message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PLAYER to be OFF")
438 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
439 message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
443 # may as well build python module without a UI
444 if(WITH_PYTHON_MODULE)
445 set(WITH_HEADLESS ON)
452 # enable boost for cycles, booleans, audaspace or i18n
453 # otherwise if the user disabled
455 # Explicitly disabled. so disable all deps.
459 message(STATUS "'WITH_BOOST' is disabled: forceing 'set(${_setting} ${_val})'")
461 set(${_setting} ${_val})
464 set_and_warn(WITH_CYCLES OFF)
465 set_and_warn(WITH_MOD_BOOLEAN OFF)
466 set_and_warn(WITH_AUDASPACE OFF)
467 set_and_warn(WITH_INTERNATIONAL OFF)
469 set_and_warn(WITH_OPENAL OFF) # depends on AUDASPACE
470 set_and_warn(WITH_GAMEENGINE OFF) # depends on AUDASPACE
471 elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_MOD_BOOLEAN OR WITH_AUDASPACE OR WITH_INTERNATIONAL)
474 # Enabled but we don't need it
478 # auto enable openimageio for cycles
480 set(WITH_OPENIMAGEIO ON)
483 # auto enable openimageio linking dependencies
485 set(WITH_IMAGE_OPENEXR ON)
486 set(WITH_IMAGE_TIFF ON)
489 # auto enable llvm for cycles_osl
491 set(WITH_LLVM ON CACHE BOOL "ON" FORCE)
494 # don't store paths to libs for portable distribution
495 if(WITH_INSTALL_PORTABLE)
496 set(CMAKE_SKIP_BUILD_RPATH TRUE)
499 if(WITH_GHOST_SDL OR WITH_HEADLESS)
500 set(WITH_GHOST_XDND OFF)
501 set(WITH_X11_XF86VMODE OFF)
502 set(WITH_X11_XINPUT OFF)
505 TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
507 TEST_STDBOOL_SUPPORT()
509 add_definitions(-DHAVE_STDBOOL_H)
512 add_definitions(-DWITH_BOOL_COMPAT)
515 #-----------------------------------------------------------------------------
516 # Check for valid directories
517 # ... svn extern paths can be missing because of svn-git.
519 if(WITH_INTERNATIONAL)
520 if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/datafiles/locale")
521 message(WARNING "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
522 "This is an 'svn external', which are known not to work with bridges to other version "
523 "control systems, disabling 'WITH_INTERNATIONAL'.")
524 set(WITH_INTERNATIONAL OFF)
529 if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/scripts/addons")
530 message(WARNING "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
531 "This is an 'svn external', which are known not to work with bridges to other version "
532 "control systems: * CONTINUING WITHOUT ADDONS *")
536 #-----------------------------------------------------------------------------
537 # Initialize un-cached vars, avoid unused warning
539 # linux only, not cached
540 set(WITH_BINRELOC OFF)
542 # MAXOSX only, set to avoid uninitialized
548 # these are added to later on.
552 # for gcc -Wno-blah-blah
553 set(CC_REMOVE_STRICT_FLAGS)
555 # libraries to link the binary with passed to target_link_libraries()
556 # known as LLIBS to scons
557 set(PLATFORM_LINKLIBS "")
559 # Added to linker flags in setup_liblinks
560 # - CMAKE_EXE_LINKER_FLAGS
561 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
562 set(PLATFORM_LINKFLAGS "")
563 set(PLATFORM_LINKFLAGS_DEBUG "")
566 # For alternate Python locations the commandline can be used to override detected/default cache settings, e.g:
569 # -D PYTHON_VERSION=3.3 \
570 # -D PYTHON_INCLUDE_DIR=/opt/py33/include/python3.3d \
571 # -D PYTHON_LIBRARY=/opt/py33/lib/libpython3.3d.so
575 # -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.3/include/python3.3 \
576 # -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/config \
579 # When changing any of this remember to update the notes in doc/build_systems/cmake.txt
581 #-----------------------------------------------------------------------------
584 if(UNIX AND NOT APPLE)
585 macro(find_package_wrapper)
586 string(TOUPPER ${ARGV0} _NAME_UPPER)
588 set(_cmake_find_library_suffixes_back ${CMAKE_FIND_LIBRARY_SUFFIXES})
589 set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
591 find_package(${ARGV})
593 set(CMAKE_FIND_LIBRARY_SUFFIXES ${_cmake_find_library_suffixes_back})
594 unset(_cmake_find_library_suffixes_back)
598 find_package_wrapper(JPEG REQUIRED)
599 find_package_wrapper(PNG REQUIRED)
600 find_package_wrapper(ZLIB REQUIRED)
601 find_package_wrapper(Freetype REQUIRED)
604 # No way to set py33. remove for now.
605 # find_package(PythonLibs)
607 # Use our own instead, since wothout py is such a rare case,
608 # require this package
609 # XXX Linking errors with debian static python :/
610 # find_package_wrapper(PythonLibsUnix REQUIRED)
611 find_package(PythonLibsUnix REQUIRED)
614 if(WITH_IMAGE_OPENEXR)
615 find_package_wrapper(OpenEXR) # our own module
616 if(NOT OPENEXR_FOUND)
617 set(WITH_IMAGE_OPENEXR OFF)
621 if(WITH_IMAGE_OPENJPEG)
622 find_package_wrapper(OpenJPEG)
623 if(NOT OPENJPEG_FOUND)
624 set(WITH_IMAGE_OPENJPEG OFF)
629 # XXX Linking errors with debian static tiff :/
630 # find_package_wrapper(TIFF)
633 set(WITH_IMAGE_TIFF OFF)
639 find_package_wrapper(OpenAL)
646 find_package_wrapper(SDL)
653 # unset(SDLMAIN_LIBRARY CACHE)
660 find_package_wrapper(Jack)
667 if(WITH_CODEC_SNDFILE)
668 find_package_wrapper(SndFile)
669 if(NOT SNDFILE_FOUND)
670 set(WITH_CODEC_SNDFILE OFF)
674 if(WITH_CODEC_FFMPEG)
675 set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
676 set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
678 mark_as_advanced(FFMPEG)
680 # lame, but until we have proper find module for ffmpeg
681 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
682 if(EXISTS "${FFMPEG}/include/ffmpeg/")
683 list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
687 mark_as_advanced(FFMPEG_LIBRARIES)
688 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
689 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
693 find_package_wrapper(Fftw3)
700 find_package_wrapper(OpenCOLLADA)
701 if(OPENCOLLADA_FOUND)
702 find_package_wrapper(XML2)
703 find_package_wrapper(PCRE)
705 set(WITH_OPENCOLLADA OFF)
709 if(WITH_MEM_JEMALLOC)
710 find_package_wrapper(JeMalloc)
711 if(NOT JEMALLOC_FOUND)
712 set(WITH_MEM_JEMALLOC OFF)
717 find_package_wrapper(Spacenav)
718 if(NOT SPACENAV_FOUND)
719 set(WITH_INPUT_NDOF OFF)
722 # use generic names within blenders buildsystem.
724 set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
725 set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
730 # uses in build instructions to override include and library variables
733 set(Boost_USE_STATIC_LIBS ON)
735 set(Boost_USE_MULTITHREADED ON)
736 set(__boost_packages filesystem regex system thread date_time)
737 if(WITH_INTERNATIONAL)
738 list(APPEND __boost_packages locale)
740 if(WITH_CYCLES_NETWORK)
741 list(APPEND __boost_packages serialization)
743 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
745 # try to find non-multithreaded if -mt not found, this flag
746 # doesn't matter for us, it has nothing to do with thread
747 # safety, but keep it to not disturb build setups
748 set(Boost_USE_MULTITHREADED OFF)
749 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
751 unset(__boost_packages)
752 if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
753 find_package(IcuLinux)
755 mark_as_advanced(Boost_DIR) # why doesnt boost do this?
758 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
759 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
760 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
761 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
765 find_package_wrapper(OpenImageIO)
767 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARIES} ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${ZLIB_LIBRARIES} ${BOOST_LIBRARIES})
768 set(OPENIMAGEIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
769 set(OPENIMAGEIO_DEFINITIONS "")
772 list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
774 if(WITH_IMAGE_OPENEXR)
775 list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
778 if(NOT OPENIMAGEIO_FOUND)
779 set(WITH_OPENIMAGEIO OFF)
780 message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
785 find_package_wrapper(OpenColorIO)
787 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
788 set(OPENCOLORIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
789 set(OPENCOLORIO_DEFINITIONS)
791 if(NOT OPENCOLORIO_FOUND)
792 set(WITH_OPENCOLORIO OFF)
793 message(STATUS "OpenColorIO not found")
797 # XXX Maybe most of this section should go into an llvm module?
799 # Set llvm version if not specified
801 set(LLVM_VERSION "3.0")
805 find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION} HINTS ${LLVM_DIRECTORY}/bin NO_CMAKE_PATH)
807 find_program(LLVM_CONFIG llvm-config HINTS ${LLVM_DIRECTORY}/bin NO_CMAKE_PATH)
810 find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION})
812 find_program(LLVM_CONFIG llvm-config)
816 if(NOT DEFINED LLVM_VERSION)
817 execute_process(COMMAND ${LLVM_CONFIG} --version
818 OUTPUT_VARIABLE LLVM_VERSION
819 OUTPUT_STRIP_TRAILING_WHITESPACE)
820 set(LLVM_VERSION ${LLVM_VERSION} CACHE STRING "Version of LLVM to use")
822 if(NOT DEFINED LLVM_DIRECTORY)
823 execute_process(COMMAND ${LLVM_CONFIG} --prefix
824 OUTPUT_VARIABLE LLVM_DIRECTORY
825 OUTPUT_STRIP_TRAILING_WHITESPACE)
826 set(LLVM_DIRECTORY ${LLVM_DIRECTORY} CACHE PATH "Path to the LLVM installation")
828 if(NOT DEFINED LLVM_LIBPATH)
829 execute_process(COMMAND ${LLVM_CONFIG} --libdir
830 OUTPUT_VARIABLE LLVM_LIBPATH
831 OUTPUT_STRIP_TRAILING_WHITESPACE)
832 set(LLVM_LIBPATH ${LLVM_LIBPATH} CACHE PATH "Path to the LLVM library path")
836 find_library(LLVM_LIBRARY
837 NAMES LLVMAnalysis # first of a whole bunch of libs to get
838 PATHS ${LLVM_LIBPATH})
840 find_library(LLVM_LIBRARY
841 NAMES LLVM-${LLVM_VERSION}
842 PATHS ${LLVM_LIBPATH})
846 if(LLVM_LIBRARY AND LLVM_DIRECTORY AND LLVM_LIBPATH)
848 # if static LLVM libraries were requested, use llvm-config to generate
849 # the list of what libraries we need, and substitute that in the right
850 # way for LLVM_LIBRARY.
851 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
852 OUTPUT_VARIABLE LLVM_LIBRARY
853 OUTPUT_STRIP_TRAILING_WHITESPACE)
854 string(REPLACE " " ";" LLVM_LIBRARY "${LLVM_LIBRARY}")
857 message(FATAL_ERROR "LLVM not found.")
860 # Fix for conflict with Mesa llvmpipe
861 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/source/creator/blender.map")
865 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
867 message(STATUS "CYCLES_OSL = ${CYCLES_OSL}")
869 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
870 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
871 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
872 # Note: --whole-archive is needed to force loading of all symbols in liboslexec,
873 # otherwise LLVM is missing the osl_allocate_closure_component function
874 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -Wl,--whole-archive ${OSL_LIB_EXEC} -Wl,--no-whole-archive ${OSL_LIB_QUERY})
875 find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
876 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
878 if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
880 message(STATUS "OSL includes = ${OSL_INCLUDES}")
881 message(STATUS "OSL library = ${OSL_LIBRARIES}")
882 message(STATUS "OSL compiler = ${OSL_COMPILER}")
884 message(STATUS "OSL not found")
888 # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
889 set(PLATFORM_LINKLIBS "-lutil -lc -lm -lpthread")
891 if((NOT WITH_HEADLESS) AND (NOT WITH_GHOST_SDL))
892 find_package(X11 REQUIRED)
893 find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
894 mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
896 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} ${X11_X11_LIB}")
900 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} ${X11_Xinput_LIB}")
902 set(WITH_X11_XINPUT OFF)
906 if(WITH_X11_XF86VMODE)
907 # XXX, why dont cmake make this available?
908 FIND_LIBRARY(X11_Xxf86vmode_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
909 mark_as_advanced(X11_Xxf86vmode_LIB)
910 if(X11_Xxf86vmode_LIB)
911 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} ${X11_Xxf86vmode_LIB}")
913 set(WITH_X11_XF86VMODE OFF)
918 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
919 if(NOT WITH_PYTHON_MODULE)
920 # binreloc is linux only
921 set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
922 set(WITH_BINRELOC ON)
926 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -pthread")
928 # lfs on glibc, all compilers should use
929 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
932 if(CMAKE_COMPILER_IS_GNUCC)
933 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
934 # CLang is the same as GCC for now.
935 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
936 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
938 elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
939 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
942 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
943 # think these next two are broken
944 find_program(XIAR xiar)
946 set(CMAKE_AR "${XIAR}")
948 mark_as_advanced(XIAR)
950 find_program(XILD xild)
952 set(CMAKE_LINKER "${XILD}")
954 mark_as_advanced(XILD)
956 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
957 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
959 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
960 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
961 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
966 add_definitions(-DWIN32)
969 set(PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid psapi)
971 # MSVC11 SDL is not hard linked to dxguid.lib
972 if(MSVC11 AND WITH_SDL)
973 set(PLATFORM_LINKLIBS ${PLATFORM_LINKLIBS} dxguid)
976 add_definitions(/D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_CONSOLE /D_LIB)
978 # MSVC11 needs _ALLOW_KEYWORD_MACROS to build
980 add_definitions(/D_ALLOW_KEYWORD_MACROS)
983 set(CMAKE_CXX_FLAGS "/nologo /J /Gd /EHsc /MP" CACHE STRING "MSVC MT C++ flags " FORCE)
984 set(CMAKE_C_FLAGS "/nologo /J /Gd /MP" CACHE STRING "MSVC MT C++ flags " FORCE)
987 set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
989 set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /ZI /MP" CACHE STRING "MSVC MT flags " FORCE)
991 set(CMAKE_CXX_FLAGS_RELEASE "/O2 /Ob2 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
992 set(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /Ob1 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
993 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
995 set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
997 set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /ZI /MP" CACHE STRING "MSVC MT flags " FORCE)
999 set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
1000 set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Ob1 /MT /MP" CACHE STRING "MSVC MT flags " FORCE)
1001 set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi /MP" CACHE STRING "MSVC MT flags " FORCE)
1003 # most msvc warnings are C & C++
1004 set(_WARNINGS "/W3 /wd4018 /wd4244 /wd4305 /wd4800 /wd4181 /wd4065 /wd4267 /we4013 /wd4200")
1005 set(C_WARNINGS "${_WARNINGS}")
1006 set(CXX_WARNINGS "${_WARNINGS}")
1009 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
1011 # MSVC only, Mingw doesnt need
1013 set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1015 set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1018 set(PLATFORM_LINKFLAGS_DEBUG "/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1020 if(NOT DEFINED LIBDIR)
1021 # Setup 64bit and 64bit windows systems
1023 message(STATUS "64 bit compiler detected.")
1024 set(LIBDIR_BASE ${CMAKE_SOURCE_DIR}/../lib/win64)
1026 message(STATUS "32 bit compiler detected.")
1027 set(LIBDIR_BASE ${CMAKE_SOURCE_DIR}/../lib/windows)
1030 message(STATUS "Visual C++ 2013 detected.")
1031 set(LIBDIR ${LIBDIR_BASE}_vc12)
1033 message(STATUS "Visual C++ 2012 detected.")
1034 set(LIBDIR ${LIBDIR_BASE}_vc11)
1036 set(LIBDIR ${LIBDIR_BASE})
1039 message(STATUS using LIBDIR ${LIBDIR})
1042 # Add each of our libraries to our cmake_prefix_path so find_package() could work
1043 FILE(GLOB children RELATIVE ${LIBDIR} ${LIBDIR}/*)
1044 FOREACH(child ${children})
1045 IF(IS_DIRECTORY ${LIBDIR}/${child})
1046 LIST(APPEND CMAKE_PREFIX_PATH ${LIBDIR}/${child})
1050 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1051 set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
1052 set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
1053 set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
1054 set(ZLIB_DIR ${LIBDIR}/zlib)
1055 find_package(zlib) # we want to find before finding things that depend on it like png
1060 set(PNG_PNG_INCLUDE_DIR ${LIBDIR}/png/include)
1061 message(WARNING "Using HARDCODED libpng locations")
1062 set(PNG_LIBRARIES libpng)
1063 set(PNG "${LIBDIR}/png")
1064 set(PNG_INCLUDE_DIR "${PNG}/include")
1065 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1068 find_package(jpeg REQUIRED)
1070 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1071 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1073 set(FREETYPE ${LIBDIR}/freetype)
1074 set(FREETYPE_INCLUDE_DIRS
1075 ${LIBDIR}/freetype/include
1076 ${LIBDIR}/freetype/include/freetype2
1078 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1079 find_package(freetype REQUIRED)
1082 set(FFTW3 ${LIBDIR}/fftw3)
1083 set(FFTW3_LIBRARIES libfftw)
1084 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1085 set(FFTW3_LIBPATH ${FFTW3}/lib)
1088 if(WITH_OPENCOLLADA)
1089 set(OPENCOLLADA ${LIBDIR}/opencollada)
1091 set(OPENCOLLADA_INCLUDE_DIRS
1092 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1093 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1094 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1095 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1096 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1099 set(OPENCOLLADA_LIBRARIES
1100 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib
1101 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAFramework.lib
1102 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADABaseUtils.lib
1103 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
1104 ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
1105 ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
1106 ${OPENCOLLADA}/lib/opencollada/xml.lib
1107 ${OPENCOLLADA}/lib/opencollada/buffer.lib
1108 ${OPENCOLLADA}/lib/opencollada/ftoa.lib
1109 ${OPENCOLLADA}/lib/opencollada/UTF.lib
1112 ${OPENCOLLADA}/lib/opencollada/pcre.lib
1116 if(WITH_CODEC_FFMPEG)
1117 set(FFMPEG_INCLUDE_DIRS
1118 ${LIBDIR}/ffmpeg/include
1119 ${LIBDIR}/ffmpeg/include/msvc
1121 find_package(FFMPEG)
1122 if(NOT FFMPEG_FOUND)
1123 message(WARNING "Using HARDCODED ffmpeg locations")
1124 # MSVC11 FFMPEG libs are newer
1126 set(FFMPEG_LIBRARY_VERSION 54)
1127 set(FFMPEG_LIBRARY_VERSION_AVU 52)
1129 set(FFMPEG_LIBRARY_VERSION 53)
1130 set(FFMPEG_LIBRARY_VERSION_AVU 51)
1132 set(FFMPEG_LIBRARIES
1133 ${LIBDIR}/ffmpeg/lib/avcodec-${FFMPEG_LIBRARY_VERSION}.lib
1134 ${LIBDIR}/ffmpeg/lib/avformat-${FFMPEG_LIBRARY_VERSION}.lib
1135 ${LIBDIR}/ffmpeg/lib/avdevice-${FFMPEG_LIBRARY_VERSION}.lib
1136 ${LIBDIR}/ffmpeg/lib/avutil-${FFMPEG_LIBRARY_VERSION_AVU}.lib
1137 ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1142 if(WITH_IMAGE_OPENEXR)
1143 set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
1144 set(OPENEXR_VERSION "2.1")
1145 find_package(OPENEXR REQUIRED)
1146 if(NOT OPENEXR_FOUND)
1147 message(WARNING "Using HARDCODED OpenEXR locations")
1148 set(OPENEXR ${LIBDIR}/openexr)
1149 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1150 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1151 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1152 set(OPENEXR_LIBRARIES
1153 ${OPENEXR_LIBPATH}/Iex.lib
1154 ${OPENEXR_LIBPATH}/Half.lib
1155 ${OPENEXR_LIBPATH}/IlmImf.lib
1156 ${OPENEXR_LIBPATH}/Imath.lib
1157 ${OPENEXR_LIBPATH}/IlmThread.lib
1159 endif(NOT OPENEXR_FOUND)
1163 # Try to find tiff first then complain and set static and maybe wrong paths
1166 message(WARNING "Using HARDCODED libtiff locations")
1167 set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1168 set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1173 set(JACK_INCLUDE_DIRS
1174 ${LIBDIR}/jack/include/jack
1175 ${LIBDIR}/jack/include
1177 set(JACK_LIBRARIES ${LIBDIR}/jack/lib/libjack.lib)
1181 set(PYTHON_VERSION 3.3) # CACHE STRING)
1183 string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1184 # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1185 set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1186 unset(_PYTHON_VERSION_NO_DOTS)
1188 # Shared includes for both vc2008 and vc2010
1189 set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1192 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1193 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1198 set(boost_extra_libs wave)
1199 endif(WITH_CYCLES_OSL)
1200 if(WITH_INTERNATIONAL)
1201 list(APPEND boost_extra_libs locale)
1202 endif(WITH_INTERNATIONAL)
1203 find_package(Boost COMPONENTS date_time filesystem thread regex system ${boost_extra_libs})
1205 message(WARNING "USING HARDCODED boost locations")
1206 set(BOOST ${LIBDIR}/boost)
1207 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1209 set(BOOST_LIBPATH ${BOOST}/lib)
1210 set(BOOST_POSTFIX "vc110-mt-s-1_53.lib")
1211 set(BOOST_DEBUG_POSTFIX "vc110-mt-sgd-1_53.lib")
1213 set(BOOST_LIBPATH ${BOOST}/lib)
1214 set(BOOST_POSTFIX "vc90-mt-s-1_49.lib")
1215 set(BOOST_DEBUG_POSTFIX "vc90-mt-sgd-1_49.lib")
1218 optimized libboost_date_time-${BOOST_POSTFIX} optimized libboost_filesystem-${BOOST_POSTFIX}
1219 optimized libboost_regex-${BOOST_POSTFIX}
1220 optimized libboost_system-${BOOST_POSTFIX} optimized libboost_thread-${BOOST_POSTFIX}
1221 debug libboost_date_time-${BOOST_DEBUG_POSTFIX} debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1222 debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1223 debug libboost_system-${BOOST_DEBUG_POSTFIX} debug libboost_thread-${BOOST_DEBUG_POSTFIX})
1225 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1226 optimized libboost_wave-${BOOST_POSTFIX}
1227 debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1229 if(WITH_INTERNATIONAL)
1230 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1231 optimized libboost_locale-${BOOST_POSTFIX}
1232 debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1234 else() # we found boost using find_package
1235 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1236 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1237 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1239 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1242 if(WITH_OPENIMAGEIO)
1243 find_package(OpenImageIO)
1244 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1245 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1246 set(OPENIMAGEIO_LIBRARIES optimized OpenImageIO debug OpenImageIO_d)
1247 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1248 set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1252 set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1253 file(GLOB LLVM_LIBRARY ${LLVM_DIRECTORY}/lib/*.lib)
1256 if(WITH_OPENCOLORIO)
1257 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1258 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1259 set(OPENCOLORIO_LIBRARIES OpenColorIO)
1260 set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1261 set(OPENCOLORIO_DEFINITIONS)
1265 if(WITH_MOD_CLOTH_ELTOPO)
1266 set(LAPACK ${LIBDIR}/lapack)
1267 # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1268 set(LAPACK_LIBPATH ${LAPACK}/lib)
1269 set(LAPACK_LIBRARIES
1270 ${LIBDIR}/lapack/lib/libf2c.lib
1271 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1272 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1276 # used in many places so include globally, like OpenGL
1277 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1279 elseif(CMAKE_COMPILER_IS_GNUCC)
1280 # keep GCC specific stuff here
1281 include(CheckCSourceCompiles)
1282 # Setup 64bit and 64bit windows systems
1283 CHECK_C_SOURCE_COMPILES("
1287 int main(void) { return 0; }
1292 message(STATUS "Compiling for 64 bit with MinGW-w64.")
1293 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
1295 message(STATUS "Compiling for 32 bit with MinGW-w32.")
1296 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
1298 if(WITH_RAYOPTIMIZATION)
1299 message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
1303 set(PLATFORM_LINKLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi")
1304 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1307 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1308 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -lpthread")
1310 add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1311 # Turn off OpenMP since it causes crashes on render for subsurfed/multiresolution meshes
1312 set(WITH_OPENMP OFF)
1315 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1317 add_definitions(-DFREE_WINDOWS)
1319 set(PNG "${LIBDIR}/png")
1320 set(PNG_INCLUDE_DIR "${PNG}/include")
1321 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1324 set(JPEG_LIBRARIES jpeg)
1326 set(JPEG_LIBRARIES libjpeg)
1328 set(PNG_LIBRARIES png)
1330 set(ZLIB ${LIBDIR}/zlib)
1331 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1332 set(ZLIB_LIBPATH ${ZLIB}/lib)
1333 set(ZLIB_LIBRARIES z)
1335 set(JPEG "${LIBDIR}/jpeg")
1336 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1337 set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
1339 # comes with own pthread library
1340 if(NOT WITH_MINGW64)
1341 set(PTHREADS ${LIBDIR}/pthreads)
1342 #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1343 set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1344 set(PTHREADS_LIBRARIES pthreadGC2)
1347 set(FREETYPE ${LIBDIR}/freetype)
1348 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1349 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1350 set(FREETYPE_LIBRARY freetype)
1353 set(FFTW3 ${LIBDIR}/fftw3)
1354 set(FFTW3_LIBRARIES fftw3)
1355 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1356 set(FFTW3_LIBPATH ${FFTW3}/lib)
1359 if(WITH_OPENCOLLADA)
1360 set(OPENCOLLADA ${LIBDIR}/opencollada)
1361 set(OPENCOLLADA_INCLUDE_DIRS
1362 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1363 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1364 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1365 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1366 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1368 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
1369 set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver buffer ftoa xml)
1370 set(PCRE_LIBRARIES pcre)
1373 if(WITH_CODEC_FFMPEG)
1374 set(FFMPEG ${LIBDIR}/ffmpeg)
1375 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1377 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1379 set(FFMPEG_LIBRARIES avcodec-53 avformat-53 avdevice-53 avutil-51 swscale-2)
1381 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1384 if(WITH_IMAGE_OPENEXR)
1385 set(OPENEXR ${LIBDIR}/openexr)
1386 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1387 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1388 set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1389 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1393 set(TIFF ${LIBDIR}/tiff)
1394 set(TIFF_LIBRARY tiff)
1395 set(TIFF_INCLUDE_DIR ${TIFF}/include)
1396 set(TIFF_LIBPATH ${TIFF}/lib)
1400 set(JACK ${LIBDIR}/jack)
1401 set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1402 set(JACK_LIBRARIES jack)
1403 set(JACK_LIBPATH ${JACK}/lib)
1405 # TODO, gives linking errors, force off
1410 # normally cached but not since we include them with blender
1411 set(PYTHON_VERSION 3.3) # CACHE STRING)
1412 set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}") # CACHE PATH)
1413 set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python33mw.lib") # CACHE FILEPATH)
1416 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1417 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1421 set(BOOST ${LIBDIR}/boost)
1422 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1424 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1425 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1427 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1428 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1431 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1432 boost_regex-${BOOST_POSTFIX}
1433 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1434 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1435 boost_regex-${BOOST_DEBUG_POSTFIX}
1436 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1437 if(WITH_INTERNATIONAL)
1438 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1439 optimized boost_locale-${BOOST_POSTFIX}
1440 debug boost_locale-${BOOST_DEBUG_POSTFIX})
1443 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1444 optimized boost_wave-${BOOST_POSTFIX}
1445 debug boost_wave-${BOOST_DEBUG_POSTFIX})
1447 set(BOOST_LIBPATH ${BOOST}/lib)
1448 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1451 if(WITH_OPENIMAGEIO)
1452 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1453 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1454 set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1455 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1456 set(OPENIMAGEIO_DEFINITIONS "")
1460 set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1461 set(LLVM_LIBPATH ${LLVM_DIRECTORY}/lib)
1462 # Explicitly set llvm lib order.
1463 #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1464 set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1465 LLVMAsmParser LLVMAsmPrinter
1466 LLVMBitReader LLVMBitWriter
1467 LLVMDebugInfo LLVMExecutionEngine
1468 LLVMInstCombine LLVMInstrumentation
1469 LLVMInterpreter LLVMJIT
1471 LLVMMCDisassembler LLVMMCJIT
1472 LLVMMCParser LLVMObject
1475 LLVMTableGen LLVMTarget
1476 LLVMTransformUtils LLVMVectorize
1477 LLVMX86AsmParser LLVMX86AsmPrinter
1478 LLVMX86CodeGen LLVMX86Desc
1479 LLVMX86Disassembler LLVMX86Info
1480 LLVMX86Utils LLVMipa
1482 # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1483 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -limagehlp")
1486 if(WITH_OPENCOLORIO)
1487 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1488 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1489 set(OPENCOLORIO_LIBRARIES OpenColorIO)
1490 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1491 set(OPENCOLORIO_DEFINITIONS)
1494 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
1496 ## DISABLE - causes linking errors
1497 ## for re-distribution, so users dont need mingw installed
1498 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
1502 # Things common to both mingw and MSVC should go here
1504 set(WINTAB_INC ${LIBDIR}/wintab/include)
1507 set(OPENAL ${LIBDIR}/openal)
1508 set(OPENALDIR ${LIBDIR}/openal)
1509 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
1510 if(MSVC11 OR MSVC12)
1511 set(OPENAL_LIBRARY openal32)
1513 set(OPENAL_LIBRARY wrap_oal)
1515 set(OPENAL_LIBPATH ${OPENAL}/lib)
1518 if(WITH_CODEC_SNDFILE)
1519 set(SNDFILE ${LIBDIR}/sndfile)
1520 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1521 set(SNDFILE_LIBRARIES libsndfile-1)
1522 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
1526 set(SDL ${LIBDIR}/sdl)
1527 set(SDL_INCLUDE_DIR ${SDL}/include)
1528 set(SDL_LIBRARY SDL)
1529 set(SDL_LIBPATH ${SDL}/lib)
1532 if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
1533 add_definitions(-D__SSE__ -D__MMX__)
1537 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1539 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
1540 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
1541 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
1542 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
1543 find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
1544 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
1546 if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
1549 message(STATUS "OSL not found")
1555 if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STRGREATER "10.5")
1556 set(WITH_LIBS10.5 ON CACHE BOOL "Use 10.5 libs" FORCE) # valid also for 10.6/7/8/9
1560 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
1562 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1563 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.x.i386)
1565 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.0.0-powerpc)
1571 find_package(OpenAL)
1574 set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
1576 set(WITH_OPENAL OFF)
1581 find_library(JACK_FRAMEWORK
1584 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
1585 if(NOT JACK_FRAMEWORK)
1590 if(WITH_CODEC_SNDFILE)
1591 set(SNDFILE ${LIBDIR}/sndfile)
1592 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1593 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
1594 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib) # TODO, deprecate
1598 # we use precompiled libraries for py 3.3 and up by default
1599 set(PYTHON_VERSION 3.3)
1600 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
1601 # normally cached but not since we include them with blender
1602 set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
1603 # set(PYTHON_BINARY "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
1604 set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
1605 set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
1606 # set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled
1608 # module must be compiled against Python framework
1609 set(PYTHON_INCLUDE_DIR "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/include/python${PYTHON_VERSION}m")
1610 set(PYTHON_BINARY "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}")
1611 #set(PYTHON_LIBRARY python${PYTHON_VERSION})
1612 set(PYTHON_LIBPATH "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
1613 #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python") # won't build with this enabled
1617 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1618 set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
1622 set(FFTW3 ${LIBDIR}/fftw3)
1623 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1624 set(FFTW3_LIBRARIES fftw3)
1625 set(FFTW3_LIBPATH ${FFTW3}/lib)
1628 set(PNG_LIBRARIES png)
1629 set(JPEG_LIBRARIES jpeg)
1632 set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
1633 set(ZLIB_LIBRARIES z bz2)
1635 set(FREETYPE ${LIBDIR}/freetype)
1636 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1637 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1638 set(FREETYPE_LIBRARY freetype)
1640 if(WITH_IMAGE_OPENEXR)
1641 set(OPENEXR ${LIBDIR}/openexr)
1642 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1643 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1644 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
1645 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1648 if(WITH_CODEC_FFMPEG)
1649 set(FFMPEG ${LIBDIR}/ffmpeg)
1650 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1651 set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
1652 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1653 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
1656 find_library(SYSTEMSTUBS_LIBRARY
1661 mark_as_advanced(SYSTEMSTUBS_LIBRARY)
1662 if(SYSTEMSTUBS_LIBRARY)
1663 set(PLATFORM_LINKLIBS stdc++ SystemStubs)
1665 set(PLATFORM_LINKLIBS stdc++)
1668 set(PLATFORM_CFLAGS "-pipe -funsigned-char")
1669 set(PLATFORM_LINKFLAGS "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio")
1670 if(WITH_CODEC_QUICKTIME)
1671 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
1672 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1673 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
1674 # libSDL still needs 32bit carbon quicktime
1678 # XXX - SOME MAC DEV PLEASE TEST WITH THE SDK INSTALLED!
1679 # ALSO SHOULD BE MOVED INTO OWN MODULE WHEN FUNCTIONAL
1681 # This thread it *should* work and check the framework - campbell
1682 # http://www.cmake.org/pipermail/cmake/2005-December/007740.html
1683 find_library(3DCONNEXION_CLIENT_FRAMEWORK
1684 NAMES 3DconnexionClient
1686 if(NOT 3DCONNEXION_CLIENT_FRAMEWORK)
1687 set(WITH_INPUT_NDOF OFF)
1691 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework 3DconnexionClient")
1692 set(NDOF_INCLUDE_DIRS /Library/Frameworks/3DconnexionClient.framework/Headers )
1697 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework jackmp")
1700 if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
1701 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")# force cmake to link right framework
1704 if(WITH_OPENCOLLADA)
1705 set(OPENCOLLADA ${LIBDIR}/opencollada)
1707 set(OPENCOLLADA_INCLUDE_DIRS
1708 ${LIBDIR}/opencollada/include/COLLADAStreamWriter
1709 ${LIBDIR}/opencollada/include/COLLADABaseUtils
1710 ${LIBDIR}/opencollada/include/COLLADAFramework
1711 ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
1712 ${LIBDIR}/opencollada/include/GeneratedSaxParser
1715 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
1716 set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa")
1717 # pcre is bundled with openCollada
1718 #set(PCRE ${LIBDIR}/pcre)
1719 #set(PCRE_LIBPATH ${PCRE}/lib)
1720 set(PCRE_LIBRARIES pcre)
1722 #set(EXPAT ${LIBDIR}/expat)
1723 #set(EXPAT_LIBPATH ${EXPAT}/lib)
1728 set(SDL ${LIBDIR}/sdl)
1729 set(SDL_INCLUDE_DIR ${SDL}/include)
1730 set(SDL_LIBRARY SDL)
1731 set(SDL_LIBPATH ${SDL}/lib)
1734 set(PNG "${LIBDIR}/png")
1735 set(PNG_INCLUDE_DIR "${PNG}/include")
1736 set(PNG_LIBPATH ${PNG}/lib)
1738 set(JPEG "${LIBDIR}/jpeg")
1739 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1740 set(JPEG_LIBPATH ${JPEG}/lib)
1743 set(TIFF ${LIBDIR}/tiff)
1744 set(TIFF_INCLUDE_DIR ${TIFF}/include)
1745 set(TIFF_LIBRARY tiff)
1746 set(TIFF_LIBPATH ${TIFF}/lib)
1750 # linker needs "-weak_framework 3DconnexionClient"
1754 set(BOOST ${LIBDIR}/boost)
1755 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1756 set(BOOST_LIBRARIES boost_date_time-mt boost_filesystem-mt boost_regex-mt boost_system-mt boost_thread-mt boost_wave-mt)
1757 if(WITH_INTERNATIONAL)
1758 list(APPEND BOOST_LIBRARIES boost_locale-mt)
1759 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale needs it !
1761 if(WITH_CYCLES_NETWORK)
1762 list(APPEND BOOST_LIBRARIES boost_serialization-mt)
1764 set(BOOST_LIBPATH ${BOOST}/lib)
1765 set(BOOST_DEFINITIONS)
1768 if(WITH_OPENIMAGEIO)
1769 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1770 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1771 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO}/lib/libOpenImageIO.a ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARY} ${OPENEXR_LIBRARIES} ${ZLIB_LIBRARIES})
1772 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib ${JPEG_LIBPATH} ${PNG_LIBPATH} ${TIFF_LIBPATH} ${OPENEXR_LIBPATH} ${ZLIB_LIBPATH})
1773 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
1776 if(WITH_OPENCOLORIO)
1777 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1778 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1779 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
1780 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1781 set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1785 set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
1786 set(LLVM_VERSION "3.1" CACHE STRING "Version of LLVM to use")
1787 if(EXISTS "${LLVM_DIRECTORY}/bin/llvm-config")
1788 set(LLVM_CONFIG "${LLVM_DIRECTORY}/bin/llvm-config")
1790 set(LLVM_CONFIG llvm-config)
1792 execute_process(COMMAND ${LLVM_CONFIG} --version
1793 OUTPUT_VARIABLE LLVM_VERSION
1794 OUTPUT_STRIP_TRAILING_WHITESPACE)
1795 execute_process(COMMAND ${LLVM_CONFIG} --prefix
1796 OUTPUT_VARIABLE LLVM_DIRECTORY
1797 OUTPUT_STRIP_TRAILING_WHITESPACE)
1798 execute_process(COMMAND ${LLVM_CONFIG} --libdir
1799 OUTPUT_VARIABLE LLVM_LIBPATH
1800 OUTPUT_STRIP_TRAILING_WHITESPACE)
1801 find_library(LLVM_LIBRARY
1802 NAMES LLVMAnalysis # first of a whole bunch of libs to get
1803 PATHS ${LLVM_LIBPATH})
1805 if(LLVM_LIBRARY AND LLVM_DIRECTORY AND LLVM_LIBPATH)
1807 # if static LLVM libraries were requested, use llvm-config to generate
1808 # the list of what libraries we need, and substitute that in the right
1809 # way for LLVM_LIBRARY.
1810 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
1811 OUTPUT_VARIABLE LLVM_LIBRARY
1812 OUTPUT_STRIP_TRAILING_WHITESPACE)
1813 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
1816 message(FATAL_ERROR "LLVM not found.")
1821 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1823 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
1824 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
1825 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
1826 # WARNING! depends on correct order of OSL libs linking
1827 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
1828 find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
1829 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
1831 if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
1834 message(STATUS "OSL not found")
1838 set(EXETYPE MACOSX_BUNDLE)
1840 set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
1841 set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
1842 if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
1843 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
1844 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
1845 if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
1846 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize -fvariable-expansion-in-unroller")
1847 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize -fvariable-expansion-in-unroller")
1850 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
1851 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
1854 if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
1855 # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
1856 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
1860 #-----------------------------------------------------------------------------
1864 if(NOT EXISTS "${LIBDIR}/")
1865 message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'")
1869 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
1870 message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
1874 if(NOT WITH_OPENIMAGEIO)
1875 message(FATAL_ERROR "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. Configure OIIO or disable WITH_CYCLES")
1878 message(FATAL_ERROR "Cycles requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
1883 message(FATAL_ERROR "Cycles OSL requires WITH_LLVM, the library may not have been found. Configure LLVM or disable WITH_CYCLES_OSL")
1888 if(WITH_INTERNATIONAL)
1890 message(FATAL_ERROR "Internationalization requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_INTERNATIONAL")
1894 # See TEST_SSE_SUPPORT() for how this is defined.
1896 if(WITH_RAYOPTIMIZATION)
1897 if(SUPPORT_SSE_BUILD)
1898 set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
1899 add_definitions(-D__SSE__ -D__MMX__)
1901 if(SUPPORT_SSE2_BUILD)
1902 set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
1903 add_definitions(-D__SSE2__)
1904 if(NOT SUPPORT_SSE_BUILD) # dont double up
1905 add_definitions(-D__MMX__)
1911 # set the endian define
1913 # for some reason this fails on msvc
1914 add_definitions(-D__LITTLE_ENDIAN__)
1916 # OSX-Note: as we do crosscompiling with specific set architecture,
1917 # endianess-detection and autosetting is counterproductive
1918 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
1920 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
1921 add_definitions(-D__LITTLE_ENDIAN__)
1922 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)
1923 add_definitions(-D__BIG_ENDIAN__)
1926 include(TestBigEndian)
1927 test_big_endian(_SYSTEM_BIG_ENDIAN)
1928 if(_SYSTEM_BIG_ENDIAN)
1929 add_definitions(-D__BIG_ENDIAN__)
1931 add_definitions(-D__LITTLE_ENDIAN__)
1933 unset(_SYSTEM_BIG_ENDIAN)
1937 if(WITH_IMAGE_OPENJPEG)
1938 if(WITH_SYSTEM_OPENJPEG)
1941 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
1942 add_definitions(-DOPJ_STATIC)
1946 if(WITH_IMAGE_REDCODE)
1947 set(REDCODE ${CMAKE_SOURCE_DIR}/extern)
1948 set(REDCODE_INC ${REDCODE})
1952 #-----------------------------------------------------------------------------
1954 find_package(OpenGL)
1955 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
1956 # unset(OPENGL_LIBRARIES CACHE) # not compat with older cmake
1957 # unset(OPENGL_xmesa_INCLUDE_DIR CACHE) # not compat with older cmake
1959 #-----------------------------------------------------------------------------
1962 find_package(OpenMP)
1964 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
1965 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
1967 if(APPLE AND ${CMAKE_GENERATOR} MATCHES "Xcode")
1968 set(CMAKE_XCODE_ATTRIBUTE_ENABLE_OPENMP_SUPPORT "YES")
1971 set(WITH_OPENMP OFF)
1980 #-----------------------------------------------------------------------------
1983 if(WITH_SYSTEM_GLEW)
1987 message(FATAL_ERROR "GLEW is required to build blender, install it or disable WITH_SYSTEM_GLEW")
1995 # set(GLEW_LIBRARY "") # unused
1996 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
2000 #-----------------------------------------------------------------------------
2003 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
2004 find_package(Bullet)
2005 if(NOT BULLET_FOUND)
2006 set(WITH_BULLET OFF)
2009 set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
2010 # set(BULLET_LIBRARIES "")
2013 #-----------------------------------------------------------------------------
2016 if(WITH_PYTHON_MODULE)
2017 add_definitions(-DPy_ENABLE_SHARED)
2020 #-----------------------------------------------------------------------------
2021 # Extra compile flags
2023 if(CMAKE_COMPILER_IS_GNUCC)
2025 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2026 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
2027 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement)
2028 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2029 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2030 # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
2031 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES -Wstrict-prototypes)
2032 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2033 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2034 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2035 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2036 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2037 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
2038 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
2039 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
2040 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self) # needs -Wuninitialized
2041 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull) # C only
2042 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2043 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2044 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
2046 # gcc 4.2 gives annoying warnings on every file with this
2047 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2048 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
2051 # versions before gcc4.6 give many BLI_math warnings
2052 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
2053 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS -Wredundant-decls)
2054 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
2057 # disable because it gives warnings for printf() & friends.
2058 # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
2061 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2064 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2065 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2066 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2067 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
2068 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self) # needs -Wuninitialized
2069 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2070 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2071 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
2073 # gcc 4.2 gives annoying warnings on every file with this
2074 if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2075 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
2078 # causes too many warnings
2080 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2081 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
2084 # flags to undo strict flags
2085 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
2086 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2089 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2092 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
2094 # strange, clang complains these are not supported, but then yses them.
2095 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2096 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement)
2097 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2098 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE -Werror=return-type)
2099 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2100 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2101 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2102 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES -Wstrict-prototypes)
2103 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2104 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2106 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2107 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2108 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2109 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2110 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.
2111 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2112 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2114 # gives too many unfixable warnings
2115 # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS -Wunused-macros)
2116 # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS -Wunused-macros)
2118 # flags to undo strict flags
2119 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2120 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2122 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
2123 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
2124 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
2125 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
2126 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
2127 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
2128 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
2129 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
2131 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
2132 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
2133 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
2134 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2135 ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
2137 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
2139 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2140 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2141 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2143 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2144 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2145 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2147 # disable numbered, false positives
2148 set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
2149 set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
2153 # ensure python header is found since detection can fail, this could happen
2154 # with _any_ library but since we used a fixed python version this tends to
2155 # be most problematic.
2157 if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
2158 message(FATAL_ERROR "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
2159 "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
2160 "to a valid python include path. Containing "
2161 "Python.h for python version \"${PYTHON_VERSION}\"")
2164 if(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
2166 # -- disabled until we make numpy bundled with blender - campbell
2167 if((NOT ${PYTHON_NUMPY_PATH} STREQUAL "") AND (NOT ${PYTHON_NUMPY_PATH} MATCHES NOTFOUND))
2168 # if(NOT EXISTS "${PYTHON_NUMPY_PATH}/numpy")
2169 # message(WARNING "PYTHON_NUMPY_PATH is invalid, numpy not found in '${PYTHON_NUMPY_PATH}' "
2170 # "WITH_PYTHON_INSTALL_NUMPY option will be ignored when installing python")
2171 # set(WITH_PYTHON_INSTALL_NUMPY OFF)
2173 # not set, so initialize
2175 string(REPLACE "." ";" _PY_VER_SPLIT "${PYTHON_VERSION}")
2176 list(GET _PY_VER_SPLIT 0 _PY_VER_MAJOR)
2179 unset(PYTHON_NUMPY_PATH CACHE)
2180 find_path(PYTHON_NUMPY_PATH
2184 "${PYTHON_LIBPATH}/python${PYTHON_VERSION}/"
2185 "${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/"
2192 if(NOT EXISTS "${PYTHON_NUMPY_PATH}")
2193 message(WARNING "'numpy' path could not be found in:\n"
2194 "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/site-packages/numpy', "
2195 "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/site-packages/numpy', "
2196 "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/dist-packages/numpy', "
2197 "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/dist-packages/numpy', "
2198 "WITH_PYTHON_INSTALL_NUMPY option will be ignored when installing python")
2199 set(WITH_PYTHON_INSTALL_NUMPY OFF)
2201 message(STATUS "numpy found at '${PYTHON_NUMPY_PATH}'")
2204 unset(_PY_VER_SPLIT)
2205 unset(_PY_VER_MAJOR)
2210 if(WITH_GCC_MUDFLAP)
2211 set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -fmudflapth -funwind-tables")
2212 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread -lmudflapth -rdynamic")
2213 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_MUDFLAP -Wno-error=mudflap)
2214 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_ERROR_MUDFLAP -Wno-error=mudflap)
2217 # Include warnings first, so its possible to disable them with user defined flags
2218 # eg: -Wno-uninitialized
2219 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
2220 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
2222 # defined above, platform spesific but shared names
2239 #-------------------------------------------------------------------------------
2242 # better not set includes here but this debugging option is off by default.
2243 if(WITH_CXX_GUARDEDALLOC)
2244 include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
2245 add_definitions(-DWITH_CXX_GUARDEDALLOC)
2248 if(WITH_ASSERT_ABORT)
2249 add_definitions(-DWITH_ASSERT_ABORT)
2252 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
2253 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
2255 #-----------------------------------------------------------------------------
2258 add_subdirectory(source)
2259 add_subdirectory(intern)
2260 add_subdirectory(extern)
2263 #-----------------------------------------------------------------------------
2264 # Blender Application
2266 add_subdirectory(source/creator)
2270 #-----------------------------------------------------------------------------
2273 add_subdirectory(source/blenderplayer)
2276 #-----------------------------------------------------------------------------
2277 # CPack for generating packages
2278 include(build_files/cmake/packaging.cmake)
2281 #-----------------------------------------------------------------------------
2282 # Print Final Configuration
2285 set(_config_msg "\n* Blender Configuration *")
2286 macro(info_cfg_option
2288 set(_msg " * ${_setting}")
2289 string(LENGTH "${_msg}" _len)
2290 while("32" GREATER "${_len}")
2291 set(_msg "${_msg} ")
2292 math(EXPR _len "${_len} + 1")
2295 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}")
2300 set(_config_msg "${_config_msg}\n\n ${_text}")
2305 message(STATUS "C Compiler: \"${CMAKE_C_COMPILER_ID}\"")
2306 message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
2308 info_cfg_text("Build Options:")
2309 info_cfg_option(WITH_GAMEENGINE)
2310 info_cfg_option(WITH_PLAYER)
2311 info_cfg_option(WITH_BULLET)
2312 info_cfg_option(WITH_IK_SOLVER)
2313 info_cfg_option(WITH_IK_ITASC)
2314 info_cfg_option(WITH_OPENCOLLADA)
2315 info_cfg_option(WITH_FFTW3)
2316 info_cfg_option(WITH_INTERNATIONAL)
2317 info_cfg_option(WITH_INPUT_NDOF)
2318 info_cfg_option(WITH_CYCLES)
2319 info_cfg_option(WITH_FREESTYLE)
2320 info_cfg_option(WITH_OPENCOLORIO)
2322 info_cfg_text("Compiler Options:")
2323 info_cfg_option(WITH_BUILDINFO)
2324 info_cfg_option(WITH_OPENMP)
2325 info_cfg_option(WITH_RAYOPTIMIZATION)
2327 info_cfg_text("System Options:")
2328 info_cfg_option(WITH_INSTALL_PORTABLE)
2329 info_cfg_option(WITH_X11_XF86VMODE)
2330 info_cfg_option(WITH_X11_XINPUT)
2331 info_cfg_option(WITH_MEM_JEMALLOC)
2332 info_cfg_option(WITH_MEM_VALGRIND)
2333 info_cfg_option(WITH_SYSTEM_GLEW)
2334 info_cfg_option(WITH_SYSTEM_OPENJPEG)
2336 info_cfg_text("Image Formats:")
2337 info_cfg_option(WITH_OPENIMAGEIO)
2338 info_cfg_option(WITH_IMAGE_CINEON)
2339 info_cfg_option(WITH_IMAGE_DDS)
2340 info_cfg_option(WITH_IMAGE_HDR)
2341 info_cfg_option(WITH_IMAGE_OPENEXR)
2342 info_cfg_option(WITH_IMAGE_OPENJPEG)
2343 info_cfg_option(WITH_IMAGE_REDCODE)
2344 info_cfg_option(WITH_IMAGE_TIFF)
2346 info_cfg_text("Audio:")
2347 info_cfg_option(WITH_OPENAL)
2348 info_cfg_option(WITH_SDL)
2349 info_cfg_option(WITH_JACK)
2350 info_cfg_option(WITH_JACK_DYNLOAD)
2351 info_cfg_option(WITH_CODEC_AVI)
2352 info_cfg_option(WITH_CODEC_FFMPEG)
2353 info_cfg_option(WITH_CODEC_SNDFILE)
2355 info_cfg_text("Compression:")
2356 info_cfg_option(WITH_LZMA)
2357 info_cfg_option(WITH_LZO)
2359 info_cfg_text("Python:")
2360 info_cfg_option(WITH_PYTHON_INSTALL)
2361 info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
2362 info_cfg_option(WITH_PYTHON_MODULE)
2363 info_cfg_option(WITH_PYTHON_SAFETY)
2365 info_cfg_option(WITH_PYTHON_FRAMEWORK)
2368 info_cfg_text("Modifiers:")
2369 info_cfg_option(WITH_MOD_BOOLEAN)
2370 info_cfg_option(WITH_MOD_REMESH)
2371 info_cfg_option(WITH_MOD_FLUID)
2372 info_cfg_option(WITH_MOD_OCEANSIM)
2374 info_cfg_text("Other:")
2375 info_cfg_option(WITH_OPENNL)
2378 message(STATUS "HAVE_STDBOOL_H = ${HAVE_STDBOOL_H}")
2382 message("${_config_msg}")