172f75660SOphir Munk# SPDX-License-Identifier: BSD-3-Clause 272f75660SOphir Munk# Copyright 2020 Mellanox Technologies, Ltd 372f75660SOphir Munk 472f75660SOphir Munkincludes += include_directories('.') 572f75660SOphir Munk 672f75660SOphir Munkstatic_ibverbs = (get_option('ibverbs_link') == 'static') 772f75660SOphir Munkdlopen_ibverbs = (get_option('ibverbs_link') == 'dlopen') 8450b83bbSAli AlnubaniLIB_GLUE_BASE = 'librte_common_mlx5_glue.so' 9af21b442SDavid MarchandLIB_GLUE_VERSION = abi_version 1072f75660SOphir MunkLIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION 1172f75660SOphir Munkif dlopen_ibverbs 1272f75660SOphir Munk dpdk_conf.set('RTE_IBVERBS_LINK_DLOPEN', 1) 1372f75660SOphir Munk cflags += [ 1472f75660SOphir Munk '-DMLX5_GLUE="@0@"'.format(LIB_GLUE), 1572f75660SOphir Munk '-DMLX5_GLUE_VERSION="@0@"'.format(LIB_GLUE_VERSION), 1672f75660SOphir Munk ] 1772f75660SOphir Munkendif 1872f75660SOphir Munk 1972f75660SOphir Munklibnames = [ 'mlx5', 'ibverbs' ] 2072f75660SOphir Munklibs = [] 2172f75660SOphir Munkforeach libname:libnames 224ad4b20aSBruce Richardson lib = dependency('lib' + libname, static:static_ibverbs, required:false, method: 'pkg-config') 2372f75660SOphir Munk if not lib.found() and not static_ibverbs 2472f75660SOphir Munk lib = cc.find_library(libname, required:false) 2572f75660SOphir Munk endif 2672f75660SOphir Munk if lib.found() 2772f75660SOphir Munk libs += lib 2872f75660SOphir Munk if not static_ibverbs and not dlopen_ibverbs 2972f75660SOphir Munk ext_deps += lib 3072f75660SOphir Munk endif 3172f75660SOphir Munk else 3272f75660SOphir Munk build = false 3372f75660SOphir Munk reason = 'missing dependency, "' + libname + '"' 3472f75660SOphir Munk subdir_done() 3572f75660SOphir Munk endif 3672f75660SOphir Munkendforeach 3772f75660SOphir Munkif static_ibverbs or dlopen_ibverbs 3872f75660SOphir Munk # Build without adding shared libs to Requires.private 39ecb904ccSBruce Richardson ibv_cflags = run_command(pkgconf, '--cflags', 'libibverbs', check: true).stdout() 4072f75660SOphir Munk ext_deps += declare_dependency(compile_args: ibv_cflags.split()) 4172f75660SOphir Munkendif 4272f75660SOphir Munkif static_ibverbs 4372f75660SOphir Munk # Add static deps ldflags to internal apps and Libs.private 4472f75660SOphir Munk ibv_ldflags = run_command(ldflags_ibverbs_static, check:true).stdout() 4572f75660SOphir Munk ext_deps += declare_dependency(link_args:ibv_ldflags.split()) 4672f75660SOphir Munkendif 4772f75660SOphir Munk 482235fcdaSSpike Dulibmtcr_ul_found = false 492235fcdaSSpike Dulib = cc.find_library('mtcr_ul', required:false) 50909ad7b8SBruce Richardsonif lib.found() 512235fcdaSSpike Du libmtcr_ul_found = true 522235fcdaSSpike Du ext_deps += lib 532235fcdaSSpike Duendif 542235fcdaSSpike Du 5559513c3eSOphir Munksources += files('mlx5_nl.c') 56777b72a9SXueming Lisources += files('mlx5_common_auxiliary.c') 5779aa4307SOphir Munksources += files('mlx5_common_os.c') 5858a17853SOphir Munksources += files('mlx5_common_verbs.c') 5972f75660SOphir Munkif not dlopen_ibverbs 6072f75660SOphir Munk sources += files('mlx5_glue.c') 6172f75660SOphir Munkendif 6272f75660SOphir Munk 63777b72a9SXueming Lideps += ['bus_auxiliary'] 64777b72a9SXueming Li 6572f75660SOphir Munk# input array for meson member search: 6672f75660SOphir Munk# [ "MACRO to define if found", "header for the search", 6772f75660SOphir Munk# "symbol to search", "struct member to search" ] 6872f75660SOphir Munkhas_member_args = [ 6972f75660SOphir Munk [ 'HAVE_IBV_MLX5_MOD_SWP', 'infiniband/mlx5dv.h', 7072f75660SOphir Munk 'struct mlx5dv_sw_parsing_caps', 'sw_parsing_offloads' ], 7172f75660SOphir Munk [ 'HAVE_IBV_DEVICE_COUNTERS_SET_V42', 'infiniband/verbs.h', 7272f75660SOphir Munk 'struct ibv_counter_set_init_attr', 'counter_set_id' ], 7372f75660SOphir Munk [ 'HAVE_IBV_DEVICE_COUNTERS_SET_V45', 'infiniband/verbs.h', 7472f75660SOphir Munk 'struct ibv_counters_init_attr', 'comp_mask' ], 7579a7e409SViacheslav Ovsiienko [ 'HAVE_MLX5DV_DEVX_UAR_OFFSET', 'infiniband/mlx5dv.h', 7679a7e409SViacheslav Ovsiienko 'struct mlx5dv_devx_uar', 'mmap_off' ], 77c4676082SAlex Vesker [ 'HAVE_MLX5DV_FLOW_MATCHER_FT_TYPE', 'infiniband/mlx5dv.h', 78c4676082SAlex Vesker 'struct mlx5dv_flow_matcher_attr', 'ft_type' ], 7972f75660SOphir Munk] 8072f75660SOphir Munk# input array for meson symbol search: 8172f75660SOphir Munk# [ "MACRO to define if found", "header for the search", 8272f75660SOphir Munk# "symbol to search" ] 8372f75660SOphir Munkhas_sym_args = [ 8472185352SMaayan Kashani [ 'HAVE_IBV_FLOW_SPEC_ESP', 'infiniband/verbs.h', 8572185352SMaayan Kashani 'IBV_FLOW_SPEC_ESP' ], 8618ca4a4eSRaja Zidane [ 'HAVE_IBV_RX_HASH_IPSEC_SPI', 'infiniband/verbs.h', 8718ca4a4eSRaja Zidane 'IBV_RX_HASH_IPSEC_SPI' ], 8872f75660SOphir Munk [ 'HAVE_IBV_RELAXED_ORDERING', 'infiniband/verbs.h', 8972f75660SOphir Munk 'IBV_ACCESS_RELAXED_ORDERING ' ], 9072f75660SOphir Munk [ 'HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT', 'infiniband/mlx5dv.h', 9172f75660SOphir Munk 'MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX' ], 9272f75660SOphir Munk [ 'HAVE_IBV_DEVICE_TUNNEL_SUPPORT', 'infiniband/mlx5dv.h', 9372f75660SOphir Munk 'MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS' ], 9472f75660SOphir Munk [ 'HAVE_IBV_MLX5_MOD_MPW', 'infiniband/mlx5dv.h', 9572f75660SOphir Munk 'MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED' ], 9672f75660SOphir Munk [ 'HAVE_IBV_MLX5_MOD_CQE_128B_COMP', 'infiniband/mlx5dv.h', 9772f75660SOphir Munk 'MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP' ], 9872f75660SOphir Munk [ 'HAVE_IBV_MLX5_MOD_CQE_128B_PAD', 'infiniband/mlx5dv.h', 9972f75660SOphir Munk 'MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD' ], 10072f75660SOphir Munk [ 'HAVE_IBV_FLOW_DV_SUPPORT', 'infiniband/mlx5dv.h', 10172f75660SOphir Munk 'mlx5dv_create_flow_action_packet_reformat' ], 10272f75660SOphir Munk [ 'HAVE_IBV_DEVICE_MPLS_SUPPORT', 'infiniband/verbs.h', 10372f75660SOphir Munk 'IBV_FLOW_SPEC_MPLS' ], 10472f75660SOphir Munk [ 'HAVE_IBV_WQ_FLAGS_PCI_WRITE_END_PADDING', 'infiniband/verbs.h', 10572f75660SOphir Munk 'IBV_WQ_FLAGS_PCI_WRITE_END_PADDING' ], 10672f75660SOphir Munk [ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h', 10772f75660SOphir Munk 'IBV_WQ_FLAG_RX_END_PADDING' ], 10872f75660SOphir Munk [ 'HAVE_MLX5DV_DR_DEVX_PORT', 'infiniband/mlx5dv.h', 10972f75660SOphir Munk 'mlx5dv_query_devx_port' ], 110d0cf77e8SViacheslav Ovsiienko [ 'HAVE_MLX5DV_DR_DEVX_PORT_V35', 'infiniband/mlx5dv.h', 111d0cf77e8SViacheslav Ovsiienko 'mlx5dv_query_port' ], 1120fd928bbSViacheslav Ovsiienko [ 'HAVE_MLX5DV_DR_CREATE_DEST_IB_PORT', 'infiniband/mlx5dv.h', 1130fd928bbSViacheslav Ovsiienko 'mlx5dv_dr_action_create_dest_ib_port' ], 11472f75660SOphir Munk [ 'HAVE_IBV_DEVX_OBJ', 'infiniband/mlx5dv.h', 11572f75660SOphir Munk 'mlx5dv_devx_obj_create' ], 11672f75660SOphir Munk [ 'HAVE_IBV_FLOW_DEVX_COUNTERS', 'infiniband/mlx5dv.h', 11772f75660SOphir Munk 'MLX5DV_FLOW_ACTION_COUNTERS_DEVX' ], 118d4d85aa6SShiri Kuzin [ 'HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS', 'infiniband/mlx5dv.h', 119d4d85aa6SShiri Kuzin 'MLX5DV_FLOW_ACTION_DEFAULT_MISS' ], 12072f75660SOphir Munk [ 'HAVE_IBV_DEVX_ASYNC', 'infiniband/mlx5dv.h', 12172f75660SOphir Munk 'mlx5dv_devx_obj_query_async' ], 12272f75660SOphir Munk [ 'HAVE_IBV_DEVX_QP', 'infiniband/mlx5dv.h', 12372f75660SOphir Munk 'mlx5dv_devx_qp_query' ], 12479a7e409SViacheslav Ovsiienko [ 'HAVE_MLX5DV_PP_ALLOC', 'infiniband/mlx5dv.h', 12579a7e409SViacheslav Ovsiienko 'mlx5dv_pp_alloc' ], 12672f75660SOphir Munk [ 'HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR', 'infiniband/mlx5dv.h', 12772f75660SOphir Munk 'mlx5dv_dr_action_create_dest_devx_tir' ], 12872f75660SOphir Munk [ 'HAVE_IBV_DEVX_EVENT', 'infiniband/mlx5dv.h', 12972f75660SOphir Munk 'mlx5dv_devx_get_event' ], 13072f75660SOphir Munk [ 'HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER', 'infiniband/mlx5dv.h', 13172f75660SOphir Munk 'mlx5dv_dr_action_create_flow_meter' ], 13272f75660SOphir Munk [ 'HAVE_MLX5DV_MMAP_GET_NC_PAGES_CMD', 'infiniband/mlx5dv.h', 13372f75660SOphir Munk 'MLX5_MMAP_GET_NC_PAGES_CMD' ], 13472f75660SOphir Munk [ 'HAVE_MLX5DV_DR', 'infiniband/mlx5dv.h', 13572f75660SOphir Munk 'MLX5DV_DR_DOMAIN_TYPE_NIC_RX' ], 13672f75660SOphir Munk [ 'HAVE_MLX5DV_DR_ESWITCH', 'infiniband/mlx5dv.h', 13772f75660SOphir Munk 'MLX5DV_DR_DOMAIN_TYPE_FDB' ], 13872f75660SOphir Munk [ 'HAVE_MLX5DV_DR_VLAN', 'infiniband/mlx5dv.h', 13972f75660SOphir Munk 'mlx5dv_dr_action_create_push_vlan' ], 14072f75660SOphir Munk [ 'HAVE_IBV_VAR', 'infiniband/mlx5dv.h', 'mlx5dv_alloc_var' ], 14179a7e409SViacheslav Ovsiienko [ 'HAVE_MLX5_OPCODE_ENHANCED_MPSW', 'infiniband/mlx5dv.h', 14279a7e409SViacheslav Ovsiienko 'MLX5_OPCODE_ENHANCED_MPSW' ], 14379a7e409SViacheslav Ovsiienko [ 'HAVE_MLX5_OPCODE_SEND_EN', 'infiniband/mlx5dv.h', 14479a7e409SViacheslav Ovsiienko 'MLX5_OPCODE_SEND_EN' ], 14579a7e409SViacheslav Ovsiienko [ 'HAVE_MLX5_OPCODE_WAIT', 'infiniband/mlx5dv.h', 14679a7e409SViacheslav Ovsiienko 'MLX5_OPCODE_WAIT' ], 1477f6e6beeSDekel Peled [ 'HAVE_MLX5_OPCODE_ACCESS_ASO', 'infiniband/mlx5dv.h', 1487f6e6beeSDekel Peled 'MLX5_OPCODE_ACCESS_ASO' ], 14972f75660SOphir Munk [ 'HAVE_IFLA_NUM_VF', 'linux/if_link.h', 15072f75660SOphir Munk 'IFLA_NUM_VF' ], 15172f75660SOphir Munk [ 'HAVE_IFLA_EXT_MASK', 'linux/if_link.h', 15272f75660SOphir Munk 'IFLA_EXT_MASK' ], 15372f75660SOphir Munk [ 'HAVE_IFLA_PHYS_SWITCH_ID', 'linux/if_link.h', 15472f75660SOphir Munk 'IFLA_PHYS_SWITCH_ID' ], 15572f75660SOphir Munk [ 'HAVE_IFLA_PHYS_PORT_NAME', 'linux/if_link.h', 15672f75660SOphir Munk 'IFLA_PHYS_PORT_NAME' ], 15772f75660SOphir Munk [ 'HAVE_RDMA_NL_NLDEV', 'rdma/rdma_netlink.h', 15872f75660SOphir Munk 'RDMA_NL_NLDEV' ], 15972f75660SOphir Munk [ 'HAVE_RDMA_NLDEV_CMD_GET', 'rdma/rdma_netlink.h', 16072f75660SOphir Munk 'RDMA_NLDEV_CMD_GET' ], 16172f75660SOphir Munk [ 'HAVE_RDMA_NLDEV_CMD_PORT_GET', 'rdma/rdma_netlink.h', 16272f75660SOphir Munk 'RDMA_NLDEV_CMD_PORT_GET' ], 16372f75660SOphir Munk [ 'HAVE_RDMA_NLDEV_ATTR_DEV_INDEX', 'rdma/rdma_netlink.h', 16472f75660SOphir Munk 'RDMA_NLDEV_ATTR_DEV_INDEX' ], 16572f75660SOphir Munk [ 'HAVE_RDMA_NLDEV_ATTR_DEV_NAME', 'rdma/rdma_netlink.h', 16672f75660SOphir Munk 'RDMA_NLDEV_ATTR_DEV_NAME' ], 16772f75660SOphir Munk [ 'HAVE_RDMA_NLDEV_ATTR_PORT_INDEX', 'rdma/rdma_netlink.h', 16872f75660SOphir Munk 'RDMA_NLDEV_ATTR_PORT_INDEX' ], 169227813f2SXueming Li [ 'HAVE_RDMA_NLDEV_ATTR_PORT_STATE', 'rdma/rdma_netlink.h', 170227813f2SXueming Li 'RDMA_NLDEV_ATTR_PORT_STATE' ], 17172f75660SOphir Munk [ 'HAVE_RDMA_NLDEV_ATTR_NDEV_INDEX', 'rdma/rdma_netlink.h', 17272f75660SOphir Munk 'RDMA_NLDEV_ATTR_NDEV_INDEX' ], 17372f75660SOphir Munk [ 'HAVE_MLX5_DR_FLOW_DUMP', 'infiniband/mlx5dv.h', 17472f75660SOphir Munk 'mlx5dv_dump_dr_domain'], 175a3def854SJiawei Wang [ 'HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE', 'infiniband/mlx5dv.h', 176a3def854SJiawei Wang 'mlx5dv_dr_action_create_flow_sampler'], 177bebee850SSuanming Mou [ 'HAVE_MLX5DV_DR_MEM_RECLAIM', 'infiniband/mlx5dv.h', 178bebee850SSuanming Mou 'mlx5dv_dr_domain_set_reclaim_device_memory'], 1794d23dd35SJiawei Wang [ 'HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY', 'infiniband/mlx5dv.h', 1804d23dd35SJiawei Wang 'mlx5dv_dr_action_create_dest_array'], 18172f75660SOphir Munk [ 'HAVE_DEVLINK', 'linux/devlink.h', 'DEVLINK_GENL_NAME' ], 182a2999c7bSDekel Peled [ 'HAVE_MLX5_DR_CREATE_ACTION_ASO', 'infiniband/mlx5dv.h', 183a2999c7bSDekel Peled 'mlx5dv_dr_action_create_aso' ], 184471da368SOphir Munk [ 'HAVE_INFINIBAND_VERBS_H', 'infiniband/verbs.h', 185471da368SOphir Munk 'INFINIBAND_VERBS_H' ], 186f2054291SSuanming Mou [ 'HAVE_MLX5_UMR_IMKEY', 'infiniband/mlx5dv.h', 187f2054291SSuanming Mou 'MLX5_WQE_UMR_CTRL_FLAG_INLINE' ], 188a38d22edSHaifei Luo [ 'HAVE_MLX5_DR_FLOW_DUMP_RULE', 'infiniband/mlx5dv.h', 189a38d22edSHaifei Luo 'mlx5dv_dump_dr_rule' ], 1900c6285b7SBing Zhao [ 'HAVE_MLX5_DR_ACTION_ASO_CT', 'infiniband/mlx5dv.h', 1910c6285b7SBing Zhao 'MLX5DV_DR_ACTION_FLAGS_ASO_CT_DIRECTION_INITIATOR' ], 192e39226bdSJiawei Wang [ 'HAVE_MLX5_DR_ALLOW_DUPLICATE', 'infiniband/mlx5dv.h', 193e39226bdSJiawei Wang 'mlx5dv_dr_domain_allow_duplicate_rules' ], 1946ebd062eSMichael Baum [ 'HAVE_MLX5_IBV_REG_MR_IOVA', 'infiniband/verbs.h', 1956ebd062eSMichael Baum 'ibv_reg_mr_iova' ], 1960777921aSMichael Baum [ 'HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR', 'infiniband/verbs.h', 1970777921aSMichael Baum 'ibv_import_device' ], 19880f998daSMichael Savisko [ 'HAVE_MLX5DV_DR_ACTION_CREATE_DEST_ROOT_TABLE', 'infiniband/mlx5dv.h', 19980f998daSMichael Savisko 'mlx5dv_dr_action_create_dest_root_table' ], 200be8476ddSHamdan Igbaria [ 'HAVE_MLX5DV_CREATE_STEERING_ANCHOR', 'infiniband/mlx5dv.h', 201be8476ddSHamdan Igbaria 'mlx5dv_create_steering_anchor'], 20242f113c5SErez Ferber [ 'HAVE_IBV_FORK_UNNEEDED', 'infiniband/verbs.h', 20342f113c5SErez Ferber 'ibv_is_fork_initialized'], 204*4cbeba6fSSuanming Mou [ 'HAVE_IBV_DEVICE_ATTR_ESW_MGR_REG_C0', 'infiniband/mlx5dv.h', 205*4cbeba6fSSuanming Mou 'MLX5DV_CONTEXT_MASK_REG_C0' ], 20672f75660SOphir Munk] 2072235fcdaSSpike Duif libmtcr_ul_found 2082235fcdaSSpike Du has_sym_args += [ 2092235fcdaSSpike Du [ 'HAVE_MLX5_MSTFLINT', 'mstflint/mtcr.h', 'mopen' ], 2102235fcdaSSpike Du ] 2112235fcdaSSpike Duendif 21222681deeSAlex Vesker 21372f75660SOphir Munkforeach arg:has_sym_args 21433d66940SBruce Richardson mlx5_config.set(arg[0], cc.has_header_symbol(arg[1], arg[2], dependencies: libs, args: cflags)) 21572f75660SOphir Munkendforeach 21672f75660SOphir Munkforeach arg:has_member_args 21772f75660SOphir Munk file_prefix = '#include <' + arg[1] + '>' 21833d66940SBruce Richardson mlx5_config.set(arg[0], 21933d66940SBruce Richardson cc.has_member(arg[2], arg[3], prefix : file_prefix, dependencies: libs, args: cflags)) 22072f75660SOphir Munkendforeach 22172f75660SOphir Munk 22272f75660SOphir Munk# Build Glue Library 22372f75660SOphir Munkif dlopen_ibverbs 22472f75660SOphir Munk dlopen_name = 'mlx5_glue' 225450b83bbSAli Alnubani dlopen_lib_name = 'rte_common_' + dlopen_name 22672f75660SOphir Munk dlopen_so_version = LIB_GLUE_VERSION 22772f75660SOphir Munk dlopen_sources = files('mlx5_glue.c') 22872f75660SOphir Munk dlopen_install_dir = [ eal_pmd_path + '-glue' ] 22972f75660SOphir Munk dlopen_includes = [global_inc] 23099a2dd95SBruce Richardson dlopen_includes += include_directories('../../../../lib/eal/include/generic') 231487599f1SThomas Monjalon dlopen_includes += include_directories('..') 23272f75660SOphir Munk shared_lib = shared_library( 23372f75660SOphir Munk dlopen_lib_name, 23472f75660SOphir Munk dlopen_sources, 23572f75660SOphir Munk include_directories: dlopen_includes, 23672f75660SOphir Munk c_args: cflags, 23772f75660SOphir Munk dependencies: libs, 23872f75660SOphir Munk link_args: [ 23972f75660SOphir Munk '-Wl,-export-dynamic', 24072f75660SOphir Munk '-Wl,-h,@0@'.format(LIB_GLUE), 24172f75660SOphir Munk ], 24272f75660SOphir Munk soversion: dlopen_so_version, 24372f75660SOphir Munk install: true, 24472f75660SOphir Munk install_dir: dlopen_install_dir, 24572f75660SOphir Munk ) 24672f75660SOphir Munkendif 247