summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meson.build17
-rw-r--r--src/util/meson.build2
2 files changed, 18 insertions, 1 deletions
diff --git a/meson.build b/meson.build
index e9928a37931..bb6a835084f 100644
--- a/meson.build
+++ b/meson.build
@@ -790,9 +790,26 @@ else
endif
# Check for GCC style atomics
+dep_atomic = declare_dependency()
+
if cc.compiles('int main() { int n; return __atomic_load_n(&n, __ATOMIC_ACQUIRE); }',
name : 'GCC atomic builtins')
pre_args += '-DUSE_GCC_ATOMIC_BUILTINS'
+
+ # Not all atomic calls can be turned into lock-free instructions, in which
+ # GCC will make calls into the libatomic library. Check whether we need to
+ # link with -latomic.
+ #
+ # This can happen for 64-bit atomic operations on 32-bit architectures such
+ # as ARM.
+ if not cc.links('''#include <stdint.h>
+ int main() {
+ uint64_t n;
+ return (int)__atomic_load_n(&n, __ATOMIC_ACQUIRE);
+ }''',
+ name : 'GCC atomic builtins required -latomic')
+ dep_atomic = cc.find_library('atomic')
+ endif
endif
if not cc.links('''#include <stdint.h>
uint64_t v;
diff --git a/src/util/meson.build b/src/util/meson.build
index b23dba3a985..eece1cefef6 100644
--- a/src/util/meson.build
+++ b/src/util/meson.build
@@ -102,7 +102,7 @@ libmesa_util = static_library(
'mesa_util',
[files_mesa_util, format_srgb],
include_directories : inc_common,
- dependencies : [dep_zlib, dep_clock, dep_thread],
+ dependencies : [dep_zlib, dep_clock, dep_thread, dep_atomic],
c_args : [c_msvc_compat_args, c_vis_args],
build_by_default : false
)