xref: /dpdk/lib/member/meson.build (revision db354bd2e1f82294ddeb667a1dbca27a325d1eb4)
199a2dd95SBruce Richardson# SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson# Copyright(c) 2017 Intel Corporation
399a2dd95SBruce Richardson
4b1094939SBruce Richardsonif is_windows
5b1094939SBruce Richardson    build = false
6b1094939SBruce Richardson    reason = 'not supported on Windows'
7b1094939SBruce Richardson    subdir_done()
8b1094939SBruce Richardsonendif
9b1094939SBruce Richardson
1099a2dd95SBruce Richardsonheaders = files('rte_member.h')
11*db354bd2SLeyi Rong
12*db354bd2SLeyi Rongsources = files(
13*db354bd2SLeyi Rong        'rte_member.c',
14*db354bd2SLeyi Rong        'rte_member_ht.c',
15*db354bd2SLeyi Rong        'rte_member_sketch.c',
16*db354bd2SLeyi Rong        'rte_member_vbf.c',
17*db354bd2SLeyi Rong)
18*db354bd2SLeyi Rong
19*db354bd2SLeyi Rongdeps += ['hash', 'ring']
20*db354bd2SLeyi Rong
21*db354bd2SLeyi Rong# compile AVX512 version if:
22*db354bd2SLeyi Rongif dpdk_conf.has('RTE_ARCH_X86_64') and binutils_ok
23*db354bd2SLeyi Rong    # compile AVX512 version if either:
24*db354bd2SLeyi Rong    # a. we have AVX512 supported in minimum instruction set
25*db354bd2SLeyi Rong    #    baseline
26*db354bd2SLeyi Rong    # b. it's not minimum instruction set, but supported by
27*db354bd2SLeyi Rong    #    compiler
28*db354bd2SLeyi Rong    #
29*db354bd2SLeyi Rong    # in former case, just add avx512 C file to files list
30*db354bd2SLeyi Rong    # in latter case, compile c file to static lib, using correct
31*db354bd2SLeyi Rong    # compiler flags, and then have the .o file from static lib
32*db354bd2SLeyi Rong    # linked into main lib.
33*db354bd2SLeyi Rong
34*db354bd2SLeyi Rong    # check if all required flags already enabled
35*db354bd2SLeyi Rong    sketch_avx512_flags = ['__AVX512F__', '__AVX512DQ__', '__AVX512IFMA__']
36*db354bd2SLeyi Rong
37*db354bd2SLeyi Rong    sketch_avx512_on = true
38*db354bd2SLeyi Rong    foreach f:sketch_avx512_flags
39*db354bd2SLeyi Rong        if cc.get_define(f, args: machine_args) == ''
40*db354bd2SLeyi Rong            sketch_avx512_on = false
41*db354bd2SLeyi Rong        endif
42*db354bd2SLeyi Rong    endforeach
43*db354bd2SLeyi Rong
44*db354bd2SLeyi Rong    if sketch_avx512_on == true
45*db354bd2SLeyi Rong        cflags += ['-DCC_AVX512_SUPPORT']
46*db354bd2SLeyi Rong        sources += files('rte_member_sketch_avx512.c')
47*db354bd2SLeyi Rong    elif cc.has_multi_arguments('-mavx512f', '-mavx512dq', '-mavx512ifma')
48*db354bd2SLeyi Rong        sketch_avx512_tmp = static_library('sketch_avx512_tmp',
49*db354bd2SLeyi Rong            'rte_member_sketch_avx512.c',
50*db354bd2SLeyi Rong            include_directories: includes,
51*db354bd2SLeyi Rong            dependencies: [static_rte_eal, static_rte_hash],
52*db354bd2SLeyi Rong            c_args: cflags +
53*db354bd2SLeyi Rong                ['-mavx512f', '-mavx512dq', '-mavx512ifma'])
54*db354bd2SLeyi Rong        objs += sketch_avx512_tmp.extract_objects('rte_member_sketch_avx512.c')
55*db354bd2SLeyi Rong        cflags += ['-DCC_AVX512_SUPPORT']
56*db354bd2SLeyi Rong    endif
57*db354bd2SLeyi Rongendif
58