Mesa (master): configure.ac/meson.build: Fix -latomic test

Matt Turner mattst88 at kemper.freedesktop.org
Mon May 7 17:15:10 UTC 2018


Module: Mesa
Branch: master
Commit: 54ba73ef102f7b9085922686bb31719539e0dc3c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=54ba73ef102f7b9085922686bb31719539e0dc3c

Author: Nicolas Boichat <drinkcat at chromium.org>
Date:   Thu Apr  5 09:33:09 2018 +0800

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 <mattst88 at gmail.com>
Signed-off-by: Nicolas Boichat <drinkcat at chromium.org>

---

 configure.ac | 6 ++++--
 meson.build  | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index f1fbdcc6c7..c0fbfe9413 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 <stdint.h>
-    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 6e61766809..e52b4a5109 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 <stdint.h>
                      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')




More information about the mesa-commit mailing list