Compare commits
6 Commits
a6bb734f49
...
186d67c4bb
Author | SHA1 | Date | |
---|---|---|---|
186d67c4bb | |||
2e18f5981b | |||
ef788f6cc5 | |||
954b27fa27 | |||
a8e546734a | |||
f2ee747a38 |
@@ -7,9 +7,7 @@ function(add_code_coverage target)
|
|||||||
if(CMLIB_ENABLE_CODE_COVERAGE)
|
if(CMLIB_ENABLE_CODE_COVERAGE)
|
||||||
if(CMAKE_CXX_COMPILER_IS_GCC)
|
if(CMAKE_CXX_COMPILER_IS_GCC)
|
||||||
target_compile_options(${target} PUBLIC "--coverage")
|
target_compile_options(${target} PUBLIC "--coverage")
|
||||||
get_target_property(LF ${target} LINK_FLAGS)
|
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " --coverage")
|
||||||
string(APPEND LF " --coverage")
|
|
||||||
set_target_properties(${target} PROPERTIES LINK_FLAGS ${LF})
|
|
||||||
|
|
||||||
if(LCOV_EXE)
|
if(LCOV_EXE)
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
set(COMMON_CXX_FEATURES cxx_alias_templates cxx_nullptr cxx_override)
|
set(COMMON_CXX_FEATURES cxx_alias_templates cxx_nullptr cxx_override)
|
||||||
|
|
||||||
function(common_target_properties target)
|
function(common_target_properties target)
|
||||||
get_target_property(__type ${target} TYPE)
|
get_target_property(_targetType ${target} TYPE)
|
||||||
|
|
||||||
set(__visibility PUBLIC)
|
set(__visibility PUBLIC)
|
||||||
if(__type STREQUAL INTERFACE_LIBRARY)
|
if(_targetType STREQUAL INTERFACE_LIBRARY)
|
||||||
set(__interface 1)
|
set(__interface 1)
|
||||||
set(__visibility INTERFACE)
|
set(__visibility INTERFACE)
|
||||||
endif()
|
endif()
|
||||||
@@ -17,7 +18,6 @@ function(common_target_properties target)
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
target_compile_features(${target} ${__visibility} ${COMMON_CXX_FEATURES})
|
target_compile_features(${target} ${__visibility} ${COMMON_CXX_FEATURES})
|
||||||
get_target_property(_targetType ${target} TYPE)
|
|
||||||
if(_targetType STREQUAL "EXECUTABLE")
|
if(_targetType STREQUAL "EXECUTABLE")
|
||||||
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||||
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
|
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
|
||||||
@@ -25,13 +25,16 @@ function(common_target_properties target)
|
|||||||
target_compile_options(${target} PUBLIC "${CMAKE_CXX_COMPILE_OPTIONS_PIE}")
|
target_compile_options(${target} PUBLIC "${CMAKE_CXX_COMPILE_OPTIONS_PIE}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
${target}
|
${target}
|
||||||
PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
target_compile_definitions(${target} ${__visibility} Darwin)
|
target_compile_definitions(${target} ${__visibility} Darwin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT __interface)
|
if(NOT __interface)
|
||||||
if(TARGET Qt5::Core)
|
if(TARGET Qt5::Core)
|
||||||
if(_targetType STREQUAL "EXECUTABLE")
|
if(_targetType STREQUAL "EXECUTABLE")
|
||||||
@@ -48,43 +51,27 @@ function(common_target_properties target)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_CXX_COMPILER_IS_GCC AND NOT APPLE)
|
if(CMAKE_CXX_COMPILER_IS_GCC AND NOT APPLE)
|
||||||
set_target_properties(${target} PROPERTIES LINK_FLAGS "-Wl,--no-as-needed")
|
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-as-needed")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# LTO only for executables (not libraries) in Release build type
|
# LTO only for executables (not libraries) in Release build type
|
||||||
get_target_property(target_type ${target} TYPE)
|
if(_targetType STREQUAL "EXECUTABLE" AND CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
if(target_type STREQUAL "EXECUTABLE" AND CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
||||||
check_cxx_compiler_flag(-flto CXX_HAS_LTO_FLAG)
|
check_cxx_compiler_flag(-flto CXX_HAS_LTO_FLAG)
|
||||||
check_cxx_compiler_flag(-fno-fat-lto-objects CXX_HAS_NO_FAT_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)
|
if(CXX_HAS_LTO_FLAG)
|
||||||
find_program(CMAKE_GCC_AR NAMES "${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar${_CMAKE_TOOLCHAIN_SUFFIX}"
|
target_compile_options(${target} PUBLIC "-flto")
|
||||||
"${_CMAKE_TOOLCHAIN_PREFIX}gcc-ar" HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
|
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -flto")
|
||||||
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)
|
if(CXX_HAS_NO_FAT_LTO_FLAG)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-fat-lto-objects")
|
target_compile_options(${target} PUBLIC "-fno-fat-lto-objects")
|
||||||
|
set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " -fno-fat-lto-objects")
|
||||||
endif()
|
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()
|
endif()
|
||||||
|
|
||||||
set_target_properties(${target} PROPERTIES COTIRE_ENABLE_PRECOMPILED_HEADER
|
set_property(TARGET ${target} PROPERTY COTIRE_ENABLE_PRECOMPILED_HEADER
|
||||||
${CMLIB_COTIRE_ENABLE_PRECOMPILED_HEADER})
|
${CMLIB_COTIRE_ENABLE_PRECOMPILED_HEADER})
|
||||||
set_target_properties(${target} PROPERTIES COTIRE_ADD_UNITY_BUILD ${CMLIB_COTIRE_ADD_UNITY_BUILD})
|
set_property(TARGET ${target} PROPERTY COTIRE_ADD_UNITY_BUILD ${CMLIB_COTIRE_ADD_UNITY_BUILD})
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL Profile)
|
if(CMAKE_BUILD_TYPE STREQUAL Profile)
|
||||||
target_compile_definitions(${target} ${__visibility} PROFILE)
|
target_compile_definitions(${target} ${__visibility} PROFILE)
|
||||||
|
@@ -19,3 +19,28 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|||||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
set(CMAKE_CXX_COMPILER_IS_MSVC ON)
|
set(CMAKE_CXX_COMPILER_IS_MSVC ON)
|
||||||
endif()
|
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()
|
||||||
|
@@ -31,12 +31,23 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Выбор стандарта по умолчанию (можно переопределить в проекте)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
||||||
|
|
||||||
|
check_cxx_compiler_flag(-std=c++14 HAVE_FLAG_STD_CXX14)
|
||||||
|
if(HAVE_FLAG_STD_CXX14)
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
check_cxx_compiler_flag(-std=gnu++14 HAVE_FLAG_STD_GNUXX14)
|
||||||
|
if(HAVE_FLAG_STD_GNUXX14)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS YES)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS YES)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Common configuration for GCC, clang and Intel.
|
# Common configuration for GCC, clang and Intel.
|
||||||
if(CMAKE_CXX_COMPILER_IS_CLANG OR CMAKE_CXX_COMPILER_IS_INTEL OR CMAKE_CXX_COMPILER_IS_GCC)
|
if(CMAKE_CXX_COMPILER_IS_CLANG OR CMAKE_CXX_COMPILER_IS_INTEL OR CMAKE_CXX_COMPILER_IS_GCC)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED YES)
|
|
||||||
set(CMAKE_CXX_EXTENSIONS YES)
|
|
||||||
|
|
||||||
if(CMLIB_WARNING_FLAGS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
if(CMLIB_WARNING_FLAGS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
check_enable_cxx_flag(-Wall)
|
check_enable_cxx_flag(-Wall)
|
||||||
check_enable_cxx_flag(-Wextra)
|
check_enable_cxx_flag(-Wextra)
|
||||||
|
Reference in New Issue
Block a user