cmake: Add Link-Time Optimization option if supported
This commit is contained in:
parent
583ba282f8
commit
a5de211768
|
|
@ -192,6 +192,7 @@ set(CMAKE_MODULE_PATH
|
||||||
# Include
|
# Include
|
||||||
include("util") # CacheClear, CacheSet
|
include("util") # CacheClear, CacheSet
|
||||||
include("DownloadProject") # DownloadProject
|
include("DownloadProject") # DownloadProject
|
||||||
|
include("CheckIPOSupported") # check_ipo_supported
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Platform Setup
|
# Platform Setup
|
||||||
|
|
@ -261,6 +262,8 @@ if(FOUND GREATER -1)
|
||||||
set(D_PLATFORM_ARCH_ITANIUM ON)
|
set(D_PLATFORM_ARCH_ITANIUM ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
check_ipo_supported(RESULT D_HAS_IPO)
|
||||||
|
|
||||||
set(D_PLATFORM_INSTR ${ARCH_INST})
|
set(D_PLATFORM_INSTR ${ARCH_INST})
|
||||||
set(D_PLATFORM_ARCH ${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.")
|
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_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.")
|
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
|
# Installation / Packaging
|
||||||
if(STANDALONE)
|
if(STANDALONE)
|
||||||
set(STRUCTURE_UNIFIED CACHE BOOL "Install for use in a Plugin Manager")
|
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_compile_definitions(${PROJECT_NAME} PRIVATE ${PROJECT_DEFINITIONS})
|
||||||
target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBRARIES})
|
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 C++ Standard and Extensions
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
CXX_STANDARD 17
|
CXX_STANDARD 17
|
||||||
|
|
@ -1920,6 +1931,13 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
CXX_EXTENSIONS OFF
|
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
|
# C/C++ Compiler Adjustments
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
|
||||||
# MSVC/ClangCL
|
# MSVC/ClangCL
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue