From 54ba73ef102f7b9085922686bb31719539e0dc3c Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Thu, 5 Apr 2018 09:33:09 +0800 Subject: [PATCH] configure.ac/meson.build: Fix -latomic test When compiling with LLVM 6.0 on x86 (32-bit) for Android, the test fails to detect that -latomic is actually required, as the atomic call is inlined. In the code itself (src/util/disk_cache.c), we see this pattern: p_atomic_add(cache->size, - (uint64_t)size); where cache->size is an uint64_t *, and results in the following link time error without -latomic: src/util/disk_cache.c:628: error: undefined reference to '__atomic_fetch_add_8' Fix the configure/meson test to replicate this pattern, which then correctly realizes the need for -latomic. Reviewed-by: Matt Turner Signed-off-by: Nicolas Boichat --- configure.ac | 6 ++++-- meson.build | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index f1fbdcc6c7c..c0fbfe94135 100644 --- a/configure.ac +++ b/configure.ac @@ -445,9 +445,11 @@ if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then AC_MSG_CHECKING(whether -latomic is needed) AC_LINK_IFELSE([AC_LANG_SOURCE([[ #include - uint64_t v; + struct { + uint64_t *v; + } x; int main() { - return (int)__atomic_load_n(&v, __ATOMIC_ACQUIRE); + return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE); }]])], GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC=no, GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC=yes) AC_MSG_RESULT($GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC) if test "x$GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC" = xyes; then diff --git a/meson.build b/meson.build index 6e617668096..e52b4a51093 100644 --- a/meson.build +++ b/meson.build @@ -849,8 +849,10 @@ if cc.compiles('int main() { int n; return __atomic_load_n(&n, __ATOMIC_ACQUIRE) # as ARM. if not cc.links('''#include int main() { - uint64_t n; - return (int)__atomic_load_n(&n, __ATOMIC_ACQUIRE); + struct { + uint64_t *v; + } x; + return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE); }''', name : 'GCC atomic builtins required -latomic') dep_atomic = cc.find_library('atomic') -- 2.16.1