CMake changes
authorCampbell Barton <ideasman42@gmail.com>
Mon, 23 May 2011 14:56:14 +0000 (14:56 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 23 May 2011 14:56:14 +0000 (14:56 +0000)
- don't allow building if the LIBDIR is not found on mac/windows.
- by default use -O2 rather then -O3 for GCC release flags, was crashing some GCC versions and blender releases are supposed to use -O2.

CMakeLists.txt
build_files/cmake/macros.cmake

index 83e6705e4981238571c5623e177b1957e371bb41..a8fc301906f9a93266a8d2311210a8a078841eab 100644 (file)
@@ -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()
 
@@ -91,10 +77,6 @@ enable_testing()
 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
 
@@ -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)
index 14bed8874fa6b660dc583ca3ce2fa87a6ccd8cb3..45dc67f9ce607cf9d1dad81c0ddd8e946917b80a 100644 (file)
@@ -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()