mirror of
https://github.com/OpenRCT2/OpenRCT2.git
synced 2025-01-22 10:21:57 -05:00
34 lines
1.4 KiB
CMake
34 lines
1.4 KiB
CMake
# Helpers for inter-procedural optimizations (IPO)
|
|
|
|
option(DISABLE_IPO "Disable IPO in supported release builds." OFF)
|
|
|
|
# Enabled IPO for a LIST of CMake build types.
|
|
# Provides IPO_BUILD_ENABLED to the parent scope.
|
|
# Make sure to supply the build types in UPPER CASE
|
|
function(ipo_enable IPO_ENABLED_BUILDS)
|
|
include(CheckIPOSupported)
|
|
check_ipo_supported(RESULT IPO_SUPPORTED OUTPUT IPO_LOG)
|
|
|
|
set(IPO_BUILD_ENABLED OFF PARENT_SCOPE)
|
|
string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER)
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
message(STATUS "CMAKE_BUILD_TYPE not explicitly set. Not enabling IPO.")
|
|
elseif(IPO_SUPPORTED AND ${CMAKE_BUILD_TYPE_UPPER} IN_LIST IPO_ENABLED_BUILDS)
|
|
if(NOT DISABLE_IPO)
|
|
message(STATUS "IPO supported and enabled in ${CMAKE_BUILD_TYPE}.")
|
|
set(IPO_BUILD_ENABLED ON PARENT_SCOPE)
|
|
else()
|
|
message(STATUS "IPO explicitly disabled.")
|
|
endif()
|
|
elseif(NOT IPO_SUPPORTED AND ${CMAKE_BUILD_TYPE_UPPER} IN_LIST IPO_ENABLED_BUILDS)
|
|
message(STATUS "IPO not supported: ${IPO_LOG}.")
|
|
endif()
|
|
endfunction()
|
|
|
|
# Sets appropriate IPO properties on target _target
|
|
# if IPO is supported and enabled for the current build.
|
|
function(ipo_set_target_properties _target)
|
|
if(IPO_BUILD_ENABLED)
|
|
set_property(TARGET ${_target} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
endif()
|
|
endfunction()
|