cmlib/CMLibCommonTargetProperties.cmake

95 lines
4.2 KiB
CMake
Raw Normal View History

2019-02-16 10:10:12 +00:00
set(COMMON_CXX_FEATURES cxx_alias_templates cxx_nullptr cxx_override)
2019-02-12 16:31:17 +00:00
function(common_target_properties target)
get_target_property(__type ${target} TYPE)
2019-02-12 16:31:17 +00:00
set(__visibility PUBLIC)
if(__type STREQUAL INTERFACE_LIBRARY)
set(__interface 1)
set(__visibility INTERFACE)
endif()
get_target_property(__sources ${target} SOURCES)
foreach(__src IN LISTS __sources)
string(REGEX MATCH ".*/qrc_.*\\.cpp$" __qrc ${__src})
2020-04-14 09:20:01 +00:00
if(__qrc)
set_property(SOURCE ${__qrc} PROPERTY COTIRE_EXCLUDED ON)
endif()
endforeach()
target_compile_features(${target} ${__visibility} ${COMMON_CXX_FEATURES})
get_target_property(_targetType ${target} TYPE)
if(_targetType STREQUAL "EXECUTABLE")
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
if(CMAKE_CXX_COMPILE_OPTIONS_PIE)
target_compile_options(${target} PUBLIC "${CMAKE_CXX_COMPILE_OPTIONS_PIE}")
endif()
endif()
2019-12-03 16:23:14 +00:00
target_include_directories(
${target}
2020-04-01 18:42:59 +00:00
PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>)
2019-02-12 16:31:17 +00:00
if(APPLE)
target_compile_definitions(${target} ${__visibility} Darwin)
2019-02-12 16:31:17 +00:00
endif()
if(NOT __interface)
if(TARGET Qt5::Core)
if(_targetType STREQUAL "EXECUTABLE")
target_compile_options(${target} PUBLIC "${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
endif()
2019-02-12 16:31:17 +00:00
endif()
if(CMAKE_CXX_COMPILER_IS_GCC AND NOT APPLE)
set_target_properties(${target} PROPERTIES LINK_FLAGS "-Wl,--no-as-needed")
2019-02-12 16:31:17 +00:00
endif()
endif()
# LTO only for executables (not libraries) in Release build type
get_target_property(target_type ${target} TYPE)
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})
2019-12-03 16:23:14 +00:00
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()
2020-04-01 18:42:59 +00:00
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()
set_target_properties(${target} PROPERTIES COTIRE_ENABLE_PRECOMPILED_HEADER
${CMLIB_COTIRE_ENABLE_PRECOMPILED_HEADER})
2020-04-18 18:03:03 +00:00
set_target_properties(${target} PROPERTIES COTIRE_ADD_UNITY_BUILD ${CMLIB_COTIRE_ADD_UNITY_BUILD})
2020-03-30 08:44:45 +00:00
if(CMAKE_BUILD_TYPE STREQUAL Profile)
target_compile_definitions(${target} ${__visibility} PROFILE)
2020-03-30 08:44:45 +00:00
elseif(CMAKE_BUILD_TYPE STREQUAL Debug)
target_compile_definitions(${target} ${__visibility} DEBUG)
2020-03-30 08:44:45 +00:00
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
target_compile_definitions(${target} ${__visibility} RELEASE)
2020-03-30 08:44:45 +00:00
elseif(CMAKE_BUILD_TYPE STREQUAL None)
target_compile_definitions(${target} ${__visibility} ANALYSIS)
2020-03-30 08:44:45 +00:00
endif()
target_compile_definitions(
${target}
2020-04-01 18:42:59 +00:00
${__visibility}
"TARGET_LSB_ID_${LSB_DISTRIBUTOR_ID}"
"TARGET_LSB_CODENAME_${LSB_CODENAME}")
2019-02-12 16:31:17 +00:00
endfunction()