From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nelio Laranjeiro Subject: [PATCH 2/2] net/mlx: add meson build support Date: Mon, 27 Aug 2018 13:10:53 +0200 Message-ID: References: <7812af2267017898332783e934bef9478814ae96.1535361299.git.nelio.laranjeiro@6wind.com> To: dev@dpdk.org, Yongseok Koh , Shahaf Shuler , Bruce Richardson Return-path: Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id A1EDC4F94 for ; Mon, 27 Aug 2018 13:11:20 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id n2-v6so13221276wrw.7 for ; Mon, 27 Aug 2018 04:11:20 -0700 (PDT) In-Reply-To: <7812af2267017898332783e934bef9478814ae96.1535361299.git.nelio.laranjeiro@6wind.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Adds a configuration item to enable those drivers and also to configure it in 'glue mode'. Option driver_mlx{4,5}_glue_enable will enable its compilation with the creation for the librte_pmd_mlx{4,5}_glue.so.xx.yy.z library whereas driver_mlx5_enable will configure the compilation without this glue library. driver_mlx{4,5}_glue_enable overrides driver_mlx{4,5}_enable meson's option. To avoid modifying the whole sources and keep the compatibility with current build systems, the mlx{4,5}_autoconf.h is still generated by invoking DPDK scripts though meson's run_command() instead of using has_types, has_members, ... commands. Signed-off-by: Nelio Laranjeiro --- drivers/net/meson.build | 2 + drivers/net/mlx4/meson.build | 109 +++++++ drivers/net/mlx5/meson.build | 561 +++++++++++++++++++++++++++++++++++ meson_options.txt | 8 + 4 files changed, 680 insertions(+) create mode 100644 drivers/net/mlx4/meson.build create mode 100644 drivers/net/mlx5/meson.build diff --git a/drivers/net/meson.build b/drivers/net/meson.build index 9c28ed4da..c7a2d0e7d 100644 --- a/drivers/net/meson.build +++ b/drivers/net/meson.build @@ -18,6 +18,8 @@ drivers = ['af_packet', 'ixgbe', 'kni', 'liquidio', + 'mlx4', + 'mlx5', 'mvpp2', 'netvsc', 'nfp', diff --git a/drivers/net/mlx4/meson.build b/drivers/net/mlx4/meson.build new file mode 100644 index 000000000..ccaf03433 --- /dev/null +++ b/drivers/net/mlx4/meson.build @@ -0,0 +1,109 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2018 6WIND S.A. +# Copyright 2018 Mellanox Technologies, Ltd + +# As there is no more configuration file to activate/configure the PMD it will +# use some variables here to configure it. +pmd_dlopen = get_option('enable_driver_mlx4_glue') +build = get_option('enable_driver_mlx4') or pmd_dlopen +# dpdk_conf.set('RTE_LIBRTE_MLX4_DEBUG', 1) +# Glue configuratin +LIB_GLUE_BASE = 'librte_pmd_mlx4_glue.so' +LIB_GLUE_VERSION = '18.02.0' +LIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION +if pmd_dlopen + dpdk_conf.set('RTE_LIBRTE_MLX4_DLOPEN_DEPS', 1) + cflags += [ + '-DMLX4_GLUE="@0@"'.format(LIB_GLUE), + '-DMLX4_GLUE_VERSION="@0@"'.format(LIB_GLUE_VERSION), + '-ldl', + ] +endif +# Compile PMD +if build + allow_experimental_apis = true + ext_deps += [ cc.find_library('mnl') ] + # Search for ibverbs and mlx4 library. + # note: meson find_library accept directories arrays but they must be + # stripped i.e. no extra space. + flags = get_option('extra_ldflags') + libs_dir = [] + foreach flag:flags.split('-L') + flag = flag.strip() + if flag != '' + libs_dir += [ flag.strip() ] + endif + endforeach + foreach libname:['ibverbs', 'mlx4'] + lib = cc.find_library(libname, dirs:libs_dir, required:false) + if not lib.found() + lib = cc.find_library(libname, required:true) + endif + ext_deps += [ lib ] + endforeach + sources = files( + 'mlx4.c', + 'mlx4_ethdev.c', + 'mlx4_flow.c', + 'mlx4_intr.c', + 'mlx4_mr.c', + 'mlx4_rxq.c', + 'mlx4_rxtx.c', + 'mlx4_txq.c', + 'mlx4_utils.c', + ) + if not pmd_dlopen + sources += files('mlx4_glue.c') + endif + cflags += [ + '-O3', + '-Wall', + '-Wextra', + '-g', + '-std=c11', + '-I.', + '-D_BSD_SOURCE', + '-D_DEFAULT_SOURCE', + '-D_XOPEN_SOURCE=600', + '-Wno-strict-prototypes', + ] + if dpdk_conf.has('RTE_LIBRTE_MLX4_DEBUG') + cflags += [ '-pedantic', '-UNDEBUG', '-DPEDANTIC' ] + else + cflags += [ '-DNDEBUG', '-UPEDANTIC' ] + endif + # To maintain the compatibility with the make build system + # mlx4_autoconf.h file is still generated. + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx4_autoconf.h', + 'HAVE_IBV_MLX4_WQE_LSO_SEG', + 'infiniband/mlx4dv.h', + 'type', 'struct mlx4_wqe_lso_seg') + if r.returncode() != 0 + error('autoconfiguration fail') + endif +endif +# Build Glue Library +if pmd_dlopen + dlopen_name = 'mlx4_glue' + dlopen_lib_name = driver_name_fmt.format(dlopen_name) + dlopen_so_version = LIB_GLUE_VERSION + dlopen_sources = files('mlx4_glue.c') + dlopen_install_dir = [ eal_pmd_path + '-glue' ] + shared_lib = shared_library( + dlopen_lib_name, + dlopen_sources, + include_directories: global_inc, + c_args: cflags + [ get_option('extra_cflags') ], + link_args: [ + '-Wl,-export-dynamic', + '-Wl,-h,@0@'.format(LIB_GLUE), + flags, + '-lmlx4', + '-libverbs', + ], + soversion: dlopen_so_version, + install: true, + install_dir: dlopen_install_dir, + ) +endif diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build new file mode 100644 index 000000000..1124aab48 --- /dev/null +++ b/drivers/net/mlx5/meson.build @@ -0,0 +1,561 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2018 6WIND S.A. +# Copyright 2018 Mellanox Technologies, Ltd + +# As there is no more configuration file to activate/configure the PMD it will +# use some variables here to configure it. +pmd_dlopen = get_option('enable_driver_mlx5_glue') +build = get_option('enable_driver_mlx5') or pmd_dlopen +# dpdk_conf.set('RTE_LIBRTE_MLX5_DEBUG', 1) +# Glue configuratin +LIB_GLUE_BASE = 'librte_pmd_mlx5_glue.so' +LIB_GLUE_VERSION = '18.05.0' +LIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION +if pmd_dlopen + dpdk_conf.set('RTE_LIBRTE_MLX5_DLOPEN_DEPS', 1) + cflags += [ + '-DMLX5_GLUE="@0@"'.format(LIB_GLUE), + '-DMLX5_GLUE_VERSION="@0@"'.format(LIB_GLUE_VERSION), + '-ldl', + ] +endif +# Compile PMD +if build + allow_experimental_apis = true + ext_deps += [ cc.find_library('mnl') ] + # Search for ibverbs and mlx5 library. + # note: meson find_library accept directories arrays but they must be + # stripped i.e. no extra space. + flags = get_option('extra_ldflags') + libs_dir = [] + foreach flag:flags.split('-L') + flag = flag.strip() + if flag != '' + libs_dir += [ flag.strip() ] + endif + endforeach + foreach libname:['ibverbs', 'mlx5'] + lib = cc.find_library(libname, dirs:libs_dir, required:false) + if not lib.found() + lib = cc.find_library(libname, required:true) + endif + ext_deps += [ lib ] + endforeach + ext_deps += [ lib ] + sources = files( + 'mlx5.c', + 'mlx5_ethdev.c', + 'mlx5_flow.c', + 'mlx5_mac.c', + 'mlx5_mr.c', + 'mlx5_nl.c', + 'mlx5_nl_flow.c', + 'mlx5_rss.c', + 'mlx5_rxmode.c', + 'mlx5_rxq.c', + 'mlx5_rxtx.c', + 'mlx5_socket.c', + 'mlx5_stats.c', + 'mlx5_trigger.c', + 'mlx5_txq.c', + 'mlx5_vlan.c', + ) + if dpdk_conf.has('RTE_ARCH_X86_64') or dpdk_conf.has('RTE_ARCH_ARM64') + sources += files('mlx5_rxtx_vec.c') + endif + if not pmd_dlopen + sources += files('mlx5_glue.c') + endif + cflags += [ + '-O3', + '-Wall', + '-Wextra', + '-g', + '-std=c11', + '-I.', + '-D_BSD_SOURCE', + '-D_DEFAULT_SOURCE', + '-D_XOPEN_SOURCE=600', + '-Wno-strict-prototypes', + ] + if dpdk_conf.has('RTE_LIBRTE_MLX5_DEBUG') + cflags += [ '-pedantic', '-UNDEBUG', '-DPEDANTIC' ] + else + cflags += [ '-DNDEBUG', '-UPEDANTIC' ] + endif + # To maintain the compatibility with the make build system + # mlx5_autoconf.h file is still generated. + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT', + 'infiniband/mlx5dv.h', + 'enum', 'MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_DEVICE_TUNNEL_SUPPORT', + 'infiniband/mlx5dv.h', + 'enum', 'MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_DEVICE_MPLS_SUPPORT', + 'infiniband/verbs.h', + 'enum', 'IBV_FLOW_SPEC_MPLS') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', + 'infiniband/verbs.h', + 'enum', 'IBV_WQ_FLAG_RX_END_PADDING') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_MLX5_MOD_SWP', + 'infiniband/mlx5dv.h', + 'type', 'struct mlx5dv_sw_parsing_caps') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_MLX5_MOD_MPW', + 'infiniband/mlx5dv.h', + 'enum', 'MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_MLX5_MOD_CQE_128B_COMP', + 'infiniband/mlx5dv.h', + 'enum', 'MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_ETHTOOL_LINK_MODE_25G', + '/usr/include/linux/ethtool.h', + 'enum', 'ETHTOOL_LINK_MODE_25000baseCR_Full_BIT') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_ETHTOOL_LINK_MODE_50G', + '/usr/include/linux/ethtool.h', + 'enum', 'ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_ETHTOOL_LINK_MODE_100G', + '/usr/include/linux/ethtool.h', + 'enum', 'ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT', + 'infiniband/verbs.h', + 'type', 'struct ibv_counter_set_init_attr') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NL_NLDEV', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NL_NLDEV') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NLDEV_CMD_GET', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NLDEV_CMD_GET') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NLDEV_CMD_PORT_GET', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NLDEV_CMD_PORT_GET') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NLDEV_ATTR_DEV_INDEX', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NLDEV_ATTR_DEV_INDEX') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NLDEV_ATTR_DEV_NAME', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NLDEV_ATTR_DEV_NAME') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NLDEV_ATTR_PORT_INDEX', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NLDEV_ATTR_PORT_INDEX') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_RDMA_NLDEV_ATTR_NDEV_INDEX', + 'rdma/rdma_netlink.h', + 'enum', 'RDMA_NLDEV_ATTR_NDEV_INDEX') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IFLA_PHYS_SWITCH_ID', + 'linux/if_link.h', + 'enum', 'IFLA_PHYS_SWITCH_ID') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_IFLA_PHYS_PORT_NAME', + 'linux/if_link.h', + 'enum', 'IFLA_PHYS_PORT_NAME') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_ACT', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_ACT') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_FLAGS', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_FLAGS') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_ETH_TYPE', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_ETH_TYPE') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_ETH_DST', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_ETH_DST') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_ETH_DST_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_ETH_DST_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_ETH_SRC', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_ETH_SRC') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_ETH_SRC_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_ETH_SRC_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IP_PROTO', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IP_PROTO') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV4_SRC', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV4_SRC') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV4_SRC_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV4_SRC_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV4_DST', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV4_DST') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV4_DST_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV4_DST_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV6_SRC', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV6_SRC') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV6_SRC_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV6_SRC_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV6_DST', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV6_DST') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_IPV6_DST_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_IPV6_DST_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_TCP_SRC', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_TCP_SRC') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_TCP_SRC_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_TCP_SRC_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_TCP_DST', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_TCP_DST') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_TCP_DST_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_TCP_DST_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_UDP_SRC', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_UDP_SRC') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_UDP_SRC_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_UDP_SRC_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_UDP_DST', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_UDP_DST') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_UDP_DST_MASK', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_UDP_DST_MASK') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_VLAN_ID', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_VLAN_ID') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_VLAN_PRIO', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_VLAN_PRIO') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TCA_FLOWER_KEY_VLAN_ETH_TYPE', + 'linux/pkt_cls.h', + 'enum', 'TCA_FLOWER_KEY_VLAN_ETH_TYPE') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_TC_ACT_VLAN', + 'linux/tc_act/tc_vlan.h', + 'enum', 'TCA_VLAN_PUSH_VLAN_PRIORITY') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_40000baseKR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_40000baseKR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_40000baseCR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_40000baseCR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_40000baseSR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_40000baseSR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_40000baseLR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_40000baseLR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_56000baseKR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_56000baseKR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_56000baseCR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_56000baseCR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_56000baseSR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_56000baseSR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif + r = run_command('sh', '../../../buildtools/auto-config-h.sh', + 'mlx5_autoconf.h', + 'HAVE_SUPPORTED_56000baseLR4_Full', + '/usr/include/linux/ethtool.h', + 'define', 'SUPPORTED_56000baseLR4_Full') + if r.returncode() != 0 + error('autoconfiguration fail') + endif +endif +# Build Glue Library +if pmd_dlopen + dlopen_name = 'mlx5_glue' + dlopen_lib_name = driver_name_fmt.format(dlopen_name) + dlopen_so_version = LIB_GLUE_VERSION + dlopen_sources = files('mlx5_glue.c') + dlopen_install_dir = [ eal_pmd_path + '-glue' ] + shared_lib = shared_library( + dlopen_lib_name, + dlopen_sources, + include_directories: global_inc, + c_args: cflags + [ get_option('extra_cflags') ], + link_args: [ + '-Wl,-export-dynamic', + '-Wl,-h,@0@'.format(LIB_GLUE), + flags, + '-lmlx5', + '-libverbs', + ], + soversion: dlopen_so_version, + install: true, + install_dir: dlopen_install_dir, + ) +endif diff --git a/meson_options.txt b/meson_options.txt index da6373a2c..c75108e05 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -24,3 +24,11 @@ option('tests', type: 'boolean', value: true, description: 'build unit tests') option('extra_cflags', type: 'string', description: 'Extra compiler flags') option('extra_ldflags', type: 'string', description: 'Extra linker flags') +option('enable_driver_mlx5', type: 'boolean', value: false, + description: 'Enable Mellanox PMD for ConnectX-4/5 NIC') +option('enable_driver_mlx5_glue', type: 'boolean', value: false, + description: 'Enable Mellanox PMD for ConnectX-4/5 NIC glue library') +option('enable_driver_mlx4', type: 'boolean', value: false, + description: 'Enable Mellanox PMD for ConnectX-3 NIC') +option('enable_driver_mlx4_glue', type: 'boolean', value: false, + description: 'Enable Mellanox PMD for ConnectX-3 NIC glue library') -- 2.18.0