From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 96052293B for ; Tue, 12 Dec 2017 18:04:22 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Dec 2017 09:04:21 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,395,1508828400"; d="scan'208";a="1856124" Received: from silpixa00399126.ir.intel.com (HELO silpixa00399126.ger.corp.intel.com) ([10.237.223.223]) by fmsmga007.fm.intel.com with ESMTP; 12 Dec 2017 09:04:20 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: luca.boccassi@gmail.com, aconole@redhat.com, Bruce Richardson Date: Tue, 12 Dec 2017 16:59:34 +0000 Message-Id: <20171212165940.272969-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.14.3 Subject: [dpdk-dev] [PATCH 0/6] next-build: create both static and shared libs 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: Tue, 12 Dec 2017 17:04:23 -0000 This patchset changes the meson+ninja build system to always create both static and shared libraries when doing a build. The applications compiled as part of a build use either the shared or static libraries depending on what the default_library build setting is. NOTE: The main difficulty with this change is adjusting the pkgconfig file so that external apps, like the examples, can be built using either the static or shared libraries. One of the key issues was the fact that running "pkg-config --static --libs libdpdk" outputs first the normal libs, and then the extra static ones. This is a problem because the driver libs are for static only builds, but need to come before, not after the standard DDPK libraries. It also procludes adding in the -Wl,-Bstatic flag into the output for the standard libraries to link them statically. There were two options considered for mananging the pkg-config settings. 1. Creating a separate .pc file for static builds with exactly the flags needed. 2. Modifying the single .pc file so that it was "good enough" to enable static builds without too much work. For this version of this set, I took option #2. To link using dynamic libs, all is as normal, to use static libs, the user needs to prepend "-Wl,-Bstatic" before the "pkgconfig --static" library output. This can be seen in the changes to the example application makefiles, which now support building the examples using shared or static DPDK libs. Bruce Richardson (6): build: remove library special cases eal: fix list of source files to meson build build: build all libs and drivers as both static and shared build: change default library type to static build: symlink drivers to library directory examples: enable linking examples both static and shared app/test-pmd/meson.build | 5 +- buildtools/symlink-drivers-solibs.sh | 16 ++++ config/meson.build | 14 ++++ doc/guides/contributing/coding_style.rst | 9 +++ drivers/meson.build | 43 +++++++--- drivers/net/e1000/base/meson.build | 2 +- drivers/net/fm10k/base/meson.build | 2 +- drivers/net/i40e/base/meson.build | 2 +- drivers/net/ixgbe/base/meson.build | 2 +- examples/bond/Makefile | 21 +++-- examples/cmdline/Makefile | 21 +++-- examples/distributor/Makefile | 21 +++-- examples/eventdev_pipeline_sw_pmd/Makefile | 21 +++-- examples/exception_path/Makefile | 21 +++-- examples/flow_classify/Makefile | 21 +++-- examples/flow_filtering/Makefile | 21 +++-- examples/helloworld/Makefile | 21 +++-- examples/ip_fragmentation/Makefile | 21 +++-- examples/ip_pipeline/Makefile | 21 +++-- examples/ip_reassembly/Makefile | 21 +++-- examples/ipsec-secgw/Makefile | 21 +++-- examples/ipv4_multicast/Makefile | 21 +++-- examples/kni/Makefile | 21 +++-- examples/l2fwd-cat/Makefile | 21 +++-- examples/l2fwd-crypto/Makefile | 21 +++-- examples/l2fwd-jobstats/Makefile | 21 +++-- examples/l2fwd-keepalive/Makefile | 21 +++-- examples/l2fwd/Makefile | 21 +++-- examples/l3fwd-acl/Makefile | 21 +++-- examples/l3fwd-power/Makefile | 21 +++-- examples/l3fwd-vf/Makefile | 21 +++-- examples/l3fwd/Makefile | 21 +++-- examples/link_status_interrupt/Makefile | 21 +++-- examples/load_balancer/Makefile | 21 +++-- examples/meson.build | 2 +- examples/packet_ordering/Makefile | 21 +++-- examples/ptpclient/Makefile | 21 +++-- examples/qos_meter/Makefile | 21 +++-- examples/qos_sched/Makefile | 21 +++-- examples/rxtx_callbacks/Makefile | 21 +++-- examples/service_cores/Makefile | 21 +++-- examples/skeleton/Makefile | 21 +++-- examples/tep_termination/Makefile | 21 +++-- examples/timer/Makefile | 21 +++-- examples/vhost/Makefile | 21 +++-- examples/vhost_scsi/Makefile | 21 +++-- examples/vmdq/Makefile | 21 +++-- examples/vmdq_dcb/Makefile | 21 +++-- lib/librte_eal/bsdapp/eal/meson.build | 34 +------- lib/librte_eal/bsdapp/meson.build | 55 ------------- lib/librte_eal/common/arch/meson.build | 33 -------- lib/librte_eal/common/include/arch/meson.build | 33 -------- lib/librte_eal/common/include/meson.build | 71 ---------------- lib/librte_eal/common/meson.build | 74 ++++++++++++++--- lib/librte_eal/linuxapp/eal/meson.build | 36 +-------- lib/librte_eal/linuxapp/igb_uio/meson.build | 8 +- lib/librte_eal/linuxapp/meson.build | 42 ---------- lib/librte_eal/meson.build | 45 +++++++++-- lib/meson.build | 107 ++++++++++++++++--------- meson.build | 31 ++++--- 60 files changed, 885 insertions(+), 579 deletions(-) create mode 100644 buildtools/symlink-drivers-solibs.sh delete mode 100644 lib/librte_eal/bsdapp/meson.build delete mode 100644 lib/librte_eal/common/arch/meson.build delete mode 100644 lib/librte_eal/common/include/arch/meson.build delete mode 100644 lib/librte_eal/common/include/meson.build delete mode 100644 lib/librte_eal/linuxapp/meson.build -- 2.14.3