From a5de2117688460e0be461d94793b2634d34aeeec Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Tue, 31 May 2022 22:33:34 +0200 Subject: [PATCH] cmake: Add Link-Time Optimization option if supported --- CMakeLists.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ca5052..947601a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,6 +192,7 @@ set(CMAKE_MODULE_PATH # Include include("util") # CacheClear, CacheSet include("DownloadProject") # DownloadProject +include("CheckIPOSupported") # check_ipo_supported ################################################################################ # Platform Setup @@ -261,6 +262,8 @@ if(FOUND GREATER -1) set(D_PLATFORM_ARCH_ITANIUM ON) endif() +check_ipo_supported(RESULT D_HAS_IPO) + set(D_PLATFORM_INSTR ${ARCH_INST}) set(D_PLATFORM_ARCH ${ARCH_INST}) message(STATUS "${LOGPREFIX} Taget is ${D_PLATFORM_BITS}bit ${ARCH_INST} with a pointer size of ${D_PLATFORM_BITS_PTR}bit.") @@ -311,6 +314,9 @@ set(${PREFIX}ENABLE_CLANG ON CACHE BOOL "Enable Clang integration for supported set(${PREFIX}ENABLE_CODESIGN OFF CACHE BOOL "Enable Code Signing integration for supported environments.") set(${PREFIX}ENABLE_PROFILING OFF CACHE BOOL "Enable CPU and GPU performance tracking, which has a non-zero overhead at all times. Do not enable this for release builds.") +## Compile/Link Related +set(${PREFIX}ENABLE_LTO ${D_HAS_IPO} CACHE BOOL "Enable Link Time Optimization for faster and smaller binaries.") + # Installation / Packaging if(STANDALONE) set(STRUCTURE_UNIFIED CACHE BOOL "Install for use in a Plugin Manager") @@ -1913,6 +1919,11 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_INCLUDE_DIRS}) target_compile_definitions(${PROJECT_NAME} PRIVATE ${PROJECT_DEFINITIONS}) target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBRARIES}) +# Always generate position independent code. +set_target_properties(${PROJECT_NAME} PROPERTIES + POSITION_INDEPENDENT_CODE ON +) + # Set C++ Standard and Extensions set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17 @@ -1920,6 +1931,13 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF ) +# Link-Time/Interprocedural Optimization +if(${PREFIX}ENABLE_LTO) + set_target_properties(${PROJECT_NAME} PROPERTIES + INTERPROCEDURAL_OPTIMIZATION ON + ) +endif() + # C/C++ Compiler Adjustments if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) # MSVC/ClangCL