mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
CMake: improve linker performance
Improve linker performance by either enabling GL and LTGC on certain projects at the same time, enabling it for all projects, or disabling it all together
This commit is contained in:
parent
f8107622ff
commit
1c4419cc6d
@ -51,14 +51,8 @@ macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME WARNINGS_AS_ERRO
|
||||
add_library( ${PROJECT_NAME} )
|
||||
elseif( ${MODULE_TYPE} STREQUAL "shared_lib" )
|
||||
add_library( ${PROJECT_NAME} SHARED )
|
||||
target_link_options( ${PROJECT_NAME} PRIVATE
|
||||
"$<$<CONFIG:Release>:/LTCG>"
|
||||
)
|
||||
elseif( ${MODULE_TYPE} STREQUAL "exe" )
|
||||
add_executable( ${PROJECT_NAME} )
|
||||
target_link_options( ${PROJECT_NAME} PRIVATE
|
||||
"$<$<CONFIG:Release>:/LTCG>"
|
||||
)
|
||||
else()
|
||||
message( FATAL_ERROR "Invalid module type: ${MODULE_TYPE}; expected 'lib', 'shared_lib', or 'exe'." )
|
||||
endif()
|
||||
@ -80,6 +74,7 @@ macro( add_module MODULE_TYPE MODULE_NAME REUSE_PCH FOLDER_NAME WARNINGS_AS_ERRO
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/Ot>
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/GS->
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/Gy>
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/GT>
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/fp:fast>
|
||||
)
|
||||
endif()
|
||||
@ -101,12 +96,13 @@ macro( define_compiler_variables )
|
||||
endmacro()
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Apply whole program optimization for this target in release ( !slow! )
|
||||
# Apply whole program optimization for this target in release and profile ( !slow! )
|
||||
# -----------------------------------------------------------------------------
|
||||
macro( whole_program_optimization )
|
||||
target_compile_options( ${PROJECT_NAME} PRIVATE
|
||||
$<$<CONFIG:Release>:/GL>
|
||||
)
|
||||
if( ${OPTION_LTCG_MODE} STREQUAL "ON" )
|
||||
set_property( TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||
set_property( TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION_PROFILE TRUE)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
@ -21,7 +21,13 @@ macro( apply_project_settings )
|
||||
|
||||
# Some thirdparty code have Warnings as Errors disabled; this option won't override those.
|
||||
option( OPTION_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" ON )
|
||||
option( OPTION_LTCG "Enable link-time code generation (significantly increases compile times)" OFF )
|
||||
|
||||
set( OPTION_LTCG_MODE "OFF" CACHE STRING "Enables link-time code generation (significantly increases compile times)" )
|
||||
set_property( CACHE OPTION_LTCG_MODE PROPERTY STRINGS
|
||||
"OFF"
|
||||
"ON"
|
||||
"ALL"
|
||||
)
|
||||
|
||||
option( OPTION_CERTAIN "This build is certain; debug statements (such as DevMsg(...)) will NOT be compiled" OFF )
|
||||
option( OPTION_RETAIL "This build is retail; enable this among with 'OPTION_CERTAIN' to form a release build" OFF )
|
||||
@ -74,11 +80,9 @@ macro( apply_project_settings )
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/EHsc>
|
||||
)
|
||||
|
||||
if( ${OPTION_LTCG} )
|
||||
add_compile_options(
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Profile>>:/GL>
|
||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/GL>
|
||||
)
|
||||
if( ${OPTION_LTCG_MODE} STREQUAL "ALL" )
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_PROFILE ON)
|
||||
endif()
|
||||
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||
|
Loading…
x
Reference in New Issue
Block a user