DPDK patches and discussions
 help / color / mirror / Atom feed
From: Marco Varlese <marco.varlese@suse.com>
To: Bruce Richardson <bruce.richardson@intel.com>, dev@dpdk.org
Cc: thomas@monjalon.net
Subject: Re: [dpdk-dev] [RFCv2 00/40] Building DPDK with meson and ninja
Date: Thu, 17 Aug 2017 16:10:24 +0200	[thread overview]
Message-ID: <1502979024.15962.10.camel@suse.com> (raw)
In-Reply-To: <20170814095208.166496-1-bruce.richardson@intel.com>


Hi Bruce,

On Mon, 2017-08-14 at 10:51 +0100, Bruce Richardson wrote:
> Following on from previous RFC [http://dpdk.org/dev/patchwork/patch/25104/]
> here is a second draft implementation for building DPDK with meson and
> ninja. While still not building all of DPDK, and needing patch cleanup so
> that patches don't overwrite previous work, it is more complete in many
> ways than the previous version and includes:
> 
> * dynamic build configuration e.g. building pcap driver only if pcap is
>   found, only build af_packet if the target is linux, and only building QAT
>   and openssl crypto drivers if libcrypto is found
> * support for pmdinfo inside the PMDs(for shared builds) and binaries (for
>   static builds)
> * generalized/standardized way of building libs and drivers, though the
>   drivers code still needs generalization at the driver, rather than
>   driver-class level.
> * support for having a pkgconfig file for DPDK on install, and helloworld
>   and l2fwd can be built using the pkgconfig info (via make, not ninja)
> * support for library versions
> * an implementation for FreeBSD as well as Linux
> * all libraries are included in the build, as well as a number of NIC,
>   crypto, and mempool drivers
> * the igb_uio kernel module is build via the kernel Kbuild system as part
>   of a meson/ninja DPDK build

This is really great to see. I do have one suggestion.
Would it be possible to version the libraries built by the build-system
following the same version of the DPDK release?

For instance, in DPDK 17.08 we currently have:
# objdump -p librte_pmd_ixgbe.so.1 |grep SONAME
  SONAME               librte_pmd_ixgbe.so.1

Would it make sense to instead have librte_pmd_ixgbe.so.17.08

I think it would help to facilitate the installation of multiple DPDK library
versions on the same system. 

For example, we could have the following scenario:

1) OpenVSwithc linked with version 17.02 of DPDK
2) VPP linked with version 17.08 of DPDK
3) DPDK 18.xx installed in the system for any cutting-edge application
prototyping.

Is this something which could be incorporated as part of this work?

> 
> there is still plenty to do on this, but please review and test it out.
> I've kept the patches split so that the evolution of the work is a bit
> clearer than having it all send in a monolithic patch. All feedback
> welcome. I recommend one uses the latest meson release for this, though the
> minimum version supported should be v0.4.
> 
> I've tested static and dynamic builds with clang and gcc on Fedora 26, and
> done test builds on FreeBSD 11 with clang too. Build with other compilers
> and on other OS's may have issues, so YMMV.
I'll give it a try on openSUSE and let you know of any issues I might face.


Cheers,
Marco

