diff --git a/configure.cmake b/configure.cmake index 8383b6921f8..3ba97756da5 100644 --- a/configure.cmake +++ b/configure.cmake @@ -865,7 +865,32 @@ int main() long long int *ptr= &var; return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST); }" -HAVE_GCC_C11_ATOMICS) +HAVE_GCC_C11_ATOMICS_NO_LIB) + +# check if we need to link with libatomic for c11 atomics +IF(UNIX AND NOT (HAVE_GCC_ATOMIC_BUILTINS OR HAVE_GCC_C11_ATOMICS_NO_LIB)) + SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} atomic) + CHECK_CXX_SOURCE_COMPILES(" + int main() + { + long long int var= 1; + long long int *ptr= &var; + return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST); + }" + HAVE_GCC_C11_ATOMICS_LIB) + IF(HAVE_GCC_C11_ATOMICS_LIB) + SET(LIBATOMIC "atomic") + ELSE() + SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES}) + ENDIF() +ENDIF() + +IF (HAVE_GCC_C11_ATOMICS_NO_LIB OR HAVE_GCC_C11_ATOMICS_LIB) + SET(HAVE_GCC_C11_ATOMICS 1 CACHE INTERNAL "C11 atomic functions found") +ELSE() + SET(HAVE_GCC_C11_ATOMICS "" CACHE INTERNAL "C11 atomic functions NOT found") +ENDIF() IF(WITH_VALGRIND) SET(HAVE_valgrind 1) diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index 92269538c58..0d144cc0508 100644 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -165,7 +165,7 @@ ENDIF() ADD_CONVENIENCE_LIBRARY(mysys ${MYSYS_SOURCES}) MAYBE_DISABLE_IPO(mysys) TARGET_LINK_LIBRARIES(mysys dbug strings ${ZLIB_LIBRARY} - ${LIBNSL} ${LIBM} ${LIBRT} ${CMAKE_DL_LIBS} ${LIBSOCKET} ${LIBEXECINFO}) + ${LIBNSL} ${LIBM} ${LIBRT} ${CMAKE_DL_LIBS} ${LIBSOCKET} ${LIBEXECINFO} ${LIBATOMIC}) DTRACE_INSTRUMENT(mysys) IF(HAVE_BFD_H) diff --git a/storage/rocksdb/build_rocksdb.cmake b/storage/rocksdb/build_rocksdb.cmake index 3a2297fd0f2..827dcc1d31d 100644 --- a/storage/rocksdb/build_rocksdb.cmake +++ b/storage/rocksdb/build_rocksdb.cmake @@ -160,7 +160,7 @@ find_package(Threads REQUIRED) if(WIN32) set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib) else() - set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${CMAKE_DL_LIBS}) + set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${CMAKE_DL_LIBS} ${LIBATOMIC}) endif() set(ROCKSDB_LIBS rocksdblib})