[Mesa-dev] [PATCH v2] disk cache: Link with -latomic if necessary
Dylan Baker
dylan at pnwbakers.com
Thu Mar 1 16:53:59 UTC 2018
Quoting Thierry Reding (2018-03-01 05:28:07)
> From: Thierry Reding <treding at nvidia.com>
>
> The disk cache implementation uses 64-bit atomic operations. For some
> architectures, such as 32-bit ARM, GCC will not be able to translate
> these operations into atomic, lock-free instructions and will instead
> rely on the external atomics library to provide these operations.
>
> Check at configuration time whether or not linking against libatomic
> is necessary and if so, create a dependency that can be used while
> linking the mesautil library.
>
> This is the meson equivalent of 2ef7f23820a6 ("configure: check if
> -latomic is needed for __atomic_*").
>
> For some background information on this, see:
>
> https://gcc.gnu.org/wiki/Atomic/GCCMM
>
> Changes in v2:
> - clarify meaning of lock-free in commit message
> - fix build if -latomic is not necessary
>
> Acked-by: Matt Turner <mattst88 at gmail.com>
> Signed-off-by: Thierry Reding <treding at nvidia.com>
> ---
> meson.build | 17 +++++++++++++++++
> src/util/meson.build | 2 +-
> 2 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/meson.build b/meson.build
> index e9928a379313..bb6a835084fe 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 b23dba3a9851..eece1cefef6a 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
> )
> --
> 2.16.2
>
Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180301/3bfb7bb4/attachment.sig>
More information about the mesa-dev
mailing list