> 
> To do a basic build, using gcc and with shared libs, in a folder called "gcc-
> build":
> 
> 	user@host:dpdk$ meson gcc-build
> 	....
> 	user@host:dpdk$ cd gcc-build
> 	user@host:gcc-build$ ninja
> 	user@host:gcc-build$ sudo ninja install
> 
> To do a build with clang, using static libs:
> 
> 	user@host:dpdk$ CC=clang meson --default_library=static clang-build
> 	....
> 	user@host:dpdk$ cd clang-build
> 	user@host:clang-build$ ninja
> 	user@host:clang-build$ sudo ninja install
> 
> Other options can be adjusted by running "mesonconf" in the build
> directory, i.e. gcc-build or clang-build in the examples above.
> 
> 
> Bruce Richardson (40):
>   build: initial hooks for using meson with DPDK
>   build: create pkg-config file for DPDK
>   build: build linuxapp EAL with meson and ninja
>   build: add EAL support under BSD
>   build: add core libraries to meson build system
>   build: add i40e driver to meson build
>   build: add pmdinfogen to build
>   build: generate list of sources for pmdinfogen
>   build: build i40e driver, including pmdinfo
>   build: install usertools scripts
>   build: simplify generation of pmd.c files
>   build: generalize net driver build to higher level
>   build: remove hard-coded enablement of vector driver
>   build: add ixgbe driver to build
>   build: set up standard deps for drivers
>   build: add af_packet driver to build
>   build: add pcap PMD support
>   build: add symbol version map file support to libs
>   build: build libraries in a loop for brevity
>   build: version library .so files
>   eal: add version information to meson build
>   build: add mempool drivers to build
>   build: add gro library to meson build
>   build: tweak naming of pmd dependencies
>   build: track driver include directories properly
>   metrics: add metrics lib to meson build
>   build: track dependencies recursively
>   testpmd: compile testpmd with meson and ninja
>   crypto/null: rename the version file to standard
>   crypto/qat: remove dependency on ether library
>   build: add cryptodev and some crypto drivers to build
>   igb_uio: add igb_uio to meson build
>   ip_frag: rename version file to standard name
>   build: add most remaining libraries to meson build
>   build: add packet framework libs to meson build
>   acl: add acl library to meson build
>   build: add ark and avp PMDs to build
>   build: fix static library builds with base code
>   build: fix driver dependencies for static builds
>   examples: allow basic sample app build using pkg-config
> 
>  app/meson.build                                    |  32 ++++++
>  app/test-pmd/meson.build                           |  74 +++++++++++++
>  buildtools/gen-pmdinfo-cfile.sh                    |  41 ++++++++
>  buildtools/meson.build                             |  34 ++++++
>  buildtools/pmdinfogen/meson.build                  |  43 ++++++++
>  config/meson.build                                 |  69 +++++++++++++
>  config/rte_config.h                                | 114
> +++++++++++++++++++++
>  config/x86/meson.build                             |  70 +++++++++++++
>  drivers/crypto/meson.build                         | 108 +++++++++++++++++++
>  drivers/crypto/null/Makefile                       |   2 +-
>  drivers/crypto/null/meson.build                    |  32 ++++++
>  ...crypto_version.map => rte_pmd_null_version.map} |   0
>  drivers/crypto/openssl/meson.build                 |  38 +++++++
>  drivers/crypto/qat/meson.build                     |  41 ++++++++
>  drivers/crypto/qat/qat_crypto.c                    |   1 -
>  drivers/mempool/meson.build                        | 108 +++++++++++++++++++
>  drivers/mempool/ring/meson.build                   |  32 ++++++
>  drivers/mempool/stack/meson.build                  |  32 ++++++
>  drivers/meson.build                                |  34 ++++++
>  drivers/net/af_packet/meson.build                  |  35 +++++++
>  drivers/net/ark/meson.build                        |  45 ++++++++
>  drivers/net/avp/meson.build                        |  34 ++++++
>  drivers/net/i40e/base/meson.build                  |  56 ++++++++++
>  drivers/net/i40e/meson.build                       |  61 +++++++++++
>  drivers/net/ixgbe/base/meson.build                 |  60 +++++++++++
>  drivers/net/ixgbe/meson.build                      |  58 +++++++++++
>  drivers/net/meson.build                            | 108 +++++++++++++++++++
>  drivers/net/pcap/meson.build                       |  41 ++++++++
>  examples/helloworld/Makefile                       |  13 +++
>  examples/l2fwd/Makefile                            |  13 +++
>  lib/librte_acl/meson.build                         |  60 +++++++++++
>  lib/librte_bitratestats/meson.build                |  34 ++++++
>  lib/librte_cfgfile/meson.build                     |  35 +++++++
>  lib/librte_cmdline/meson.build                     |  57 +++++++++++
>  lib/librte_compat/meson.build                      |  36 +++++++
>  lib/librte_cryptodev/meson.build                   |  40 ++++++++
>  lib/librte_distributor/meson.build                 |  39 +++++++
>  lib/librte_eal/bsdapp/eal/meson.build              |  67 ++++++++++++
>  lib/librte_eal/bsdapp/meson.build                  |  32 ++++++
>  lib/librte_eal/common/arch/meson.build             |  33 ++++++
>  lib/librte_eal/common/arch/x86/meson.build         |  32 ++++++
>  lib/librte_eal/common/include/arch/meson.build     |  33 ++++++
>  lib/librte_eal/common/include/arch/x86/meson.build |  48 +++++++++
>  lib/librte_eal/common/include/meson.build          |  71 +++++++++++++
>  lib/librte_eal/common/meson.build                  |  71 +++++++++++++
>  lib/librte_eal/linuxapp/eal/meson.build            |  72 +++++++++++++
>  lib/librte_eal/linuxapp/igb_uio/Kbuild             |   1 +
>  lib/librte_eal/linuxapp/igb_uio/meson.build        |  47 +++++++++
>  lib/librte_eal/linuxapp/meson.build                |  42 ++++++++
>  lib/librte_eal/meson.build                         |  44 ++++++++
>  lib/librte_efd/meson.build                         |  34 ++++++
>  lib/librte_ether/meson.build                       |  46 +++++++++
>  lib/librte_eventdev/meson.build                    |  36 +++++++
>  lib/librte_gro/meson.build                         |  34 ++++++
>  lib/librte_hash/meson.build                        |  46 +++++++++
>  lib/librte_ip_frag/Makefile                        |   2 +-
>  lib/librte_ip_frag/meson.build                     |  39 +++++++
>  ..._ipfrag_version.map => rte_ip_frag_version.map} |   0
>  lib/librte_jobstats/meson.build                    |  34 ++++++
>  lib/librte_kni/meson.build                         |  35 +++++++
>  lib/librte_kvargs/meson.build                      |  35 +++++++
>  lib/librte_latencystats/meson.build                |  34 ++++++
>  lib/librte_lpm/meson.build                         |  35 +++++++
>  lib/librte_mbuf/meson.build                        |  36 +++++++
>  lib/librte_mempool/meson.build                     |  35 +++++++
>  lib/librte_meter/meson.build                       |  34 ++++++
>  lib/librte_metrics/meson.build                     |  34 ++++++
>  lib/librte_net/meson.build                         |  46 +++++++++
>  lib/librte_pdump/meson.build                       |  34 ++++++
>  lib/librte_pipeline/meson.build                    |  35 +++++++
>  lib/librte_port/meson.build                        |  58 +++++++++++
>  lib/librte_power/meson.build                       |  35 +++++++
>  lib/librte_reorder/meson.build                     |  34 ++++++
>  lib/librte_ring/meson.build                        |  34 ++++++
>  lib/librte_sched/meson.build                       |  36 +++++++
>  lib/librte_table/meson.build                       |  52 ++++++++++
>  lib/librte_timer/meson.build                       |  34 ++++++
>  lib/librte_vhost/meson.build                       |  36 +++++++
>  lib/meson.build                                    | 105 +++++++++++++++++++
>  meson.build                                        |  88 ++++++++++++++++
>  meson_options.txt                                  |   8 ++
>  usertools/meson.build                              |  32 ++++++
>  82 files changed, 3536 insertions(+), 3 deletions(-)
>  create mode 100644 app/meson.build
>  create mode 100644 app/test-pmd/meson.build
>  create mode 100755 buildtools/gen-pmdinfo-cfile.sh
>  create mode 100644 buildtools/meson.build
>  create mode 100644 buildtools/pmdinfogen/meson.build
>  create mode 100644 config/meson.build
>  create mode 100644 config/rte_config.h
>  create mode 100644 config/x86/meson.build
>  create mode 100644 drivers/crypto/meson.build
>  create mode 100644 drivers/crypto/null/meson.build
>  rename drivers/crypto/null/{rte_pmd_null_crypto_version.map =>
> rte_pmd_null_version.map} (100%)
>  create mode 100644 drivers/crypto/openssl/meson.build
>  create mode 100644 drivers/crypto/qat/meson.build
>  create mode 100644 drivers/mempool/meson.build
>  create mode 100644 drivers/mempool/ring/meson.build
>  create mode 100644 drivers/mempool/stack/meson.build
>  create mode 100644 drivers/meson.build
>  create mode 100644 drivers/net/af_packet/meson.build
>  create mode 100644 drivers/net/ark/meson.build
>  create mode 100644 drivers/net/avp/meson.build
>  create mode 100644 drivers/net/i40e/base/meson.build
>  create mode 100644 drivers/net/i40e/meson.build
>  create mode 100644 drivers/net/ixgbe/base/meson.build
>  create mode 100644 drivers/net/ixgbe/meson.build
>  create mode 100644 drivers/net/meson.build
>  create mode 100644 drivers/net/pcap/meson.build
>  create mode 100644 lib/librte_acl/meson.build
>  create mode 100644 lib/librte_bitratestats/meson.build
>  create mode 100644 lib/librte_cfgfile/meson.build
>  create mode 100644 lib/librte_cmdline/meson.build
>  create mode 100644 lib/librte_compat/meson.build
>  create mode 100644 lib/librte_cryptodev/meson.build
>  create mode 100644 lib/librte_distributor/meson.build
>  create mode 100644 lib/librte_eal/bsdapp/eal/meson.build
>  create mode 100644 lib/librte_eal/bsdapp/meson.build
>  create mode 100644 lib/librte_eal/common/arch/meson.build
>  create mode 100644 lib/librte_eal/common/arch/x86/meson.build
>  create mode 100644 lib/librte_eal/common/include/arch/meson.build
>  create mode 100644 lib/librte_eal/common/include/arch/x86/meson.build
>  create mode 100644 lib/librte_eal/common/include/meson.build
>  create mode 100644 lib/librte_eal/common/meson.build
>  create mode 100644 lib/librte_eal/linuxapp/eal/meson.build
>  create mode 100644 lib/librte_eal/linuxapp/igb_uio/Kbuild
>  create mode 100644 lib/librte_eal/linuxapp/igb_uio/meson.build
>  create mode 100644 lib/librte_eal/linuxapp/meson.build
>  create mode 100644 lib/librte_eal/meson.build
>  create mode 100644 lib/librte_efd/meson.build
>  create mode 100644 lib/librte_ether/meson.build
>  create mode 100644 lib/librte_eventdev/meson.build
>  create mode 100644 lib/librte_gro/meson.build
>  create mode 100644 lib/librte_hash/meson.build
>  create mode 100644 lib/librte_ip_frag/meson.build
>  rename lib/librte_ip_frag/{rte_ipfrag_version.map => rte_ip_frag_version.map}
> (100%)
>  create mode 100644 lib/librte_jobstats/meson.build
>  create mode 100644 lib/librte_kni/meson.build
>  create mode 100644 lib/librte_kvargs/meson.build
>  create mode 100644 lib/librte_latencystats/meson.build
>  create mode 100644 lib/librte_lpm/meson.build
>  create mode 100644 lib/librte_mbuf/meson.build
>  create mode 100644 lib/librte_mempool/meson.build
>  create mode 100644 lib/librte_meter/meson.build
>  create mode 100644 lib/librte_metrics/meson.build
>  create mode 100644 lib/librte_net/meson.build
>  create mode 100644 lib/librte_pdump/meson.build
>  create mode 100644 lib/librte_pipeline/meson.build
>  create mode 100644 lib/librte_port/meson.build
>  create mode 100644 lib/librte_power/meson.build
>  create mode 100644 lib/librte_reorder/meson.build
>  create mode 100644 lib/librte_ring/meson.build
>  create mode 100644 lib/librte_sched/meson.build
>  create mode 100644 lib/librte_table/meson.build
>  create mode 100644 lib/librte_timer/meson.build
>  create mode 100644 lib/librte_vhost/meson.build
>  create mode 100644 lib/meson.build
>  create mode 100644 meson.build
>  create mode 100644 meson_options.txt
>  create mode 100644 usertools/meson.build
> 

  parent reply	other threads:[~2017-08-17 14:10 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-14  9:51 Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 01/40] build: initial hooks for using meson with DPDK Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 02/40] build: create pkg-config file for DPDK Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 03/40] build: build linuxapp EAL with meson and ninja Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 04/40] build: add EAL support under BSD Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 05/40] build: add core libraries to meson build system Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 06/40] build: add i40e driver to meson build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 07/40] build: add pmdinfogen to build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 08/40] build: generate list of sources for pmdinfogen Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 09/40] build: build i40e driver, including pmdinfo Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 10/40] build: install usertools scripts Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 11/40] build: simplify generation of pmd.c files Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 12/40] build: generalize net driver build to higher level Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 13/40] build: remove hard-coded enablement of vector driver Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 14/40] build: add ixgbe driver to build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 15/40] build: set up standard deps for drivers Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 16/40] build: add af_packet driver to build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 17/40] build: add pcap PMD support Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 18/40] build: add symbol version map file support to libs Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 19/40] build: build libraries in a loop for brevity Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 20/40] build: version library .so files Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 21/40] eal: add version information to meson build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 22/40] build: add mempool drivers to build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 23/40] build: add gro library to meson build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 24/40] build: tweak naming of pmd dependencies Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 25/40] build: track driver include directories properly Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 26/40] metrics: add metrics lib to meson build Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 27/40] build: track dependencies recursively Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 28/40] testpmd: compile testpmd with meson and ninja Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 29/40] crypto/null: rename the version file to standard Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 30/40] crypto/qat: remove dependency on ether library Bruce Richardson
