[dpdk-dev] [PATCH 0/6] next-build: create both static and shared libs

Bruce Richardson bruce.richardson at intel.com
Tue Dec 12 17:59:34 CET 2017


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



More information about the dev mailing list