cmake: Enable interprocedural optimization for Release configuration

The built-in CMake variable will set the appropriate compiler flags
for supported compilers and compiler versions.
This commit is contained in:
PatTheMav
2024-10-12 17:55:38 +02:00
committed by Ryan Foster
parent 2fe0385d13
commit 07176822ad
2 changed files with 43 additions and 5 deletions

View File

@@ -85,3 +85,41 @@ endif()
if(NOT DEFINED CMAKE_COMPILE_WARNING_AS_ERROR)
set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
endif()
# Enable interprocedural optimization
message(STATUS "Checking for interprocedural optimization support")
if(NOT DEFINED HAS_INTERPROCEDURAL_OPTIMIZATION)
include(CheckIPOSupported)
check_ipo_supported(RESULT _ipo_result OUTPUT _ipo_output)
set(
HAS_INTERPROCEDURAL_OPTIMIZATION
${_ipo_result}
CACHE BOOL
"Result of compiler check for interprocedural optimization"
FORCE
)
if(HAS_INTERPROCEDURAL_OPTIMIZATION)
message(STATUS "Checking for interprocedural optimization support - available")
else()
message(STATUS "Checking for interprocedural optimization support - unavailable")
endif()
mark_as_advanced(HAS_INTERPROCEDURAL_OPTIMIZATION)
unset(_ipo_result)
unset(_ipo_output)
endif()
if(HAS_INTERPROCEDURAL_OPTIMIZATION)
message(STATUS "Checking for interprocedural optimization support - enabled [Release, MinSizeRel]")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO OFF)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL ON)
else()
message(STATUS "Checking for interprocedural optimization support - disabled")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO OFF)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE OFF)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL OFF)
endif()

View File

@@ -73,7 +73,6 @@ add_compile_options(
"$<$<COMPILE_LANG_AND_ID:C,Clang>:${_obs_clang_c_options}>"
"$<$<COMPILE_LANG_AND_ID:CXX,Clang>:${_obs_clang_cxx_options}>"
$<$<NOT:$<CONFIG:Debug>>:/Gy>
$<$<NOT:$<CONFIG:Debug>>:/GL>
$<$<NOT:$<CONFIG:Debug>>:/Oi>
)
@@ -87,11 +86,12 @@ add_compile_definitions(
$<$<CONFIG:DEBUG>:_DEBUG>
)
# Visual Studio sets "/LTCG:INCREMENTAL" when "Whole Program Optimization" is enabled for a x86 or x64 target. To
# ensure "proper" link-time optimization, the LTCG flag has to be explicitly added here.
add_link_options(
$<$<NOT:$<CONFIG:Debug>>:/OPT:REF>
$<$<NOT:$<CONFIG:Debug>>:/OPT:ICF>
$<$<NOT:$<CONFIG:Debug>>:/LTCG>
$<$<NOT:$<CONFIG:Debug>>:/INCREMENTAL:NO>
$<$<OR:$<CONFIG:Release>,$<CONFIG:MinSizeRel>>:/LTCG>
$<$<OR:$<CONFIG:Release>,$<CONFIG:MinSizeRel>>:/OPT:REF>
$<$<OR:$<CONFIG:Release>,$<CONFIG:MinSizeRel>>:/OPT:ICF>
/DEBUG
/Brepro
)