mirror of https://github.com/Icinga/icinga2.git
Merge pull request #7299 from Icinga/bugfix/arm-atomic
CMake: Detect ARM target architecture and set required -latomic
This commit is contained in:
commit
bdc3a12524
|
@ -375,6 +375,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(FATAL_ERROR "Failed to detect target architecture: ${RESULT}")
|
||||
endif()
|
||||
|
||||
string(REGEX MATCH "([^-]+).*" ARCH_MATCH ${ARCH})
|
||||
if (NOT CMAKE_MATCH_1 OR NOT ARCH_MATCH)
|
||||
message(FATAL_ERROR "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 <atomic>; int main(){ std::atomic<uint_fast64_t> 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(
|
||||
|
|
Loading…
Reference in New Issue