diff options
-rw-r--r-- | CMakeLists.txt | 40 | ||||
-rw-r--r-- | build_files/cmake/macros.cmake | 68 |
2 files changed, 82 insertions, 26 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 83e6705e498..a8fc301906f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,33 +55,19 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/") # quiet output for Makefiles, 'make -s' helps too # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF) -# ignore system set flag, use our own -# must be before project(...) -# if the user wants to add their own its ok after first run. -if(DEFINED CMAKE_C_STANDARD_LIBRARIES) - set(_reset_standard_libraries OFF) -else() - set(_reset_standard_libraries ON) -endif() +#----------------------------------------------------------------------------- +# Load some macros. +include(build_files/cmake/macros.cmake) -project(Blender) +#----------------------------------------------------------------------------- +# Initialize project. +blender_project_hack_pre() -if (_reset_standard_libraries) - # Must come after project(...) - # - # MINGW workaround for -ladvapi32 being included which surprisingly causes - # string formatting of floats, eg: printf("%.*f", 3, value). to crash blender - # with a meaningless stack trace. by overriding this flag we ensure we only - # have libs we define and that cmake & scons builds match. - set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) - set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) - mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES) - mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES) -endif() -unset(_reset_standard_libraries) +project(Blender) +blender_project_hack_post() enable_testing() @@ -92,10 +78,6 @@ set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE ) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE ) #----------------------------------------------------------------------------- -# Load some macros. -include(build_files/cmake/macros.cmake) - -#----------------------------------------------------------------------------- # Set default config options get_blender_version() @@ -984,6 +966,12 @@ endif() #----------------------------------------------------------------------------- # Common. +if(APPLE OR WIN32) + if(NOT IS_DIRECTORY "${LIBDIR}") + message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'") + endif() +endif() + if(WITH_RAYOPTIMIZATION) if(CMAKE_COMPILER_IS_GNUCC) if(SUPPORT_SSE_BUILD) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 14bed8874fa..45dc67f9ce6 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -388,3 +388,71 @@ macro(get_blender_version) # message(STATUS "Version (Internal): ${BLENDER_VERSION}.${BLENDER_SUBVERSION}, Version (external): ${BLENDER_VERSION}${BLENDER_VERSION_CHAR}-${BLENDER_VERSION_CYCLE}") endmacro() + + +# hacks to override initial project settings +# these macros must be called directly before/after project(Blender) +macro(blender_project_hack_pre) + # ---------------- + # MINGW HACK START + # ignore system set flag, use our own + # must be before project(...) + # if the user wants to add their own its ok after first run. + if(DEFINED CMAKE_C_STANDARD_LIBRARIES) + set(_reset_standard_libraries OFF) + else() + set(_reset_standard_libraries ON) + endif() + + # ------------------ + # GCC -O3 HACK START + # needed because O3 can cause problems but + # allow the builder to set O3 manually after. + if(DEFINED CMAKE_C_FLAGS_RELEASE) + set(_reset_standard_cflags_rel OFF) + else() + set(_reset_standard_cflags_rel ON) + endif() + if(DEFINED CMAKE_CXX_FLAGS_RELEASE) + set(_reset_standard_cxxflags_rel OFF) + else() + set(_reset_standard_cxxflags_rel ON) + endif() +endmacro() + + +macro(blender_project_hack_post) + # -------------- + # MINGW HACK END + if (_reset_standard_libraries) + # Must come after project(...) + # + # MINGW workaround for -ladvapi32 being included which surprisingly causes + # string formatting of floats, eg: printf("%.*f", 3, value). to crash blender + # with a meaningless stack trace. by overriding this flag we ensure we only + # have libs we define and that cmake & scons builds match. + set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) + set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) + mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES) + mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES) + endif() + unset(_reset_standard_libraries) + + + # ---------------- + # GCC -O3 HACK END + if(_reset_standard_cflags_rel) + string(REGEX REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE) + mark_as_advanced(CMAKE_C_FLAGS_RELEASE) + endif() + + if(_reset_standard_cxxflags_rel) + string(REGEX REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE) + mark_as_advanced(CMAKE_CXX_FLAGS_RELEASE) + endif() + + unset(_reset_standard_cflags_rel) + unset(_reset_standard_cxxflags_rel) +endmacro() |