diff --git a/CMakeLists.txt b/CMakeLists.txt index 293b109191bf..a509d4c9c1ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,20 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) # use our own version of FindBoost.cmake and other Find* scripts list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +# function to remove a flag from a variable +function(RemoveFlag VAR SCOPE FLAG DOCSTRING) + MESSAGE("Removing ${FLAG} flag from ${VAR}") + separate_arguments(${VAR}) + list(REMOVE_ITEM ${VAR} ${FLAG}) + string(REPLACE ";" " " ${VAR} "${${VAR}}") + + if("${SCOPE}" STREQUAL "CACHE") + set(${VAR} "${${VAR}}" CACHE STRING "${DOCSTRING}" FORCE) + elseif("${SCOPE}" STREQUAL "SCRIPT") + set(${VAR} "${${VAR}}" PARENT_SCOPE) + endif() +endfunction() + # # Options # @@ -486,28 +500,15 @@ endif(X11_FOUND) add_definitions(-DLOCALEDIR="${LOCALEDIR}") -# -NDEBUG is automatically added to all release build types, so manually remove -# this define from the related variables -MESSAGE ("removing NDEBUG flag from CMAKE_CXX_FLAGS_RELWITHDEBINFO") -separate_arguments(CMAKE_CXX_FLAGS_RELWITHDEBINFO) -list(REMOVE_ITEM CMAKE_CXX_FLAGS_RELWITHDEBINFO "-DNDEBUG") -string(REPLACE ";" " " CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" CACHE STRING "removed NDEBUG flag" FORCE) -MESSAGE ("removing NDEBUG flag from CMAKE_C_FLAGS_RELWITHDEBINFO") -separate_arguments(CMAKE_C_FLAGS_RELWITHDEBINFO) -list(REMOVE_ITEM CMAKE_C_FLAGS_RELWITHDEBINFO "-DNDEBUG") -string(REPLACE ";" " " CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}" CACHE STRING "removed NDEBUG flag" FORCE) -MESSAGE ("removing NDEBUG flag from CMAKE_CXX_FLAGS_MINSIZEREL") -separate_arguments(CMAKE_CXX_FLAGS_MINSIZEREL) -list(REMOVE_ITEM CMAKE_CXX_FLAGS_MINSIZEREL "-DNDEBUG") -string(REPLACE ";" " " CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") -set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}" CACHE STRING "removed NDEBUG flag" FORCE) -MESSAGE ("removing NDEBUG flag from CMAKE_C_FLAGS_MINSIZEREL") -separate_arguments(CMAKE_C_FLAGS_MINSIZEREL) -list(REMOVE_ITEM CMAKE_C_FLAGS_MINSIZEREL "-DNDEBUG") -string(REPLACE ";" " " CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") -set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}" CACHE STRING "removed NDEBUG flag" FORCE) +# -DNDEBUG is automatically added to all release build types, so manually remove this define from the related variables +RemoveFlag(CMAKE_CXX_FLAGS_RELWITHDEBINFO CACHE "-DNDEBUG" "Default C++ flags for RelWithDebInfo") +RemoveFlag(CMAKE_C_FLAGS_RELWITHDEBINFO CACHE "-DNDEBUG" "Default C flags for RelWithDebInfo") +RemoveFlag(CMAKE_CXX_FLAGS_MINSIZEREL CACHE "-DNDEBUG" "Default C++ flags for MinSizeRel") +RemoveFlag(CMAKE_C_FLAGS_MINSIZEREL CACHE "-DNDEBUG" "Default C flags for MinSizeRel") + +# -rdynamic is automatically added, but we don't need it, and it increases the executable size +RemoveFlag(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS SCRIPT "-rdynamic" "") +RemoveFlag(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS SCRIPT "-rdynamic" "") # # # Start determining options for Release build