cmake: properly link against libatomic when needed

Similar to CMAKE_REQUIRED_FLAGS, CMAKE_CXX_LINK_FLAGS is not an
appropriate variable for linking against libraries.
This commit is contained in:
Felix Geyer 2020-02-01 22:32:09 +01:00 committed by Johannes Pohl
parent c4a4c77417
commit f6f107af28
3 changed files with 6 additions and 3 deletions

View file

@ -7,7 +7,7 @@ set(CLIENT_SOURCES
decoder/pcm_decoder.cpp
player/player.cpp)
set(CLIENT_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} common)
set(CLIENT_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${ATOMIC_LIBRARY} common)
set(CLIENT_INCLUDE
${Boost_INCLUDE_DIR}

View file

@ -108,6 +108,8 @@ endfunction(check_working_cxx_atomics64_2args)
# First check if atomics work without the library.
check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
set(ATOMIC_LIBRARY "")
# If not, check if the library exists, and atomics work with it.
if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
@ -116,7 +118,7 @@ if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
endif()
if( HAVE_LIBATOMIC OR HAVE_LIBATOMIC_2ARGS )
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")
set(ATOMIC_LIBRARY "atomic")
check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
if (NOT HAVE_CXX_ATOMICS_WITH_LIB)
message(FATAL_ERROR "Host compiler must support std::atomic!")
@ -137,7 +139,7 @@ if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
endif()
if( HAVE_CXX_LIBATOMICS64 OR HAVE_CXX_LIBATOMICS64_2ARGS )
list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")
set(ATOMIC_LIBRARY "atomic")
check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
message(FATAL_ERROR "Host compiler must support std::atomic!")

View file

@ -23,6 +23,7 @@ set(SERVER_SOURCES
set(SERVER_LIBRARIES
${CMAKE_THREAD_LIBS_INIT}
${ATOMIC_LIBRARY}
common)
set(SERVER_INCLUDE