From 954b27fa277c132f716584cc4265b46589cc5435 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Thu, 25 Jun 2020 11:30:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMLibCommonTargetProperties.cmake | 27 ++++++--------------------- CMLibCompiler.cmake | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/CMLibCommonTargetProperties.cmake b/CMLibCommonTargetProperties.cmake index a77b987..ac24f19 100644 --- a/CMLibCommonTargetProperties.cmake +++ b/CMLibCommonTargetProperties.cmake @@ -57,28 +57,13 @@ function(common_target_properties target) if(target_type STREQUAL "EXECUTABLE" AND CMAKE_BUILD_TYPE STREQUAL "Release") 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}" - "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar" HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) - find_program(CMAKE_GCC_NM NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm${_CMAKE_TOOLCHAIN_SUFFIX}" - "${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm" HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) - find_program( - CMAKE_GCC_RANLIB NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_TOOLCHAIN_SUFFIX}" - "${_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.") + if(CXX_HAS_LTO_FLAG) + target_compile_options(${target} PUBLIC "-flto") + set_target_properties(${target} PROPERTIES LINK_FLAGS_RELEASE "-flto") + if(CXX_HAS_NO_FAT_LTO_FLAG) + target_compile_options(${target} PUBLIC "-fno-fat-lto-objects") + set_target_properties(${target} PROPERTIES LINK_FLAGS_RELEASE "-fno-fat-lto-objects") endif() - else() - check_enable_compiler_flag(-flto) - check_enable_compiler_flag(-fno-fat-lto-objects) endif() endif() diff --git a/CMLibCompiler.cmake b/CMLibCompiler.cmake index 0c13007..ef40f45 100644 --- a/CMLibCompiler.cmake +++ b/CMLibCompiler.cmake @@ -19,3 +19,28 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_CXX_COMPILER_IS_MSVC ON) endif() + +# Предпочтительные пути к утилитам для компоновки +if(CMAKE_CXX_COMPILER_IS_GCC) + find_program( + CMAKE_GCC_AR NAMES "/usr/e2k-linux/bin/ar" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_TOOLCHAIN_SUFFIX}" + "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar" "ar" HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + if(CMAKE_GCC_AR) + set(CMAKE_AR ${CMAKE_GCC_AR} CACHE STRING "" FORCE) + endif() + + find_program( + CMAKE_GCC_NM NAMES "/usr/e2k-linux/bin/nm" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm${_CMAKE_TOOLCHAIN_SUFFIX}" + "${_CMAKE_TOOLCHAIN_PREFIX}gcc-nm" "nm" HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + if(CMAKE_GCC_NM) + set(CMAKE_NM ${CMAKE_GCC_NM} CACHE STRING "" FORCE) + endif() + + find_program( + CMAKE_GCC_RANLIB + NAMES "/usr/e2k-linux/bin/ranlib" "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib${_CMAKE_TOOLCHAIN_SUFFIX}" + "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ranlib" "ranlib" HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) + if(CMAKE_GCC_RANLIB) + set(CMAKE_RANLIB ${CMAKE_GCC_RANLIB} CACHE STRING "" FORCE) + endif() +endif()