[dpdk-dev] [PATCH v2] net/sfc: fix broken build with clang 3.4.x

David Marchand david.marchand at redhat.com
Thu Jul 22 11:12:48 CEST 2021


Hi Andrew,


On Thu, Jul 22, 2021 at 9:49 AM Andrew Rybchenko
<andrew.rybchenko at oktetlabs.ru> wrote:
>
> Old clanng requires libatomic as well as gcc. Avoid compiler name and

s/nn/n/


> version based checks. Add custom test for 16-byte atomic operations
> to find out if libatomic is required to build.
>
> Bugzilla ID: 760
> Fixes: 96fd2bd69b58 ("net/sfc: support flow action count in transfer rules")
>
> Signed-off-by: Andrew Rybchenko <andrew.rybchenko at oktetlabs.ru>
> ---
>  drivers/net/sfc/meson.build | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
> index 4625859077..a1ad792b80 100644
> --- a/drivers/net/sfc/meson.build
> +++ b/drivers/net/sfc/meson.build
> @@ -40,8 +40,20 @@ foreach flag: extra_flags
>      endif
>  endforeach
>
> -# for gcc compiles we need -latomic for 128-bit atomic ops
> -if cc.get_id() == 'gcc'
> +# for gcc and old Clang compiles we need -latomic for 128-bit atomic ops
> +atomic_check_code = '''
> +int main(void)
> +{
> +    __int128 a = 0;
> +    __int128 b;
> +
> +    b = __atomic_load_n(&a, __ATOMIC_RELAXED);
> +    __atomic_store(&b, &a, __ATOMIC_RELAXED);
> +    __atomic_store_n(&b, a, __ATOMIC_RELAXED);
> +    return 0;
> +}
> +'''
> +if not cc.links(atomic_check_code)

Nice.


>      libatomic_dep = cc.find_library('atomic', required: false)
>      if not libatomic_dep.found()
>          build = false
> @@ -51,11 +63,7 @@ if cc.get_id() == 'gcc'
>
>      # libatomic could be half-installed when above check finds it but
>      # linkage fails
> -    atomic_link_code = '''
> -    #include <stdio.h>
> -    void main() { printf("libatomic link check\n"); }
> -    '''
> -    if not cc.links(atomic_link_code, dependencies: libatomic_dep)
> +    if not cc.links(atomic_check_code, dependencies: libatomic_dep)
>          build = false
>          reason = 'broken dependency, "libatomic"'
>          subdir_done()
> --
> 2.30.2
>

Such a check will have its place in a common place if another
component in DPDK starts to depend on libatomic in the future.
But for now, this patch lgtm.
Thanks.

Acked-by: David Marchand <david.marchand at redhat.com>


-- 
David Marchand



More information about the dev mailing list