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 >