diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 156 |
1 files changed, 70 insertions, 86 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 21efa668292..fcd9699aef3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,9 @@ if(NOT (${CMAKE_VERSION} VERSION_LESS 3.0)) endif() if(NOT EXECUTABLE_OUTPUT_PATH) - set(FIRST_RUN "TRUE") + set(FIRST_RUN TRUE) +else() + set(FIRST_RUN FALSE) endif() # this starts out unset @@ -71,7 +73,6 @@ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE NDEBU set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL NDEBUG) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO NDEBUG) - #----------------------------------------------------------------------------- # Set policy @@ -129,7 +130,7 @@ macro(option_defaults_init) set(${_var} ON) list(APPEND _init_vars "${_var}") endforeach() - unset(_INC) + unset(_var) endmacro() # remove from namespace @@ -197,11 +198,10 @@ option(WITH_PYTHON "Enable Embedded Python API (only disable for develop option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON) mark_as_advanced(WITH_PYTHON) # dont want people disabling this unless they really know what they are doing. mark_as_advanced(WITH_PYTHON_SECURITY) # some distributions see this as a security issue, rather than have them patch it, make a build option. -set(WITH_PYTHON_SECURITY ON CACHE BOOL "ON" FORCE) # temp force on. 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) mark_as_advanced(WITH_PYTHON_SAFETY) -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) +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) if(APPLE) option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF) endif() @@ -359,7 +359,7 @@ option(WITH_CYCLES_STANDALONE "Build cycles standalone application" OFF) option(WITH_CYCLES_STANDALONE_GUI "Build cycles standalone with GUI" OFF) option(WITH_CYCLES_OSL "Build Cycles with OSL support" ${_init_CYCLES_OSL}) option(WITH_CYCLES_CUDA_BINARIES "Build cycles CUDA binaries" OFF) -set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_50 CACHE STRING "CUDA architectures to build binaries for") +set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_50 sm_52 CACHE STRING "CUDA architectures to build binaries for") mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH) unset(PLATFORM_DEFAULT) option(WITH_CYCLES_LOGGING "Build cycles with logging support" ON) @@ -395,6 +395,7 @@ option(WITH_BOOST "Enable features depending on boost" ON) # Unit testsing option(WITH_GTESTS "Enable GTest unit testing" OFF) +option(WITH_TESTS_PERFORMANCE "Enable performance tests" OFF) # Documentation @@ -448,6 +449,10 @@ endif() option(WITH_CPP11 "Build with C++11 standard enabled, for development use only!" OFF) mark_as_advanced(WITH_CPP11) +# Dependency graph +option(WITH_LEGACY_DEPSGRAPH "Build Blender with legacy dependency graph" ON) +mark_as_advanced(WITH_LEGACY_DEPSGRAPH) + # avoid using again option_defaults_clear() @@ -651,6 +656,13 @@ endif() # auto enable openimageio for cycles if(WITH_CYCLES) set(WITH_OPENIMAGEIO ON) + + # auto enable llvm for cycles_osl + if(WITH_CYCLES_OSL) + set(WITH_LLVM ON CACHE BOOL "" FORCE) + endif() +else() + set(WITH_CYCLES_OSL OFF) endif() # auto enable openimageio linking dependencies @@ -659,11 +671,6 @@ if(WITH_OPENIMAGEIO) set(WITH_IMAGE_TIFF ON) endif() -# auto enable llvm for cycles_osl -if(WITH_CYCLES_OSL) - set(WITH_LLVM ON CACHE BOOL "" FORCE) -endif() - # don't store paths to libs for portable distribution if(WITH_INSTALL_PORTABLE) set(CMAKE_SKIP_BUILD_RPATH TRUE) @@ -1058,75 +1065,18 @@ if(UNIX AND NOT APPLE) endif() endif() - # XXX Maybe most of this section should go into an llvm module? if(WITH_LLVM) + find_package_wrapper(LLVM) - if(LLVM_ROOT_DIR) - if(NOT DEFINED LLVM_VERSION) - find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION} HINTS ${LLVM_ROOT_DIR}/bin NO_CMAKE_PATH) - endif() - if(NOT LLVM_CONFIG) - find_program(LLVM_CONFIG llvm-config HINTS ${LLVM_ROOT_DIR}/bin NO_CMAKE_PATH) - endif() - else() - if(NOT DEFINED LLVM_VERSION) - find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION}) - endif() - if(NOT LLVM_CONFIG) - find_program(LLVM_CONFIG llvm-config) - endif() - endif() - - if(NOT DEFINED LLVM_VERSION) - execute_process(COMMAND ${LLVM_CONFIG} --version - OUTPUT_VARIABLE LLVM_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(LLVM_VERSION ${LLVM_VERSION} CACHE STRING "Version of LLVM to use") - endif() - if(NOT DEFINED LLVM_ROOT_DIR) - execute_process(COMMAND ${LLVM_CONFIG} --prefix - OUTPUT_VARIABLE LLVM_ROOT_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation") - endif() - if(NOT DEFINED LLVM_LIBPATH) - execute_process(COMMAND ${LLVM_CONFIG} --libdir - OUTPUT_VARIABLE LLVM_LIBPATH - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(LLVM_LIBPATH ${LLVM_LIBPATH} CACHE PATH "Path to the LLVM library path") - mark_as_advanced(LLVM_LIBPATH) + if(NOT LLVM_FOUND) + set(WITH_LLVM OFF) + message(STATUS "LLVM not found") endif() - - if(LLVM_STATIC) - find_library(LLVM_LIBRARY - NAMES LLVMAnalysis # first of a whole bunch of libs to get - PATHS ${LLVM_LIBPATH}) - else() - find_library(LLVM_LIBRARY - NAMES LLVM-${LLVM_VERSION} - PATHS ${LLVM_LIBPATH}) - endif() - - - if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH) - if(LLVM_STATIC) - # if static LLVM libraries were requested, use llvm-config to generate - # the list of what libraries we need, and substitute that in the right - # way for LLVM_LIBRARY. - execute_process(COMMAND ${LLVM_CONFIG} --libfiles - OUTPUT_VARIABLE LLVM_LIBRARY - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE " " ";" LLVM_LIBRARY "${LLVM_LIBRARY}") - endif() - else() - message(FATAL_ERROR "LLVM not found.") - endif() - endif() if(WITH_LLVM OR WITH_SDL_DYNLOAD) # Fix for conflict with Mesa llvmpipe - set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/source/creator/blender.map") + set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'") endif() # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed @@ -1155,6 +1105,25 @@ if(UNIX AND NOT APPLE) # GNU Compiler if(CMAKE_COMPILER_IS_GNUCC) set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") + + if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "5.0") + # GCC5 uses gnu11, until we update, force c89 + # though some c11 features can still be used. + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu89") + endif() + + # use ld.gold linker if available, could make optional + execute_process( + COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version + ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) + if ("${LD_VERSION}" MATCHES "GNU gold") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold") + else () + message(INFO "GNU gold linker isn't available, using the default system linker.") + endif () + unset(LD_VERSION) + # CLang is the same as GCC for now. elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") @@ -1879,14 +1848,14 @@ elseif(APPLE) if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK) # normally cached but not since we include them with blender set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m") - # set(PYTHON_BINARY "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet + # set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet set(PYTHON_LIBRARY python${PYTHON_VERSION}m) set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}") # set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled else() # module must be compiled against Python framework set(PYTHON_INCLUDE_DIR "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/include/python${PYTHON_VERSION}m") - set(PYTHON_BINARY "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}") + set(PYTHON_EXECUTABLE "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}") #set(PYTHON_LIBRARY python${PYTHON_VERSION}) set(PYTHON_LIBPATH "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m") #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python") # won't build with this enabled @@ -2523,6 +2492,7 @@ if(CMAKE_COMPILER_IS_GNUCC) ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs) ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero) ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits) + ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness) # gcc 4.2 gives annoying warnings on every file with this if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3") @@ -2550,6 +2520,16 @@ if(CMAKE_COMPILER_IS_GNUCC) ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs) ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero) ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE -Werror=return-type) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness) # gcc 4.2 gives annoying warnings on every file with this if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3") @@ -2782,25 +2762,29 @@ include(build_files/cmake/packaging.cmake) # Print Final Configuration if(FIRST_RUN) - set(_config_msg "\n* Blender Configuration *") - macro(info_cfg_option - _setting) - set(_msg " * ${_setting}") + + set(_config_msg "\nBlender Configuration\n=====================") + + function(info_cfg_option + _setting + ) + + set(_msg " - ${_setting}") string(LENGTH "${_msg}" _len) while("32" GREATER "${_len}") set(_msg "${_msg} ") math(EXPR _len "${_len} + 1") endwhile() - set(_config_msg "${_config_msg}\n${_msg}${${_setting}}") - endmacro() - - macro(info_cfg_text - _text) - set(_config_msg "${_config_msg}\n\n ${_text}") + set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE) + endfunction() + function(info_cfg_text + _text + ) - endmacro() + set(_config_msg "${_config_msg}\n\n ${_text}" PARENT_SCOPE) + endfunction() message(STATUS "C Compiler: \"${CMAKE_C_COMPILER_ID}\"") message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"") |