DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Cc: dev@dpdk.org, Yongseok Koh <yskoh@mellanox.com>,
	Shahaf Shuler <shahafs@mellanox.com>,
	Matan Azrad <matan@mellanox.com>
Subject: Re: [dpdk-dev] [PATCH v2] net/mlx: add meson build support
Date: Tue, 28 Aug 2018 16:45:00 +0100	[thread overview]
Message-ID: <20180828154500.GA4208@bricha3-MOBL.ger.corp.intel.com> (raw)
In-Reply-To: <85a2b398fecdf917dc22810ea0974a91ccca1d13.1535373640.git.nelio.laranjeiro@6wind.com>

Thanks for this, comments inline below.

/Bruce

On Mon, Aug 27, 2018 at 02:42:25PM +0200, Nelio Laranjeiro wrote:
> Mellanox drivers remains un-compiled by default due to third party
> libraries dependencies.  They can be enabled through:
> - enable_driver_mlx{4,5}=true or
> - enable_driver_mlx{4,5}_glue=true
> depending on the needs.

The big reason why we wanted a new build system was to move away from this
sort of static configuration. Instead, detect if the requirements as
present and build the driver if you can.

> 
> 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 by invoking DPDK scripts though meson's run_command() instead
> of using has_types, has_members, ... commands.
> 
> 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 -Denable_driver_mlx4=true output
> 
>  # CLFAGS=-I/tmp/rdma-core/build/include \
>    LDFLAGS=-L/tmp/rdma-core/build/lib \
>    LD_LIBRARY_PATH=/tmp/rdma-core/build/lib \
>    ninja -C output install

Once the CFLAGS/LDFLAGS are passed to meson, they should not be needed for
ninja. The LD_LIBRARY_PATH might be - I'm not sure about that one! :-)

> 
> Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> 
> ---
> 
> 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 |  94 ++++++
>  drivers/net/mlx5/meson.build | 545 +++++++++++++++++++++++++++++++++++
>  meson_options.txt            |   8 +
>  4 files changed, 649 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..debaca5b6
> --- /dev/null
> +++ b/drivers/net/mlx4/meson.build
> @@ -0,0 +1,94 @@
> +# 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

As stated above, I believe this should be based upon whether you find the
"mnl", "mlx4" and "ibverbs" libraries. If we start adding back in static
options for every driver, then we'll be back to having a mass of config
options like we had before.

> +# 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',
> +        ]

Is the '-ldl' flag necessary, given that for Linux it is added as a
standard linker flag in config/meson.build? If it is needed, does it get
passed through to the pkgconfig file etc. appropriately.

> +endif
> +# Compile PMD
> +if build

If you make the build value depend on the results of the find_library
calls, you can remove this conditional and de-dent the rest of the code,
since the assigned values will be ignored at the higher level.

> +        allow_experimental_apis = true
> +        ext_deps += [
> +                cc.find_library('mnl'),
> +                cc.find_library('mlx4'),
> +                cc.find_library('ibverbs'),
> +        ]
> +        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',

Please don't add these flags into your driver build. The optimization and
debug flags are controlled instead at the project level via the meson
build-in "buildtype" option.

> +               '-std=c11',
> +               '-I.',

Unnecessary, the current build directory is always present in the include
path.

> +               '-D_BSD_SOURCE',
> +               '-D_DEFAULT_SOURCE',
> +               '-D_XOPEN_SOURCE=600',
> +               '-Wno-strict-prototypes',
> +        ]

For safety, it's advisable to have compiler flags checked via
cc.has_option() before adding them to cflags. [The -D options shouldn't
need checking though]

> +        if dpdk_conf.has('RTE_LIBRTE_MLX4_DEBUG')
> +                cflags += [ '-pedantic', '-UNDEBUG', '-DPEDANTIC' ]
> +        else
> +                cflags += [ '-DNDEBUG', '-UPEDANTIC' ]
> +        endif

Rather than having your own separate debug option flag, why not set these
based on the "buildtype" option e.g. if buildtype is set to "debug".

> +        # 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

Just to check that you are ok with this only being run at configure time?
If any changes are made to the inputs, ninja won't pick them up. To have it
tracked for input changes, "custom_target" should be used instead of
run_command.

