[v5] net/mlx: add meson build support
Checks
Commit Message
From: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Compile Mellanox drivers when their external dependencies are met. A
glue version of the driver can still be requested by using the
-Denable_driver_mlx_glue=true
To avoid modifying the whole sources and keep the compatibility with
current build systems (e.g. make), the mlx{4,5}_autoconf.h is still
generated.
Meson will try to find the required external libraries. When they are
not installed system wide, they can be provided though CFLAGS, LDFLAGS
and LD_LIBRARY_PATH environment variables, example (considering
RDMA-Core is installed in /tmp/rdma-core):
# CLFAGS=-I/tmp/rdma-core/build/include \
LDFLAGS=-L/tmp/rdma-core/build/lib \
LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
meson output
# LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
ninja -C output install
Note: LD_LIBRARY_PATH before ninja is necessary when the meson
configuration has changed (e.g. meson configure has been called), in
such situation the LD_LIBRARY_PATH is necessary to invoke the
autoconfiguration script.
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
Changes in v5:
- use meson tool to generate Mellanox config file instead of DPDK custom scripts.
Changes in v4:
- remove implicit -Wall flag (set by default by meson),
- add item information in the autoconfiguration failure error message,
- reword the help for the glue library option,
Changes in v3:
Sanitize the build files:
- remove enable_driver_mlx{4,5} options,
- test cflags capabilities before using them,
- remove old autoconfiguration file,
- use an array for autoconfiguration and put them in the build directory,
- use dependencies in shared_library for link arguments.
Changes in v2:
- dropped patch https://patches.dpdk.org/patch/43897/
- remove extra_{cflags,ldflags} as already honored by meson through
environment variables.
---
drivers/net/meson.build | 2 +
drivers/net/mlx4/meson.build | 110 +++++++++++++++++++++
drivers/net/mlx5/meson.build | 231 +++++++++++++++++++++++++++++++++++++++++++
meson_options.txt | 2 +
4 files changed, 345 insertions(+)
create mode 100644 drivers/net/mlx4/meson.build
create mode 100644 drivers/net/mlx5/meson.build
Comments
On Wed, Sep 05, 2018 at 02:47:46PM +0300, Shahaf Shuler wrote:
> From: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
>
> Compile Mellanox drivers when their external dependencies are met. A
> glue version of the driver can still be requested by using the
> -Denable_driver_mlx_glue=true
>
> To avoid modifying the whole sources and keep the compatibility with
> current build systems (e.g. make), the mlx{4,5}_autoconf.h is still
> generated.
>
> Meson will try to find the required external libraries. When they are
> not installed system wide, they can be provided though CFLAGS, LDFLAGS
> and LD_LIBRARY_PATH environment variables, example (considering
> RDMA-Core is installed in /tmp/rdma-core):
>
> # CLFAGS=-I/tmp/rdma-core/build/include \
> LDFLAGS=-L/tmp/rdma-core/build/lib \
> LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
> meson output
> # LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
> ninja -C output install
>
> Note: LD_LIBRARY_PATH before ninja is necessary when the meson
> configuration has changed (e.g. meson configure has been called), in
> such situation the LD_LIBRARY_PATH is necessary to invoke the
> autoconfiguration script.
>
> Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
> Changes in v5:
>
> - use meson tool to generate Mellanox config file instead of DPDK custom scripts.
>
<snip>
> + # To maintain the compatibility with the make build system
> + # mlx5_autoconf.h file is still generated.
> + # input array for meson symbol search:
> + # [ "MACRO to define if found", "header for the search",
> + # "type/enum/define", "symbol to search",
> + # "struct member to search (type only)]
> + #
> + args = [
> + [ 'HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT', 'infiniband/mlx5dv.h',
> + 'enum', 'MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX' ],
> + [ 'HAVE_IBV_DEVICE_TUNNEL_SUPPORT', 'infiniband/mlx5dv.h',
> + 'enum', 'MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS' ],
> + [ 'HAVE_IBV_MLX5_MOD_MPW', 'infiniband/mlx5dv.h',
> + 'enum', 'MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED' ],
> + [ 'HAVE_IBV_MLX5_MOD_SWP', 'infiniband/mlx5dv.h',
> + 'type', 'struct mlx5dv_sw_parsing_caps',
> + 'sw_parsing_offloads' ],
> + [ 'HAVE_IBV_MLX5_MOD_CQE_128B_COMP', 'infiniband/mlx5dv.h',
> + 'enum', 'MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP' ],
> + [ 'HAVE_IBV_DEVICE_MPLS_SUPPORT', 'infiniband/verbs.h',
> + 'enum', 'IBV_FLOW_SPEC_MPLS' ],
> + [ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h',
> + 'enum', 'IBV_WQ_FLAG_RX_END_PADDING' ],
> + [ 'HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT', 'infiniband/verbs.h',
> + 'type', 'struct ibv_counter_set_init_attr',
> + 'counter_set_id' ],
> + [ 'HAVE_SUPPORTED_40000baseKR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_40000baseKR4_Full' ],
> + [ 'HAVE_SUPPORTED_40000baseCR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_40000baseCR4_Full' ],
> + [ 'HAVE_SUPPORTED_40000baseSR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_40000baseSR4_Full' ],
> + [ 'HAVE_SUPPORTED_40000baseLR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_40000baseLR4_Full' ],
> + [ 'HAVE_SUPPORTED_56000baseKR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_56000baseKR4_Full' ],
> + [ 'HAVE_SUPPORTED_56000baseCR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_56000baseCR4_Full' ],
> + [ 'HAVE_SUPPORTED_56000baseSR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_56000baseSR4_Full' ],
> + [ 'HAVE_SUPPORTED_56000baseLR4_Full', 'linux/ethtool.h',
> + 'define', 'SUPPORTED_56000baseLR4_Full' ],
> + [ 'HAVE_ETHTOOL_LINK_MODE_25G', 'linux/ethtool.h',
> + 'enum', 'ETHTOOL_LINK_MODE_25000baseCR_Full_BIT' ],
> + [ 'HAVE_ETHTOOL_LINK_MODE_50G', 'linux/ethtool.h',
> + 'enum', 'ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT' ],
> + [ 'HAVE_ETHTOOL_LINK_MODE_100G', 'linux/ethtool.h',
> + 'enum', 'ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT' ],
> + [ 'HAVE_IFLA_PHYS_SWITCH_ID', 'linux/if_link.h',
> + 'enum', 'IFLA_PHYS_SWITCH_ID' ],
> + [ 'HAVE_IFLA_PHYS_PORT_NAME', 'linux/if_link.h',
> + 'enum', 'IFLA_PHYS_PORT_NAME' ],
> + [ 'HAVE_TCA_FLOWER_ACT', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_ACT' ],
> + [ 'HAVE_TCA_FLOWER_FLAGS', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_FLAGS' ],
> + [ 'HAVE_TCA_FLOWER_KEY_ETH_TYPE', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_ETH_TYPE' ],
> + [ 'HAVE_TCA_FLOWER_KEY_ETH_DST', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_ETH_DST' ],
> + [ 'HAVE_TCA_FLOWER_KEY_ETH_DST_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_ETH_DST_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_ETH_SRC', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_ETH_SRC' ],
> + [ 'HAVE_TCA_FLOWER_KEY_ETH_SRC_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_ETH_SRC_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IP_PROTO', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IP_PROTO' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV4_SRC', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV4_SRC' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV4_SRC_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV4_SRC_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV4_DST', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV4_DST' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV4_DST_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV4_DST_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV6_SRC', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV6_SRC' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV6_SRC_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV6_SRC_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV6_DST', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV6_DST' ],
> + [ 'HAVE_TCA_FLOWER_KEY_IPV6_DST_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_IPV6_DST_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_TCP_SRC', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_TCP_SRC' ],
> + [ 'HAVE_TCA_FLOWER_KEY_TCP_SRC_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_TCP_SRC_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_TCP_DST', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_TCP_DST' ],
> + [ 'HAVE_TCA_FLOWER_KEY_TCP_DST_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_TCP_DST_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_UDP_SRC', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_UDP_SRC' ],
> + [ 'HAVE_TCA_FLOWER_KEY_UDP_SRC_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_UDP_SRC_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_UDP_DST', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_UDP_DST' ],
> + [ 'HAVE_TCA_FLOWER_KEY_UDP_DST_MASK', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_UDP_DST_MASK' ],
> + [ 'HAVE_TCA_FLOWER_KEY_VLAN_ID', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_VLAN_ID' ],
> + [ 'HAVE_TCA_FLOWER_KEY_VLAN_PRIO', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_VLAN_PRIO' ],
> + [ 'HAVE_TCA_FLOWER_KEY_VLAN_ETH_TYPE', 'linux/pkt_cls.h',
> + 'enum', 'TCA_FLOWER_KEY_VLAN_ETH_TYPE' ],
> + [ 'HAVE_TC_ACT_VLAN', 'linux/tc_act/tc_vlan.h', 'enum',
> + 'TCA_VLAN_PUSH_VLAN_PRIORITY' ],
> + [ 'HAVE_RDMA_NL_NLDEV', 'rdma/rdma_netlink.h', 'enum',
> + 'RDMA_NL_NLDEV' ],
> + [ 'HAVE_RDMA_NLDEV_CMD_GET', 'rdma/rdma_netlink.h', 'enum',
> + 'RDMA_NLDEV_CMD_GET' ],
> + [ 'HAVE_RDMA_NLDEV_CMD_PORT_GET', 'rdma/rdma_netlink.h',
> + 'enum', 'RDMA_NLDEV_CMD_PORT_GET' ],
> + [ 'HAVE_RDMA_NLDEV_ATTR_DEV_INDEX', 'rdma/rdma_netlink.h',
> + 'enum', 'RDMA_NLDEV_ATTR_DEV_INDEX' ],
> + [ 'HAVE_RDMA_NLDEV_ATTR_DEV_NAME', 'rdma/rdma_netlink.h',
> + 'enum', 'RDMA_NLDEV_ATTR_DEV_NAME' ],
> + [ 'HAVE_RDMA_NLDEV_ATTR_PORT_INDEX', 'rdma/rdma_netlink.h',
> + 'enum', 'RDMA_NLDEV_ATTR_PORT_INDEX' ],
> + [ 'HAVE_RDMA_NLDEV_ATTR_NDEV_INDEX', 'rdma/rdma_netlink.h',
> + 'enum', 'RDMA_NLDEV_ATTR_NDEV_INDEX' ],
> + ]
> + run_command('rm', '-f', meson.current_build_dir() + '/mlx5_autoconf.h')
> + config = configuration_data()
> + foreach arg:args
> + if arg[2] == 'type'
> + file_prefix = '#include<' + arg[1] + '>'
> + has = cc.has_member(arg[3], arg[4], prefix : file_prefix)
> + else
> + has = cc.has_header_symbol(arg[1], arg[3])
> + endif
> + if has
> + config.set(arg[0], 1)
> + endif
> + endforeach
> + configure_file(output : 'mlx5_autoconf.h', configuration : config)
> +endif
couple of minor points:
* These new additions use tab rather than space for indent. The standard
with meson I think is normally spaces, but I (inadvertently) added all
other DPDK meson.build files with tabs, so for consistency I think it
would be good if the whole file used tabs i.e. change all the other lines
apart from your new ones in v5.
* is the "rm" command really necessary? I would expect the configure_file()
function to just do the right thing here when replacing the file.
* Would you consider splitting the args array into two arrays, one for the
"type" values and another for the enum/define ones? This would mean
having two loops, but the loops themselves would be clearer and shorter -
as would the arrays. Especially since according to
http://mesonbuild.com/Configuration.html
a boolean false converts to an "undef", rather than a 0/1 value.
For example:
foreach arg:has_sym_args
config.set(arg[0], cc.has_header_symbol(arg[1], arg[3]))
endforeach
* Very minor suggestion: is it neater to use "args: '-include ' + arg[1]",
instead of using prefix with the #include syntax? [Assuming the former
works]
Thanks,
/Bruce
On Fri, Sep 07, 2018 at 11:34:29AM +0100, Bruce Richardson wrote:
> On Wed, Sep 05, 2018 at 02:47:46PM +0300, Shahaf Shuler wrote:
> > From: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> >
> > Compile Mellanox drivers when their external dependencies are met. A
> > glue version of the driver can still be requested by using the
> > -Denable_driver_mlx_glue=true
> >
> > To avoid modifying the whole sources and keep the compatibility with
> > current build systems (e.g. make), the mlx{4,5}_autoconf.h is still
> > generated.
> >
> > Meson will try to find the required external libraries. When they are
> > not installed system wide, they can be provided though CFLAGS, LDFLAGS
> > and LD_LIBRARY_PATH environment variables, example (considering
> > RDMA-Core is installed in /tmp/rdma-core):
> >
> > # CLFAGS=-I/tmp/rdma-core/build/include \
> > LDFLAGS=-L/tmp/rdma-core/build/lib \
> > LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
> > meson output
> > # LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
> > ninja -C output install
> >
> > Note: LD_LIBRARY_PATH before ninja is necessary when the meson
> > configuration has changed (e.g. meson configure has been called), in
> > such situation the LD_LIBRARY_PATH is necessary to invoke the
> > autoconfiguration script.
> >
> > Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> > Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
> > Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> > ---
> > Changes in v5:
> >
> > - use meson tool to generate Mellanox config file instead of DPDK custom scripts.
> >
>
> <snip>
>
> > + # To maintain the compatibility with the make build system
> > + # mlx5_autoconf.h file is still generated.
> > + # input array for meson symbol search:
> > + # [ "MACRO to define if found", "header for the search",
> > + # "type/enum/define", "symbol to search",
> > + # "struct member to search (type only)]
> > + #
> > + args = [
> > + [ 'HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT', 'infiniband/mlx5dv.h',
> > + 'enum', 'MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX' ],
> > + [ 'HAVE_IBV_DEVICE_TUNNEL_SUPPORT', 'infiniband/mlx5dv.h',
> > + 'enum', 'MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS' ],
> > + [ 'HAVE_IBV_MLX5_MOD_MPW', 'infiniband/mlx5dv.h',
> > + 'enum', 'MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED' ],
> > + [ 'HAVE_IBV_MLX5_MOD_SWP', 'infiniband/mlx5dv.h',
> > + 'type', 'struct mlx5dv_sw_parsing_caps',
> > + 'sw_parsing_offloads' ],
> > + [ 'HAVE_IBV_MLX5_MOD_CQE_128B_COMP', 'infiniband/mlx5dv.h',
> > + 'enum', 'MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP' ],
> > + [ 'HAVE_IBV_DEVICE_MPLS_SUPPORT', 'infiniband/verbs.h',
> > + 'enum', 'IBV_FLOW_SPEC_MPLS' ],
> > + [ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h',
> > + 'enum', 'IBV_WQ_FLAG_RX_END_PADDING' ],
> > + [ 'HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT', 'infiniband/verbs.h',
> > + 'type', 'struct ibv_counter_set_init_attr',
> > + 'counter_set_id' ],
> > + [ 'HAVE_SUPPORTED_40000baseKR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_40000baseKR4_Full' ],
> > + [ 'HAVE_SUPPORTED_40000baseCR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_40000baseCR4_Full' ],
> > + [ 'HAVE_SUPPORTED_40000baseSR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_40000baseSR4_Full' ],
> > + [ 'HAVE_SUPPORTED_40000baseLR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_40000baseLR4_Full' ],
> > + [ 'HAVE_SUPPORTED_56000baseKR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_56000baseKR4_Full' ],
> > + [ 'HAVE_SUPPORTED_56000baseCR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_56000baseCR4_Full' ],
> > + [ 'HAVE_SUPPORTED_56000baseSR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_56000baseSR4_Full' ],
> > + [ 'HAVE_SUPPORTED_56000baseLR4_Full', 'linux/ethtool.h',
> > + 'define', 'SUPPORTED_56000baseLR4_Full' ],
> > + [ 'HAVE_ETHTOOL_LINK_MODE_25G', 'linux/ethtool.h',
> > + 'enum', 'ETHTOOL_LINK_MODE_25000baseCR_Full_BIT' ],
> > + [ 'HAVE_ETHTOOL_LINK_MODE_50G', 'linux/ethtool.h',
> > + 'enum', 'ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT' ],
> > + [ 'HAVE_ETHTOOL_LINK_MODE_100G', 'linux/ethtool.h',
> > + 'enum', 'ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT' ],
> > + [ 'HAVE_IFLA_PHYS_SWITCH_ID', 'linux/if_link.h',
> > + 'enum', 'IFLA_PHYS_SWITCH_ID' ],
> > + [ 'HAVE_IFLA_PHYS_PORT_NAME', 'linux/if_link.h',
> > + 'enum', 'IFLA_PHYS_PORT_NAME' ],
> > + [ 'HAVE_TCA_FLOWER_ACT', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_ACT' ],
> > + [ 'HAVE_TCA_FLOWER_FLAGS', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_FLAGS' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_ETH_TYPE', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_ETH_TYPE' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_ETH_DST', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_ETH_DST' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_ETH_DST_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_ETH_DST_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_ETH_SRC', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_ETH_SRC' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_ETH_SRC_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_ETH_SRC_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IP_PROTO', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IP_PROTO' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV4_SRC', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV4_SRC' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV4_SRC_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV4_SRC_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV4_DST', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV4_DST' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV4_DST_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV4_DST_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV6_SRC', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV6_SRC' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV6_SRC_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV6_SRC_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV6_DST', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV6_DST' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_IPV6_DST_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_IPV6_DST_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_TCP_SRC', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_TCP_SRC' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_TCP_SRC_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_TCP_SRC_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_TCP_DST', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_TCP_DST' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_TCP_DST_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_TCP_DST_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_UDP_SRC', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_UDP_SRC' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_UDP_SRC_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_UDP_SRC_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_UDP_DST', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_UDP_DST' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_UDP_DST_MASK', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_UDP_DST_MASK' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_VLAN_ID', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_VLAN_ID' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_VLAN_PRIO', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_VLAN_PRIO' ],
> > + [ 'HAVE_TCA_FLOWER_KEY_VLAN_ETH_TYPE', 'linux/pkt_cls.h',
> > + 'enum', 'TCA_FLOWER_KEY_VLAN_ETH_TYPE' ],
> > + [ 'HAVE_TC_ACT_VLAN', 'linux/tc_act/tc_vlan.h', 'enum',
> > + 'TCA_VLAN_PUSH_VLAN_PRIORITY' ],
> > + [ 'HAVE_RDMA_NL_NLDEV', 'rdma/rdma_netlink.h', 'enum',
> > + 'RDMA_NL_NLDEV' ],
> > + [ 'HAVE_RDMA_NLDEV_CMD_GET', 'rdma/rdma_netlink.h', 'enum',
> > + 'RDMA_NLDEV_CMD_GET' ],
> > + [ 'HAVE_RDMA_NLDEV_CMD_PORT_GET', 'rdma/rdma_netlink.h',
> > + 'enum', 'RDMA_NLDEV_CMD_PORT_GET' ],
> > + [ 'HAVE_RDMA_NLDEV_ATTR_DEV_INDEX', 'rdma/rdma_netlink.h',
> > + 'enum', 'RDMA_NLDEV_ATTR_DEV_INDEX' ],
> > + [ 'HAVE_RDMA_NLDEV_ATTR_DEV_NAME', 'rdma/rdma_netlink.h',
> > + 'enum', 'RDMA_NLDEV_ATTR_DEV_NAME' ],
> > + [ 'HAVE_RDMA_NLDEV_ATTR_PORT_INDEX', 'rdma/rdma_netlink.h',
> > + 'enum', 'RDMA_NLDEV_ATTR_PORT_INDEX' ],
> > + [ 'HAVE_RDMA_NLDEV_ATTR_NDEV_INDEX', 'rdma/rdma_netlink.h',
> > + 'enum', 'RDMA_NLDEV_ATTR_NDEV_INDEX' ],
> > + ]
> > + run_command('rm', '-f', meson.current_build_dir() + '/mlx5_autoconf.h')
> > + config = configuration_data()
> > + foreach arg:args
> > + if arg[2] == 'type'
> > + file_prefix = '#include<' + arg[1] + '>'
> > + has = cc.has_member(arg[3], arg[4], prefix : file_prefix)
> > + else
> > + has = cc.has_header_symbol(arg[1], arg[3])
> > + endif
> > + if has
> > + config.set(arg[0], 1)
> > + endif
> > + endforeach
> > + configure_file(output : 'mlx5_autoconf.h', configuration : config)
> > +endif
>
> couple of minor points:
> * These new additions use tab rather than space for indent. The standard
> with meson I think is normally spaces, but I (inadvertently) added all
> other DPDK meson.build files with tabs, so for consistency I think it
> would be good if the whole file used tabs i.e. change all the other lines
> apart from your new ones in v5.
>
> * is the "rm" command really necessary? I would expect the configure_file()
> function to just do the right thing here when replacing the file.
>
> * Would you consider splitting the args array into two arrays, one for the
> "type" values and another for the enum/define ones? This would mean
> having two loops, but the loops themselves would be clearer and shorter -
> as would the arrays. Especially since according to
> http://mesonbuild.com/Configuration.html
> a boolean false converts to an "undef", rather than a 0/1 value.
> For example:
>
> foreach arg:has_sym_args
> config.set(arg[0], cc.has_header_symbol(arg[1], arg[3]))
> endforeach
>
> * Very minor suggestion: is it neater to use "args: '-include ' + arg[1]",
> instead of using prefix with the #include syntax? [Assuming the former
> works]
>
Any plans for a new version of this? If so, can I also suggest
splitting the patch into two, one for mlx4 and the other for mlx5.
Regards,
/Bruce
Hi Bruce,
Sorry for the late reply. Holiday time in Israel.
Thursday, September 13, 2018 12:22 PM, Bruce Richardson:
> Subject: Re: [dpdk-dev] [PATCH v5] net/mlx: add meson build support
>
> On Fri, Sep 07, 2018 at 11:34:29AM +0100, Bruce Richardson wrote:
> > On Wed, Sep 05, 2018 at 02:47:46PM +0300, Shahaf Shuler wrote:
> > > From: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
[...]
> > couple of minor points:
> > * These new additions use tab rather than space for indent. The standard
> > with meson I think is normally spaces, but I (inadvertently) added all
> > other DPDK meson.build files with tabs, so for consistency I think it
> > would be good if the whole file used tabs i.e. change all the other lines
> > apart from your new ones in v5.
OK, all indentation will be with tab.
> >
> > * is the "rm" command really necessary? I would expect the
> configure_file()
> > function to just do the right thing here when replacing the file.
Yep it is not needed. Also from meson sources:
output = kwargs['output']
ofile_rpath = os.path.join(self.subdir, output)
if not isinstance(output, str):
raise InterpreterException('Output file name must be a string')
if ofile_rpath in self.configure_file_outputs:
mesonbuildfile = os.path.join(self.subdir, 'meson.build')
current_call = "{}:{}".format(mesonbuildfile, self.current_lineno)
first_call = "{}:{}".format(mesonbuildfile, self.configure_file_outputs[ofile_rpath])
mlog.warning('Output file', mlog.bold(ofile_rpath, True), 'for configure_file() at', current_call, 'o
verwrites configure_file() output at', first_call)
> >
> > * Would you consider splitting the args array into two arrays, one for the
> > "type" values and another for the enum/define ones? This would mean
> > having two loops, but the loops themselves would be clearer and shorter -
> > as would the arrays. Especially since according to
> >
> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmes
> onbuild.com%2FConfiguration.html&data=02%7C01%7Cshahafs%40mell
> anox.com%7C38f62333815c48eaea6e08d6195a908a%7Ca652971c7d2e4d9ba6
> a4d149256f461b%7C0%7C0%7C636724274091500993&sdata=fZvTg16D8K
> TsE7Q0DWsS9hiNnB%2BhHPuHi%2FFC7wrk8x8%3D&reserved=0
> > a boolean false converts to an "undef", rather than a 0/1 value.
> > For example:
> >
> > foreach arg:has_sym_args
> > config.set(arg[0], cc.has_header_symbol(arg[1], arg[3]))
> > endforeach
> >
Done.
> > * Very minor suggestion: is it neater to use "args: '-include ' + arg[1]",
> > instead of using prefix with the #include syntax? [Assuming the former
> > works]
I don't understand the benefit with this change. Is there?
> >
>
> Any plans for a new version of this? If so, can I also suggest splitting the patch
> into two, one for mlx4 and the other for mlx5.
No problem to split.
Another change in plans:
diff --git a/meson_options.txt b/meson_options.txt
index 484f3e2601..444a380d97 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,7 +1,7 @@
option('allow_invalid_socket_id', type: 'boolean', value: false,
description: 'allow out-of-range NUMA socket id\'s for platforms that don\'t report the value correctly')
option('enable_driver_mlx_glue', type: 'boolean', value: false,
- description: 'Enable glue library for Mellanox ConnectX-3/4/5 NIC PMD')
+ description: 'Enable glue library for Mellanox PMDs')
option('enable_kmods', type: 'boolean', value: true,
description: 'build kernel modules')
option('examples', type: 'string', value: '',
I don't see the need to constantly update with each device being added.
>
> Regards,
> /Bruce
On Thu, Sep 13, 2018 at 10:12:18AM +0000, Shahaf Shuler wrote:
> Hi Bruce,
>
> Sorry for the late reply. Holiday time in Israel.
>
No problem! Hope you had a good break. :-)
> Thursday, September 13, 2018 12:22 PM, Bruce Richardson:
> > Subject: Re: [dpdk-dev] [PATCH v5] net/mlx: add meson build support
> >
> > On Fri, Sep 07, 2018 at 11:34:29AM +0100, Bruce Richardson wrote:
> > > On Wed, Sep 05, 2018 at 02:47:46PM +0300, Shahaf Shuler wrote:
> > > > From: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
>
<snip>
>
> > > * Very minor suggestion: is it neater to use "args: '-include ' + arg[1]",
> > > instead of using prefix with the #include syntax? [Assuming the former
> > > works]
>
> I don't understand the benefit with this change. Is there?
>
No, it was just a suggestion as to what looked neater in the code. Use
whatever you prefer.
> > >
> >
> > Any plans for a new version of this? If so, can I also suggest splitting the patch
> > into two, one for mlx4 and the other for mlx5.
>
> No problem to split.
>
> Another change in plans:
> diff --git a/meson_options.txt b/meson_options.txt
> index 484f3e2601..444a380d97 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -1,7 +1,7 @@
> option('allow_invalid_socket_id', type: 'boolean', value: false,
> description: 'allow out-of-range NUMA socket id\'s for platforms that don\'t report the value correctly')
> option('enable_driver_mlx_glue', type: 'boolean', value: false,
> - description: 'Enable glue library for Mellanox ConnectX-3/4/5 NIC PMD')
> + description: 'Enable glue library for Mellanox PMDs')
> option('enable_kmods', type: 'boolean', value: true,
> description: 'build kernel modules')
> option('examples', type: 'string', value: '',
>
> I don't see the need to constantly update with each device being added.
>
Good idea!
/Bruce
@@ -18,6 +18,8 @@ drivers = ['af_packet',
'ixgbe',
'kni',
'liquidio',
+ 'mlx4',
+ 'mlx5',
'mvpp2',
'netvsc',
'nfp',
new file mode 100644
@@ -0,0 +1,110 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2018 6WIND S.A.
+# Copyright 2018 Mellanox Technologies, Ltd
+
+pmd_dlopen = get_option('enable_driver_mlx_glue')
+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),
+ ]
+endif
+libs = [
+ cc.find_library('mnl', required:false),
+ cc.find_library('mlx4', required:false),
+ cc.find_library('ibverbs', required:false),
+]
+build = true
+foreach lib:libs
+ if not lib.found()
+ build = false
+ endif
+endforeach
+# Compile PMD
+if build
+ allow_experimental_apis = true
+ ext_deps += libs
+ 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_options = [
+ '-Wextra',
+ '-std=c11',
+ '-Wno-strict-prototypes',
+ '-D_BSD_SOURCE',
+ '-D_DEFAULT_SOURCE',
+ '-D_XOPEN_SOURCE=600'
+ ]
+ foreach option:cflags_options
+ if cc.has_argument(option)
+ cflags += option
+ endif
+ endforeach
+ if get_option('buildtype').contains('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.
+ # input array for meson symbol search:
+ # [ "MACRO to define if found", "header for the search",
+ # "type/enum/define", "symbol to search",
+ # "struct member to search (type only)]
+ #
+ args = [
+ [ 'HAVE_IBV_MLX4_WQE_LSO_SEG', 'infiniband/mlx4dv.h',
+ 'type', 'struct mlx4_wqe_lso_seg', 'mss_hdr_size' ],
+ ]
+ run_command('rm', '-f', meson.current_build_dir() + '/mlx4_autoconf.h')
+ config = configuration_data()
+ foreach arg:args
+ if arg[2] == 'type'
+ file_prefix = '#include<' + arg[1] + '>'
+ has = cc.has_member(arg[3], arg[4], prefix : file_prefix)
+ else
+ has = cc.has_header_symbol(arg[1], arg[3])
+ endif
+ if has
+ config.set(arg[0], 1)
+ endif
+ endforeach
+ configure_file(output : 'mlx4_autoconf.h', configuration : config)
+endif
+# Build Glue Library
+if pmd_dlopen and build
+ 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,
+ dependencies: libs,
+ link_args: [
+ '-Wl,-export-dynamic',
+ '-Wl,-h,@0@'.format(LIB_GLUE),
+ ],
+ soversion: dlopen_so_version,
+ install: true,
+ install_dir: dlopen_install_dir,
+ )
+endif
new file mode 100644
@@ -0,0 +1,231 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2018 6WIND S.A.
+# Copyright 2018 Mellanox Technologies, Ltd
+
+pmd_dlopen = get_option('enable_driver_mlx_glue')
+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),
+ ]
+endif
+libs = [
+ cc.find_library('mnl', required:false),
+ cc.find_library('mlx5', required:false),
+ cc.find_library('ibverbs', required:false),
+]
+build = true
+foreach lib:libs
+ if not lib.found()
+ build = false
+ endif
+endforeach
+if build
+ allow_experimental_apis = true
+ ext_deps += libs
+ 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_options = [
+ '-Wextra',
+ '-std=c11',
+ '-Wno-strict-prototypes',
+ '-D_BSD_SOURCE',
+ '-D_DEFAULT_SOURCE',
+ '-D_XOPEN_SOURCE=600'
+ ]
+ foreach option:cflags_options
+ if cc.has_argument(option)
+ cflags += option
+ endif
+ endforeach
+ if get_option('buildtype').contains('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.
+ # input array for meson symbol search:
+ # [ "MACRO to define if found", "header for the search",
+ # "type/enum/define", "symbol to search",
+ # "struct member to search (type only)]
+ #
+ args = [
+ [ 'HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT', 'infiniband/mlx5dv.h',
+ 'enum', 'MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX' ],
+ [ 'HAVE_IBV_DEVICE_TUNNEL_SUPPORT', 'infiniband/mlx5dv.h',
+ 'enum', 'MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS' ],
+ [ 'HAVE_IBV_MLX5_MOD_MPW', 'infiniband/mlx5dv.h',
+ 'enum', 'MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED' ],
+ [ 'HAVE_IBV_MLX5_MOD_SWP', 'infiniband/mlx5dv.h',
+ 'type', 'struct mlx5dv_sw_parsing_caps',
+ 'sw_parsing_offloads' ],
+ [ 'HAVE_IBV_MLX5_MOD_CQE_128B_COMP', 'infiniband/mlx5dv.h',
+ 'enum', 'MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP' ],
+ [ 'HAVE_IBV_DEVICE_MPLS_SUPPORT', 'infiniband/verbs.h',
+ 'enum', 'IBV_FLOW_SPEC_MPLS' ],
+ [ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h',
+ 'enum', 'IBV_WQ_FLAG_RX_END_PADDING' ],
+ [ 'HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT', 'infiniband/verbs.h',
+ 'type', 'struct ibv_counter_set_init_attr',
+ 'counter_set_id' ],
+ [ 'HAVE_SUPPORTED_40000baseKR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_40000baseKR4_Full' ],
+ [ 'HAVE_SUPPORTED_40000baseCR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_40000baseCR4_Full' ],
+ [ 'HAVE_SUPPORTED_40000baseSR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_40000baseSR4_Full' ],
+ [ 'HAVE_SUPPORTED_40000baseLR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_40000baseLR4_Full' ],
+ [ 'HAVE_SUPPORTED_56000baseKR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_56000baseKR4_Full' ],
+ [ 'HAVE_SUPPORTED_56000baseCR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_56000baseCR4_Full' ],
+ [ 'HAVE_SUPPORTED_56000baseSR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_56000baseSR4_Full' ],
+ [ 'HAVE_SUPPORTED_56000baseLR4_Full', 'linux/ethtool.h',
+ 'define', 'SUPPORTED_56000baseLR4_Full' ],
+ [ 'HAVE_ETHTOOL_LINK_MODE_25G', 'linux/ethtool.h',
+ 'enum', 'ETHTOOL_LINK_MODE_25000baseCR_Full_BIT' ],
+ [ 'HAVE_ETHTOOL_LINK_MODE_50G', 'linux/ethtool.h',
+ 'enum', 'ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT' ],
+ [ 'HAVE_ETHTOOL_LINK_MODE_100G', 'linux/ethtool.h',
+ 'enum', 'ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT' ],
+ [ 'HAVE_IFLA_PHYS_SWITCH_ID', 'linux/if_link.h',
+ 'enum', 'IFLA_PHYS_SWITCH_ID' ],
+ [ 'HAVE_IFLA_PHYS_PORT_NAME', 'linux/if_link.h',
+ 'enum', 'IFLA_PHYS_PORT_NAME' ],
+ [ 'HAVE_TCA_FLOWER_ACT', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_ACT' ],
+ [ 'HAVE_TCA_FLOWER_FLAGS', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_FLAGS' ],
+ [ 'HAVE_TCA_FLOWER_KEY_ETH_TYPE', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_ETH_TYPE' ],
+ [ 'HAVE_TCA_FLOWER_KEY_ETH_DST', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_ETH_DST' ],
+ [ 'HAVE_TCA_FLOWER_KEY_ETH_DST_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_ETH_DST_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_ETH_SRC', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_ETH_SRC' ],
+ [ 'HAVE_TCA_FLOWER_KEY_ETH_SRC_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_ETH_SRC_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IP_PROTO', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IP_PROTO' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV4_SRC', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV4_SRC' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV4_SRC_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV4_SRC_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV4_DST', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV4_DST' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV4_DST_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV4_DST_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV6_SRC', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV6_SRC' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV6_SRC_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV6_SRC_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV6_DST', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV6_DST' ],
+ [ 'HAVE_TCA_FLOWER_KEY_IPV6_DST_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_IPV6_DST_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_TCP_SRC', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_TCP_SRC' ],
+ [ 'HAVE_TCA_FLOWER_KEY_TCP_SRC_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_TCP_SRC_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_TCP_DST', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_TCP_DST' ],
+ [ 'HAVE_TCA_FLOWER_KEY_TCP_DST_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_TCP_DST_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_UDP_SRC', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_UDP_SRC' ],
+ [ 'HAVE_TCA_FLOWER_KEY_UDP_SRC_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_UDP_SRC_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_UDP_DST', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_UDP_DST' ],
+ [ 'HAVE_TCA_FLOWER_KEY_UDP_DST_MASK', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_UDP_DST_MASK' ],
+ [ 'HAVE_TCA_FLOWER_KEY_VLAN_ID', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_VLAN_ID' ],
+ [ 'HAVE_TCA_FLOWER_KEY_VLAN_PRIO', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_VLAN_PRIO' ],
+ [ 'HAVE_TCA_FLOWER_KEY_VLAN_ETH_TYPE', 'linux/pkt_cls.h',
+ 'enum', 'TCA_FLOWER_KEY_VLAN_ETH_TYPE' ],
+ [ 'HAVE_TC_ACT_VLAN', 'linux/tc_act/tc_vlan.h', 'enum',
+ 'TCA_VLAN_PUSH_VLAN_PRIORITY' ],
+ [ 'HAVE_RDMA_NL_NLDEV', 'rdma/rdma_netlink.h', 'enum',
+ 'RDMA_NL_NLDEV' ],
+ [ 'HAVE_RDMA_NLDEV_CMD_GET', 'rdma/rdma_netlink.h', 'enum',
+ 'RDMA_NLDEV_CMD_GET' ],
+ [ 'HAVE_RDMA_NLDEV_CMD_PORT_GET', 'rdma/rdma_netlink.h',
+ 'enum', 'RDMA_NLDEV_CMD_PORT_GET' ],
+ [ 'HAVE_RDMA_NLDEV_ATTR_DEV_INDEX', 'rdma/rdma_netlink.h',
+ 'enum', 'RDMA_NLDEV_ATTR_DEV_INDEX' ],
+ [ 'HAVE_RDMA_NLDEV_ATTR_DEV_NAME', 'rdma/rdma_netlink.h',
+ 'enum', 'RDMA_NLDEV_ATTR_DEV_NAME' ],
+ [ 'HAVE_RDMA_NLDEV_ATTR_PORT_INDEX', 'rdma/rdma_netlink.h',
+ 'enum', 'RDMA_NLDEV_ATTR_PORT_INDEX' ],
+ [ 'HAVE_RDMA_NLDEV_ATTR_NDEV_INDEX', 'rdma/rdma_netlink.h',
+ 'enum', 'RDMA_NLDEV_ATTR_NDEV_INDEX' ],
+ ]
+ run_command('rm', '-f', meson.current_build_dir() + '/mlx5_autoconf.h')
+ config = configuration_data()
+ foreach arg:args
+ if arg[2] == 'type'
+ file_prefix = '#include<' + arg[1] + '>'
+ has = cc.has_member(arg[3], arg[4], prefix : file_prefix)
+ else
+ has = cc.has_header_symbol(arg[1], arg[3])
+ endif
+ if has
+ config.set(arg[0], 1)
+ endif
+ endforeach
+ configure_file(output : 'mlx5_autoconf.h', configuration : config)
+endif
+# Build Glue Library
+if pmd_dlopen and build
+ 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,
+ dependencies: libs,
+ link_args: [
+ '-Wl,-export-dynamic',
+ '-Wl,-h,@0@'.format(LIB_GLUE),
+ ],
+ soversion: dlopen_so_version,
+ install: true,
+ install_dir: dlopen_install_dir,
+ )
+endif
@@ -1,5 +1,7 @@
option('allow_invalid_socket_id', type: 'boolean', value: false,
description: 'allow out-of-range NUMA socket id\'s for platforms that don\'t report the value correctly')
+option('enable_driver_mlx_glue', type: 'boolean', value: false,
+ description: 'Enable glue library for Mellanox ConnectX-3/4/5 NIC PMD')
option('enable_kmods', type: 'boolean', value: true,
description: 'build kernel modules')
option('examples', type: 'string', value: '',