From af7892c08b2d4984f4c93bb8c7cc07aec36b5055 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Thu, 22 Oct 2020 14:23:47 +0200 Subject: build: link time optimization for release builds Type: improvement Change-Id: I0e24f1d2ad5c7a11a8bd40125428f86aca867bec Signed-off-by: Damjan Marion --- src/CMakeLists.txt | 13 ++++++++++++- src/cmake/library.cmake | 9 ++++++++- src/vppinfra/CMakeLists.txt | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0d971fd8ebc..6fc243ca4d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,13 +11,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) +cmake_minimum_required(VERSION 3.10) set(CMAKE_C_COMPILER_NAMES clang-11 clang-10 clang-9 gcc-10 gcc-9 cc) project(vpp C) include(CheckCCompilerFlag) +include(CheckIPOSupported) include(cmake/misc.cmake) include(cmake/cpu.cmake) include(cmake/ccache.cmake) @@ -105,6 +106,16 @@ string(REPLACE ";" " " BUILD_TYPES "${BUILD_TYPES}") set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Build type - valid options are: ${BUILD_TYPES}") +############################################################################## +# link time optimizations +############################################################################## +if (CMAKE_BUILD_TYPE_UC STREQUAL "RELEASE") + check_ipo_supported(RESULT _result) + if (_result) + option(VPP_USE_LTO "Link time optimization of release binaries" ON) + endif() +endif() + ############################################################################## # sanitizers ############################################################################## diff --git a/src/cmake/library.cmake b/src/cmake/library.cmake index 06248a57aa3..a5b6c76d2d1 100644 --- a/src/cmake/library.cmake +++ b/src/cmake/library.cmake @@ -13,7 +13,7 @@ macro(add_vpp_library lib) cmake_parse_arguments(ARG - "" + "LTO" "COMPONENT" "SOURCES;MULTIARCH_SOURCES;API_FILES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS" ${ARGN} @@ -38,6 +38,13 @@ macro(add_vpp_library lib) COMPONENT ${ARG_COMPONENT} ) + if (ARG_LTO AND VPP_USE_LTO) + set_property(TARGET ${lib} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) + target_compile_options (${lib} PRIVATE "-ffunction-sections") + target_compile_options (${lib} PRIVATE "-fdata-sections") + target_link_libraries (${lib} "-Wl,--gc-sections") + endif() + if(ARG_MULTIARCH_SOURCES) vpp_library_set_multiarch_sources(${lib} "${ARG_DEPENDS}" ${ARG_MULTIARCH_SOURCES}) endif() diff --git a/src/vppinfra/CMakeLists.txt b/src/vppinfra/CMakeLists.txt index e0ae662e4ba..a670181732e 100644 --- a/src/vppinfra/CMakeLists.txt +++ b/src/vppinfra/CMakeLists.txt @@ -198,6 +198,7 @@ add_vpp_library(vppinfra LINK_LIBRARIES m INSTALL_HEADERS ${VPPINFRA_HEADERS} COMPONENT libvppinfra + LTO ) ############################################################################## -- cgit 1.2.3-korg