> +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,
> +               link_args: [
> +                       '-Wl,-export-dynamic',
> +                       '-Wl,-h,@0@'.format(LIB_GLUE),
> +                       '-lmlx4',
> +                       '-libverbs',

While this works, the recommended approach is to save the return value from
cc.find_library() above, and pass that as a dependency directly, rather
than as a linker flag.

> +                       ],
> +               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..b918ca437
> --- /dev/null
> +++ b/drivers/net/mlx5/meson.build

I believe most of the comments above for the mlx4 driver would apply below
also. I'll just note any additional things I spot.

> @@ -0,0 +1,545 @@
> +# 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'),
> +                cc.find_library('mlx5'),
> +                cc.find_library('ibverbs'),
> +        ]
> +        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

That's a huge number of run_commands, have you investigated putting it into
a foreach loop (or loops) and having it based off arrays as input?
Alternatively, it could all be put into a single script, if you didn't want
to clutter up the build file.

> +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,
> +                link_args: [
> +                        '-Wl,-export-dynamic',
> +                        '-Wl,-h,@0@'.format(LIB_GLUE),
> +                        '-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 c84327858..a1ae0cabc 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -22,3 +22,11 @@ option('use_hpet', type: 'boolean', value: false,
>  	description: 'use HPET timer in EAL')
>  option('tests', type: 'boolean', value: true,
>  	description: 'build unit tests')
> +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')

As well as dropping the two build options, I'd also suggest merging the
glue library options into 1, on the assumption that users either want glue
libs or don't. 
Also, the options should be kept in alphabetical order.

  reply	other threads:[~2018-08-28 15:45 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Message-Id: <7812af2267017898332783e934bef9478814ae96.1535361299.git.nelio.laranjeiro@6wind.com>
2018-08-27 12:42 ` Nelio Laranjeiro
2018-08-28 15:45   ` Bruce Richardson [this message]
2018-08-29  9:34     ` Nélio Laranjeiro
2018-08-29 10:01       ` Bruce Richardson
2018-08-29 12:44         ` Nélio Laranjeiro
2018-08-29 10:00     ` Luca Boccassi
2018-08-29 11:59       ` Nélio Laranjeiro
2018-08-29 12:28         ` Luca Boccassi
2018-08-31 16:24         ` Luca Boccassi
2018-08-29 13:48   ` [dpdk-dev] [PATCH v3] " Nelio Laranjeiro
2018-08-30 14:46     ` Bruce Richardson
2018-08-31  7:05       ` Nélio Laranjeiro
2018-08-31  7:16     ` [dpdk-dev] [PATCH v4] " Nelio Laranjeiro
2018-09-05 11:47       ` [dpdk-dev] [PATCH v5] " Shahaf Shuler
2018-09-07 10:34         ` Bruce Richardson
2018-09-13  9:22           ` Bruce Richardson
2018-09-13 10:12             ` Shahaf Shuler
2018-09-13 10:51               ` Bruce Richardson
2018-09-13 12:11         ` [dpdk-dev] [PATCH v6 1/2] net/mlx5: support meson build Shahaf Shuler
2018-09-13 12:41           ` Bruce Richardson
2018-09-16  9:01             ` Shahaf Shuler
2018-09-13 12:11         ` [dpdk-dev] [PATCH v6 2/2] net/mlx4: " Shahaf Shuler
2018-08-27 11:10 [dpdk-dev] [PATCH 1/2] build: add extra cflags ldflags to meson option Nelio Laranjeiro
2018-08-27 11:10 ` [dpdk-dev] [PATCH 2/2] net/mlx: add meson build support Nelio Laranjeiro
2018-08-27 11:24 ` [dpdk-dev] [PATCH 1/2] build: add extra cflags ldflags to meson option Bruce Richardson
2018-08-27 12:20   ` Nélio Laranjeiro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180828154500.GA4208@bricha3-MOBL.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=matan@mellanox.com \
    --cc=nelio.laranjeiro@6wind.com \
    --cc=shahafs@mellanox.com \
    --cc=yskoh@mellanox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).