diff options
-rw-r--r-- | meson.build | 17 | ||||
-rw-r--r-- | src/util/meson.build | 2 |
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 ) |