Files
scylladb/cmake/enable_lto.cmake
Kefu Chai 4154789670 build: cmake: add "Scylla_ENABLE_LTO" option
add an option named "Scylla_ENABLE_LTO", which is off by default.
if it is on, build the whole tree with ThinLTO enabled.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
2024-12-27 16:16:04 +08:00

31 lines
1.0 KiB
CMake

#
# Copyright 2024-present ScyllaDB
#
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
#
function(enable_lto name)
get_target_property(type ${name} TYPE)
if(type MATCHES "OBJECT_LIBRARY|STATIC_LIBRARY|SHARED_LIBRARY|EXECUTABLE")
target_compile_options(${name} PRIVATE
$<$<CONFIG:RelWithDebInfo>:-ffat-lto-objects>)
set_property(TARGET ${name} PROPERTY
INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO ON)
if(type MATCHES "SHARED_LIBRARY|EXECUTABLE")
target_link_options(${name}
PRIVATE $<$<CONFIG:RelWithDebInfo>:-ffat-lto-objects>)
endif()
elseif(type STREQUAL "INTERFACE_LIBRARY")
if (name MATCHES "^scylla_(.*)$")
# Special handling for scylla_* libraries with whole archive linking
set(library "${CMAKE_MATCH_1}")
enable_lto(${library})
# For non-scylla_* INTERFACE libraries, we don't compile them,
# hence no need to set the LTO compile options or property
endif()
else()
message(FATAL_ERROR "Unsupported TYPE: ${name}:${type}")
endif()
endfunction()