[dpdk-dev] [RFCv2 00/40] Building DPDK with meson and ninja
Marco Varlese
marco.varlese at suse.com
Fri Aug 18 10:00:01 CEST 2017
Hi Luca,
On Thu, 2017-08-17 at 16:24 +0100, Luca Boccassi wrote:
> On Thu, 2017-08-17 at 16:10 +0200, Marco Varlese wrote:
> >
> > 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?
>
> Christian sent a patch a while ago, which was merged, to enable this in
> the current build system, it's the CONFIG_RTE_MAJOR_ABI option, we use
> it in Debian and Ubuntu for the reasons you mentioned.
Thanks for your input, very much appreciated.
I'll give it a try right away.
>
> And if it's not been translated yet, I agree it's an important one.
>
> >
> > >
> > > 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 at host:dpdk$ meson gcc-build
> > > ....
> > > user at host:dpdk$ cd gcc-build
> > > user at host:gcc-build$ ninja
> > > user at host:gcc-build$ sudo ninja install
> > >
> > > To do a build with clang, using static libs:
> > >
> > > user at host:dpdk$ CC=clang meson --default_library=static clang-
> > > build
> > > ....
> > > user at host:dpdk$ cd clang-build
> > > user at host:clang-build$ ninja
> > > user at 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
> > >
>
More information about the dev
mailing list