diff options
author | John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> | 2018-12-01 10:34:01 +0100 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2020-10-07 08:55:23 +1100 |
commit | 6171ecee13aea76d474919235568509835b25d98 (patch) | |
tree | cae4d8cb83560578c475fedf5538e22164d816ee | |
parent | d99f787244ab82f658b3f4a6c9877289e6385e04 (diff) | |
download | mariadb-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.cmake | 26 | ||||
-rw-r--r-- | unittest/mysys/CMakeLists.txt | 3 |
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) |