diff --git a/src/cmake/Macros.cmake b/src/cmake/Macros.cmake index 4cc1011a..7878f713 100644 --- a/src/cmake/Macros.cmake +++ b/src/cmake/Macros.cmake @@ -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 - "$<$:/LTCG>" - ) elseif( ${MODULE_TYPE} STREQUAL "exe" ) add_executable( ${PROJECT_NAME} ) - target_link_options( ${PROJECT_NAME} PRIVATE - "$<$:/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 $<$,$>:/Ot> $<$,$>:/GS-> $<$,$>:/Gy> + $<$,$>:/GT> $<$,$>:/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 - $<$:/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() # ----------------------------------------------------------------------------- diff --git a/src/cmake/Options.cmake b/src/cmake/Options.cmake index c2ccb067..56779770 100644 --- a/src/cmake/Options.cmake +++ b/src/cmake/Options.cmake @@ -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 ) $<$,$>:/EHsc> ) - if( ${OPTION_LTCG} ) - add_compile_options( - $<$,$>:/GL> - $<$,$>:/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