X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=CMakeLists.txt;h=cd06a29087d39bd9a269f206dca6d70e51e446df;hb=a99855be93df4bec0a087ab83b9c34285a69ecee;hp=ac6151796d4cbeba6c94f2109b3747f8ee8e6caf;hpb=aabfcfef9e4c08f821d80e4684a29a9718a41c13;p=icinga2 diff --git a/CMakeLists.txt b/CMakeLists.txt index ac6151796..cd06a2908 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,6 +111,8 @@ endif() # NuGet on Windows requires a semantic versioning, example: 2.10.4.123 (only 4 element, only numeric) string(REGEX REPLACE "-([0-9]+).*$" ".\\1" ICINGA2_VERSION_SAFE "${ICINGA2_VERSION}") +string(REGEX REPLACE "-[^\\.]*(.*)$" "\\1" ICINGA2_VERSION_SAFE "${ICINGA2_VERSION_SAFE}") +message(STATUS "ICINGA2_VERSION_SAFE=${ICINGA2_VERSION_SAFE}") if(WIN32) set(Boost_USE_STATIC_LIBS ON) @@ -312,7 +314,7 @@ if(ICINGA2_LTO_BUILD) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.0) AND NOT OPENBSD) set(CMAKE_AR "gcc-ar") @@ -375,6 +377,54 @@ if(NOT MSVC) endif() endif() +# Architecture specifics +# - Log the target architecture +# - ARM needs to link against atomic +if(NOT MSVC) + # inspired by https://github.com/civetweb/civetweb/blob/master/cmake/DetermineTargetArchitecture.cmake + execute_process( + COMMAND ${CMAKE_C_COMPILER} -dumpmachine + RESULT_VARIABLE RESULT + OUTPUT_VARIABLE ARCH + ERROR_QUIET + ) + + if (RESULT) + message(STATUS "Failed to detect target architecture with compiler ${CMAKE_C_COMPILER}: ${RESULT}") + endif() + + string(REGEX MATCH "([^-]+).*" ARCH_MATCH "${ARCH}") + if (NOT CMAKE_MATCH_1 OR NOT ARCH_MATCH) + message(STATUS "Failed to match the target architecture: ${ARCH}") + endif() + + set(ARCH ${CMAKE_MATCH_1}) + + message(STATUS "Target architecture - ${ARCH}") + + # ARM settings + if("${ARCH}" STREQUAL "arm") + check_cxx_source_compiles( "include ; int main(){ std::atomic x; x.fetch_add(1); x.sub_add(1); }" CXX_ATOMIC) + + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -latomic") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -latomic") + set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -latomic") + endif() + +else() + if("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "X86") + set(ARCH "i686") + elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "x64") + set(ARCH "x86_64") + elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM") + set(ARCH "arm") + else() + message(FATAL_ERROR "Failed to determine the MSVC target architecture: ${MSVC_C_ARCHITECTURE_ID}") + endif() + + message(STATUS "Target architecture - ${ARCH}") +endif() + configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h ESCAPE_QUOTES) install(