summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>2018-12-01 10:34:01 +0100
committerDaniel Black <daniel@mariadb.org>2020-10-07 08:55:23 +1100
commit6171ecee13aea76d474919235568509835b25d98 (patch)
treecae4d8cb83560578c475fedf5538e22164d816ee
parentd99f787244ab82f658b3f4a6c9877289e6385e04 (diff)
downloadmariadb-git-bb-10.3-danielblack-MDEV-23892-pr979.tar.gz
Link against libatomic on platforms missing 64-bit atomicsbb-10.3-danielblack-MDEV-23892-pr979
Some architectures require linking against libatomic for using 64-bit atomic operations like __atomic_load_8. Due to a bug in gcc, linking against libatomic is not happening automatically when using C11 code. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81358 Atomics libraries are now global. Rework of global check to include compile and link by Daniel Black. Tested on AIX7.1 cmake -UHAVE_ATOMIC_ADD_FETCH_WITH_LIBATOMIC -UHAVE_ATOMIC_ADD_FETCH . -- Running cmake version 3.16.0 -- MariaDB 10.3.25 getconf: specified variable is not valid on this system -- Performing Test HAVE_ATOMIC_ADD_FETCH -- Performing Test HAVE_ATOMIC_ADD_FETCH - Failed -- Performing Test HAVE_ATOMIC_ADD_FETCH_WITH_LIBATOMIC -- Performing Test HAVE_ATOMIC_ADD_FETCH_WITH_LIBATOMIC - Success closes #979
-rw-r--r--configure.cmake26
-rw-r--r--unittest/mysys/CMakeLists.txt3
2 files changed, 28 insertions, 1 deletions
diff --git a/configure.cmake b/configure.cmake
index 75a02d2edc3..1916165b668 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -887,6 +887,32 @@ int main()
}"
HAVE_GCC_ATOMIC_BUILTINS)
CHECK_CXX_SOURCE_COMPILES("
+#include <cstdint>
+int main() {
+ uint64_t x = 1;
+ __atomic_add_fetch(&x, 0, __ATOMIC_RELAXED);
+ return x;
+}
+" HAVE_ATOMIC_ADD_FETCH)
+IF(NOT HAVE_ATOMIC_ADD_FETCH)
+ SET(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+ SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} atomic)
+ CHECK_CXX_SOURCE_COMPILES("
+ #include <cstdint>
+ int main() {
+ uint64_t x = 1;
+ __atomic_add_fetch(&x, 0, __ATOMIC_RELAXED);
+ return x;
+ }
+ " HAVE_ATOMIC_ADD_FETCH_WITH_LIBATOMIC)
+ IF(HAVE_ATOMIC_ADD_FETCH_WITH_LIBATOMIC)
+ SET(LIBATOMIC atomic)
+ ELSE()
+ # revert the required libraries if unsuccessful
+ SET(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES})
+ ENDIF()
+ENDIF()
+CHECK_CXX_SOURCE_COMPILES("
int main()
{
long long int var= 1;
diff --git a/unittest/mysys/CMakeLists.txt b/unittest/mysys/CMakeLists.txt
index 984b033e7aa..4019bd3dd00 100644
--- a/unittest/mysys/CMakeLists.txt
+++ b/unittest/mysys/CMakeLists.txt
@@ -13,11 +13,12 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
-MY_ADD_TESTS(bitmap base64 my_atomic my_rdtsc lf my_malloc my_getopt dynstring
+MY_ADD_TESTS(bitmap base64 my_rdtsc lf my_malloc my_getopt dynstring
byte_order
queues stacktrace LINK_LIBRARIES mysys)
MY_ADD_TESTS(my_vsnprintf LINK_LIBRARIES strings mysys)
MY_ADD_TESTS(aes LINK_LIBRARIES mysys mysys_ssl)
+MY_ADD_TESTS(my_atomic LINK_LIBRARIES mysys ${LIBATOMIC})
ADD_DEFINITIONS(${SSL_DEFINES})
MY_ADD_TESTS(ma_dyncol LINK_LIBRARIES mysys)