From 6288ae2c379ed43348cf3d240376add5a9c70c0d Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 29 Apr 2021 15:25:31 +0200 Subject: [PATCH] Kernel: Add a CMake flag to enable LTO for the kernel --- CMakeLists.txt | 5 +++-- Kernel/CMakeLists.txt | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ba5cea3fcd..88bca2e1f9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ option(ENABLE_COMPILETIME_FORMAT_CHECK "Enable compiletime format string checks" option(ENABLE_PCI_IDS_DOWNLOAD "Enable download of the pci.ids database at build time" ON) option(BUILD_LAGOM "Build parts of the system targeting the host OS for fuzzing/testing" OFF) option(PRECOMPILE_COMMON_HEADERS "Precompile some common headers to speedup compilation" OFF) +option(ENABLE_KERNEL_LTO "Build the kernel with link-time optimization" OFF) add_custom_target(run COMMAND ${CMAKE_SOURCE_DIR}/Meta/run.sh @@ -124,9 +125,9 @@ else() set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) set(CMAKE_ASM_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}ld) - set(CMAKE_RANLIB ${TOOLCHAIN_PREFIX}ranlib) + set(CMAKE_RANLIB ${TOOLCHAIN_PREFIX}gcc-ranlib) set(CMAKE_STRIP ${TOOLCHAIN_PREFIX}strip) - set(CMAKE_AR ${TOOLCHAIN_PREFIX}ar) + set(CMAKE_AR ${TOOLCHAIN_PREFIX}gcc-ar) endif() foreach(lang ASM C CXX OBJC OBJCXX) diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 79e2ced26a4..c9576d472e4 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -361,6 +361,11 @@ else() endif() add_executable(Kernel ${SOURCES}) +if (ENABLE_KERNEL_LTO) + include(CheckIPOSupported) + check_ipo_supported() + set_property(TARGET Kernel PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) +endif() target_link_libraries(Kernel kernel_heap gcc stdc++) add_dependencies(Kernel boot kernel_heap) install(TARGETS Kernel RUNTIME DESTINATION boot)