From 5ca58eda09757118e8f847174d13bc3de59f614d Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Thu, 22 Aug 2019 07:30:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=B2=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B8=20=D1=84=D0=BB=D0=B0=D0=B3=D0=B0=20-fl?= =?UTF-8?q?to?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMLibCompilerFlags.cmake | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/CMLibCompilerFlags.cmake b/CMLibCompilerFlags.cmake index e060008..24db8a4 100644 --- a/CMLibCompilerFlags.cmake +++ b/CMLibCompilerFlags.cmake @@ -88,11 +88,26 @@ if(CMAKE_CXX_COMPILER_IS_CLANG endif() if(CMAKE_BUILD_TYPE STREQUAL "Release") - check_enable_cxx_flag(-flto) - if(CMAKE_CXX_COMPILER_IS_GCC - AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8") - # Doesn't work with GCC 4.7.2 in Astra Linux 1.5 - check_enable_cxx_flag(-fno-fat-lto-objects) + check_cxx_compiler_flag(-flto CXX_HAS_LTO_FLAG) + check_cxx_compiler_flag(-fno-fat-lto-objects CXX_HAS_NO_FAT_LTO_FLAG) + if(CMAKE_CXX_COMPILER_IS_GCC AND CXX_HAS_LTO_FLAG) + find_program(CMAKE_GCC_AR NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_TOOLCHAIN_SUFFIX} HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + find_program(CMAKE_GCC_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + find_program(CMAKE_GCC_RANLIB NAMES ${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + if(CMAKE_GCC_AR AND CMAKE_GCC_NM AND CMAKE_GCC_RANLIB) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto") + if(CXX_HAS_NO_FAT_LTO_FLAG) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-fat-lto-objects") + endif() + set(CMAKE_AR "${CMAKE_GCC_AR}") + set(CMAKE_NM "${CMAKE_GCC_NM}") + set(CMAKE_RANLIB "${CMAKE_GCC_RANLIB}") + else() + message(WARNING "GCC indicates LTO support, but binutils wrappers could not be found. Disabling LTO.") + endif() + else() + check_enable_compiler_flag(-flto) + check_enable_compiler_flag(-fno-fat-lto-objects) endif() endif() endif()