[Mesa-dev] [PATCH, v2] CHROMIUM: configure.ac/meson.build: Fix -latomic test

Nicolas Boichat drinkcat at chromium.org
Thu Mar 29 08:36:28 UTC 2018


And now I left the CHROMIUM tag, sorry ,-(

On Thu, Mar 29, 2018 at 4:31 PM, Nicolas Boichat <drinkcat at chromium.org> wrote:
> From: Nicolas Boichat <drinkcat at chromium.org>
>
> When compiling with LLVM 6.0, 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.
>
> Signed-off-by: Nicolas Boichat <drinkcat at chromium.org>
> ---
>
> Changes since v1:
>  - Updated meson.build as well (untested)
>
>  configure.ac | 6 ++++--
>  meson.build  | 6 ++++--
>  2 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index e874f8ebfb2..eff9a0ef88f 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 f210eeb2530..cd567dc000e 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -850,8 +850,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')
> --
> 2.17.0.rc1.321.gba9d0f2565-goog
>


More information about the mesa-dev mailing list