[dpdk-dev] [RFCv2 00/40] Building DPDK with meson and ninja

Bruce Richardson bruce.richardson at intel.com
Mon Aug 14 11:51:28 CEST 2017


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

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.

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

-- 
2.13.4



More information about the dev mailing list