eal/windows: add interrupt thread skeleton
[dpdk.git] / lib / librte_acl / meson.build
index d1e2c18..ee4e229 100644 (file)
@@ -15,7 +15,7 @@ if dpdk_conf.has('RTE_ARCH_X86')
        # in former case, just add avx2 C file to files list
        # in latter case, compile c file to static lib, using correct compiler
        # flags, and then have the .o file from static lib linked into main lib.
-       if dpdk_conf.has('RTE_MACHINE_CPUFLAG_AVX2')
+       if cc.get_define('__AVX2__', args: machine_args) != ''
                sources += files('acl_run_avx2.c')
                cflags += '-DCC_AVX2_SUPPORT'
        elif cc.has_argument('-mavx2')
@@ -27,7 +27,55 @@ if dpdk_conf.has('RTE_ARCH_X86')
                cflags += '-DCC_AVX2_SUPPORT'
        endif
 
-elif dpdk_conf.has('RTE_ARCH_ARM') or dpdk_conf.has('RTE_ARCH_ARM64')
+       # compile AVX512 version if:
+       # we are building 64-bit binary AND binutils can generate proper code
+
+       if dpdk_conf.has('RTE_ARCH_X86_64') and binutils_ok.returncode() == 0
+
+               # compile AVX512 version if either:
+               # a. we have AVX512 supported in minimum instruction set
+               #    baseline
+               # b. it's not minimum instruction set, but supported by
+               #    compiler
+               #
+               # in former case, just add avx512 C file to files list
+               # in latter case, compile c file to static lib, using correct
+               # compiler flags, and then have the .o file from static lib
+               # linked into main lib.
+
+               # check if all required flags already enabled (variant a).
+               acl_avx512_flags = ['__AVX512F__', '__AVX512VL__',
+                       '__AVX512CD__', '__AVX512BW__']
+
+               acl_avx512_on = true
+               foreach f:acl_avx512_flags
+
+                       if cc.get_define(f, args: machine_args) == ''
+                               acl_avx512_on = false
+                       endif
+               endforeach
+
+               if acl_avx512_on == true
+
+                       sources += files('acl_run_avx512.c')
+                       cflags += '-DCC_AVX512_SUPPORT'
+
+               elif cc.has_multi_arguments('-mavx512f', '-mavx512vl',
+                                       '-mavx512cd', '-mavx512bw')
+
+                       avx512_tmplib = static_library('avx512_tmp',
+                               'acl_run_avx512.c',
+                               dependencies: static_rte_eal,
+                               c_args: cflags +
+                                       ['-mavx512f', '-mavx512vl',
+                                        '-mavx512cd', '-mavx512bw'])
+                       objs += avx512_tmplib.extract_objects(
+                                       'acl_run_avx512.c')
+                       cflags += '-DCC_AVX512_SUPPORT'
+               endif
+       endif
+
+elif dpdk_conf.has('RTE_ARCH_ARM')
        cflags += '-flax-vector-conversions'
        sources += files('acl_run_neon.c')
 elif dpdk_conf.has('RTE_ARCH_PPC_64')