DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: dev@dpdk.org
Cc: luca.boccassi@gmail.com, aconole@redhat.com,
	Bruce Richardson <bruce.richardson@intel.com>
Subject: [dpdk-dev] [PATCH 0/6] next-build: create both static and shared libs
Date: Tue, 12 Dec 2017 16:59:34 +0000	[thread overview]
Message-ID: <20171212165940.272969-1-bruce.richardson@intel.com> (raw)

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

             reply	other threads:[~2017-12-12 17:04 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-12 16:59 Bruce Richardson [this message]
2017-12-12 16:59 ` [dpdk-dev] [PATCH 1/6] build: remove library special cases Bruce Richardson
2017-12-12 16:59 ` [dpdk-dev] [PATCH 2/6] eal: fix list of source files to meson build Bruce Richardson
2017-12-12 16:59 ` [dpdk-dev] [PATCH 3/6] build: build all libs and drivers as both static and shared Bruce Richardson
2017-12-12 16:59 ` [dpdk-dev] [PATCH 4/6] build: change default library type to static Bruce Richardson
2017-12-12 16:59 ` [dpdk-dev] [PATCH 5/6] build: symlink drivers to library directory Bruce Richardson
2017-12-12 16:59 ` [dpdk-dev] [PATCH 6/6] examples: enable linking examples both static and shared Bruce Richardson
2017-12-12 17:14 ` [dpdk-dev] [PATCH 0/6] next-build: create both static and shared libs Bruce Richardson
2017-12-13 12:10   ` Luca Boccassi
2017-12-13 13:28     ` Bruce Richardson
2017-12-18 18:05     ` Aaron Conole
2017-12-19 10:07       ` Bruce Richardson
2017-12-13 12:11 ` Luca Boccassi
2017-12-15 12:02   ` Bruce Richardson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171212165940.272969-1-bruce.richardson@intel.com \
    --to=bruce.richardson@intel.com \
    --cc=aconole@redhat.com \
    --cc=dev@dpdk.org \
    --cc=luca.boccassi@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).