summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralexfanqi <alex.fan.q@gmail.com>2021-12-17 21:23:32 +1100
committerDaniel Black <daniel@mariadb.org>2021-12-30 16:20:29 +1100
commit5fd5e9fff3ad2b1c8939c758cd2513c39016953e (patch)
tree50f1950b6a2f5c757fbac4944452a6a6520c4dc1
parent97695675c5db88eb7f2e0249dd693f070de16f06 (diff)
downloadmariadb-git-5fd5e9fff3ad2b1c8939c758cd2513c39016953e.tar.gz
improve checks for libatomic linking
This code piece is adapted from https://github.com/KDE/krita/blob/451e1415fd1b3a0f9c24de2fd4707d1b1e164236/cmake/modules/CheckAtomic.cmake#L23 Fixes: f502ccbcb5dfce29067434885a23db8d1bd5f134 Fixes: https://bugs.gentoo.org/828065 Tested-by: Yixun Lan <dlan@gentoo.org> Reviewed-by: Daniel Black
-rw-r--r--configure.cmake26
-rw-r--r--storage/rocksdb/CMakeLists.txt3
2 files changed, 22 insertions, 7 deletions
diff --git a/configure.cmake b/configure.cmake
index db8742bb93b..cbcdab5e4f9 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -891,9 +891,16 @@ HAVE_GCC_ATOMIC_BUILTINS)
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);
+ char x=1;
+ short y=1;
+ int z=1;
+ long w = 1;
+ long long s = 1;
+ x = __atomic_add_fetch(&x, 1, __ATOMIC_SEQ_CST);
+ y = __atomic_add_fetch(&y, 1, __ATOMIC_SEQ_CST);
+ z = __atomic_add_fetch(&z, 1, __ATOMIC_SEQ_CST);
+ w = __atomic_add_fetch(&w, 1, __ATOMIC_SEQ_CST);
+ return (int)__atomic_load_n(&s, __ATOMIC_SEQ_CST);
}"
HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
@@ -904,9 +911,16 @@ ELSE()
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);
+ char x=1;
+ short y=1;
+ int z=1;
+ long w = 1;
+ long long s = 1;
+ x = __atomic_add_fetch(&x, 1, __ATOMIC_SEQ_CST);
+ y = __atomic_add_fetch(&y, 1, __ATOMIC_SEQ_CST);
+ z = __atomic_add_fetch(&z, 1, __ATOMIC_SEQ_CST);
+ w = __atomic_add_fetch(&w, 1, __ATOMIC_SEQ_CST);
+ return (int)__atomic_load_n(&s, __ATOMIC_SEQ_CST);
}"
HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt
index b0d28f5636a..0eca862aaa8 100644
--- a/storage/rocksdb/CMakeLists.txt
+++ b/storage/rocksdb/CMakeLists.txt
@@ -129,7 +129,8 @@ SET(ROCKSDB_SE_SOURCES
# This is a strong requirement coming from RocksDB. No conditional checks here.
#ADD_DEFINITIONS(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX
#)
-if(CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
+
+if (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
SET(ATOMIC_EXTRA_LIBS -latomic)
else()
SET(ATOMIC_EXTRA_LIBS)