Re: Bug#915046: mariadb-10.3: Please build with -latomic where necessary
Control: tags +patch
On 11/30/18 1:05 PM, John Paul Adrian Glaubitz wrote:
> Attaching a proof-of-concept patch which fixes the issue for me.
>
> The patch shouldn't be used as-is as it links against libatomic
> unconditionally while it should only link against it when necessary.
Attaching a cleaned-up patch which does the -latomic linking conditionally.
I'll try to upstream it.
Adrian
--
.''`. John Paul Adrian Glaubitz
: :' : Debian Developer - glaubitz@debian.org
`. `' Freie Universitaet Berlin - glaubitz@physik.fu-berlin.de
`- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
Description: Link against libatomic where necessary
Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Last-Update: 2018-11-30
Index: mariadb-10.3-10.3.0/configure.cmake
===================================================================
--- mariadb-10.3-10.3.0.orig/configure.cmake
+++ mariadb-10.3-10.3.0/configure.cmake
@@ -932,6 +932,21 @@ 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)
+ check_library_exists(atomic __atomic_add_fetch_8 "" HAVE_LIBATOMIC)
+ if (HAVE_LIBATOMIC)
+ SET(CMAKE_REQUIRED_LIBRARIES atomic)
+ SET(LIBATOMIC atomic)
+ endif()
+endif()
+CHECK_CXX_SOURCE_COMPILES("
int main()
{
long long int var= 1;
Index: mariadb-10.3-10.3.0/unittest/mysys/CMakeLists.txt
===================================================================
--- mariadb-10.3-10.3.0.orig/unittest/mysys/CMakeLists.txt
+++ mariadb-10.3-10.3.0/unittest/mysys/CMakeLists.txt
@@ -15,7 +15,7 @@
MY_ADD_TESTS(bitmap base64 my_atomic my_rdtsc lf my_malloc my_getopt dynstring
aes
- LINK_LIBRARIES mysys)
+ LINK_LIBRARIES mysys ${LIBATOMIC})
MY_ADD_TESTS(my_vsnprintf LINK_LIBRARIES strings mysys)
ADD_DEFINITIONS(${SSL_DEFINES})
Index: mariadb-10.3-10.3.0/storage/perfschema/unittest/CMakeLists.txt
===================================================================
--- mariadb-10.3-10.3.0.orig/storage/perfschema/unittest/CMakeLists.txt
+++ mariadb-10.3-10.3.0/storage/perfschema/unittest/CMakeLists.txt
@@ -29,4 +29,4 @@ ADD_DEPENDENCIES(pfs_server_stubs GenErr
MY_ADD_TESTS(pfs_instr_class pfs_instr_class-oom pfs_instr pfs_instr-oom
pfs_account-oom pfs_host-oom pfs_timer pfs_user-oom pfs pfs_misc
- EXT "cc" LINK_LIBRARIES perfschema mysys pfs_server_stubs)
+ EXT "cc" LINK_LIBRARIES perfschema mysys pfs_server_stubs ${LIBATOMIC})
Index: mariadb-10.3-10.3.0/unittest/sql/CMakeLists.txt
===================================================================
--- mariadb-10.3-10.3.0.orig/unittest/sql/CMakeLists.txt
+++ mariadb-10.3-10.3.0/unittest/sql/CMakeLists.txt
@@ -27,7 +27,7 @@ ELSE()
ADD_EXECUTABLE(explain_filename-t explain_filename-t.cc)
ENDIF()
-TARGET_LINK_LIBRARIES(explain_filename-t sql mytap)
+TARGET_LINK_LIBRARIES(explain_filename-t sql mytap ${LIBATOMIC})
MY_ADD_TEST(explain_filename)
ADD_EXECUTABLE(mf_iocache-t mf_iocache-t.cc ../../sql/mf_iocache_encr.cc)
Index: mariadb-10.3-10.3.0/sql/CMakeLists.txt
===================================================================
--- mariadb-10.3-10.3.0.orig/sql/CMakeLists.txt
+++ mariadb-10.3-10.3.0/sql/CMakeLists.txt
@@ -178,7 +178,8 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI
${LIBWRAP} ${LIBCRYPT} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT}
${WSREP_LIB}
${SSL_LIBRARIES}
- ${LIBSYSTEMD})
+ ${LIBSYSTEMD}
+ ${LIBATOMIC})
IF(WIN32)
SET(MYSQLD_SOURCE main.cc nt_servc.cc nt_servc.h message.rc)
Index: mariadb-10.3-10.3.0/libmysqld/CMakeLists.txt
===================================================================
--- mariadb-10.3-10.3.0.orig/libmysqld/CMakeLists.txt
+++ mariadb-10.3-10.3.0/libmysqld/CMakeLists.txt
@@ -140,7 +140,7 @@ ENDIF()
SET(LIBS
- dbug strings mysys mysys_ssl pcre vio
+ dbug strings mysys mysys_ssl pcre vio ${LIBATOMIC}
${ZLIB_LIBRARY} ${SSL_LIBRARIES}
${LIBWRAP} ${LIBCRYPT} ${LIBDL}
${MYSQLD_STATIC_PLUGIN_LIBS}
Reply to: