From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 4C4139147 for ; Mon, 14 Aug 2017 12:03:18 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Aug 2017 03:03:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,372,1498546800"; d="scan'208";a="118723657" Received: from silpixa00399126.ir.intel.com (HELO silpixa00399126.ger.corp.intel.com) ([10.237.223.223]) by orsmga004.jf.intel.com with ESMTP; 14 Aug 2017 03:03:04 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: thomas@monjalon.net, Bruce Richardson Date: Mon, 14 Aug 2017 10:51:28 +0100 Message-Id: <20170814095208.166496-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.13.4 Subject: [dpdk-dev] [RFCv2 00/40] Building DPDK with meson and ninja X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Aug 2017 10:03:19 -0000 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@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 -- 2.13.4