2017-08-14  9:51 ` [dpdk-dev] [RFCv2 31/40] build: add cryptodev and some crypto drivers to build Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 32/40] igb_uio: add igb_uio to meson build Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 33/40] ip_frag: rename version file to standard name Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 34/40] build: add most remaining libraries to meson build Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 35/40] build: add packet framework libs " Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 36/40] acl: add acl library " Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 37/40] build: add ark and avp PMDs to build Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 38/40] build: fix static library builds with base code Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 39/40] build: fix driver dependencies for static builds Bruce Richardson
2017-08-14  9:52 ` [dpdk-dev] [RFCv2 40/40] examples: allow basic sample app build using pkg-config Bruce Richardson
2017-08-15 10:56 ` [dpdk-dev] [RFCv2 00/40] Building DPDK with meson and ninja Luca Boccassi
2017-08-15 11:31   ` Bruce Richardson
2017-08-17 14:10 ` Marco Varlese [this message]
2017-08-17 15:25   ` Luca Boccassi
2017-08-18  8:35     ` Bruce Richardson
2017-08-18  8:52       ` Marco Varlese
2017-08-18  9:17         ` Marco Varlese
2017-08-18  9:33       ` Luca Boccassi
     [not found]   ` <1502983469.31476.3.camel@gmail.com>
2017-08-18  8:00     ` Marco Varlese

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=1502979024.15962.10.camel@suse.com \
    --to=marco.varlese@suse.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=thomas@monjalon.net \
    /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).