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