[Mesa-dev] [PATCH v2] disk cache: Link with -latomic if necessary

Thierry Reding thierry.reding at gmail.com
Fri Mar 2 10:38:21 UTC 2018


On Thu, Mar 01, 2018 at 08:53:59AM -0800, Dylan Baker wrote:
> 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>

Thanks. Pushed to master.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180302/d4d53fce/attachment.sig>


More information about the mesa-dev mailing list