1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
include(TestCXXAcceptsFlag)
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
# try to use compiler flag -std=c++11
MACRO(AddSTDFlag FLAG)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG} ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG} ")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAG} ")
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${FLAG} ")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAG} ")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${FLAG} ")
set(CXX_STD0X_FLAGS "${FLAG}" )
ENDMACRO(AddSTDFlag FLAG)
# try to use compiler flag -std=c++11
set(CXX_STD0X_FLAGS FALSE)
set(i 0)
foreach(f -std=gnu++11 -std=c++11 -std=c++0x)
MATH(EXPR i "${i}+1") #cmake has working unset :-|
CHECK_CXX_ACCEPTS_FLAG("${f}" ACCEPTSFLAG${i})
if(${ACCEPTSFLAG${i}} AND NOT CXX_STD0X_FLAGS)
message(STATUS "Using ${f}")
AddSTDFlag("${f}")
set(CXX_STD0X_FLAGS TRUE)
endif()
endforeach()
if(NOT CXX_STD0X_FLAGS)
message(FATAL_ERROR "you need a c++11 compatible compiler")
endif()
If(NOT DEFINED LTO_FLAGS)
Set(LTO_FLAGS "")
Set(LTO FALSE CACHE BOOL "Link Time Optimizations (LTO)")
If (LTO)
CHECK_CXX_ACCEPTS_FLAG("-flto" HAS_LTO_FLAG)
If (HAS_LTO_FLAG)
Set(LTO_FLAGS "${LTO_FLAGS} -flto")
Else (HAS_LTO_FLAG)
Set(LTO_FLAGS "${LTO_FLAGS} -flto")
EndIf (HAS_LTO_FLAG)
EndIf (LTO)
Set(LTO_WHOPR FALSE CACHE BOOL "Link Time Optimizations (LTO) - Whole program optimizer (WHOPR)")
If (LTO_WHOPR)
CHECK_CXX_ACCEPTS_FLAG("-fwhopr" HAS_LTO_WHOPR_FLAG)
If (HAS_LTO_WHOPR_FLAG)
Set(LTO_FLAGS "${LTO_FLAGS} -fwhopr")
EndIf (HAS_LTO_WHOPR_FLAG)
EndIf (LTO_WHOPR)
If (LTO AND LTO_WHOPR)
Message(FATAL_ERROR "LTO and LTO_WHOPR are mutually exclusive, please enable only one at a time." )
EndIf (LTO AND LTO_WHOPR)
EndIf (NOT DEFINED LTO_FLAGS)
# Add Link-Time-Optimization flags, if supported (GCC >= 4.5) and enabled
Set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LTO_FLAGS}")
Set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LTO_FLAGS}")
Set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LTO_FLAGS}")
|