From: Luca Boccassi <bluca@debian.org>
To: Ruslan Babayev <ruslan@babayev.com>
Cc: dev@dpdk.org, "Richardson, Bruce" <bruce.richardson@intel.com>
Subject: Re: [dpdk-dev] [PATCH] build: add combined libs
Date: Thu, 20 Feb 2020 22:00:29 +0000 [thread overview]
Message-ID: <b6d6b3285fcecb34df407acb623dce08264fb7aa.camel@debian.org> (raw)
In-Reply-To: <CAOpYhv8+tXeXkthzxKueLpuPvyQVOMYPtPaJDUjdFtDcv8gcaw@mail.gmail.com>
On Thu, 2020-02-20 at 13:35 -0800, Ruslan Babayev wrote:
> Hi Luca,
>
> PkgConfig doesn't cover the case of static linking. See below:
>
> $ pkg-config --libs libdpdk
> -lrte_bpf -lrte_flow_classify -lrte_pipeline -lrte_table -lrte_port
> -lrte_fib -lrte_ipsec -lrte_vhost -lrte_stack -lrte_security
> -lrte_sched -lrte_reorder -lrte_rib -lrte_rcu -lrte_rawdev
> -lrte_pdump -lrte_power -lrte_member -lrte_lpm -lrte_latencystats
> -lrte_kni -lrte_jobstats -lrte_ip_frag -lrte_gso -lrte_gro
> -lrte_eventdev -lrte_efd -lrte_distributor -lrte_cryptodev
> -lrte_compressdev -lrte_cfgfile -lrte_bitratestats -lrte_bbdev
> -lrte_acl -lrte_timer -lrte_hash -lrte_metrics -lrte_cmdline
> -lrte_pci -lrte_ethdev -lrte_meter -lrte_net -lrte_mbuf -lrte_mempool
> -lrte_ring -lrte_eal -lrte_kvargs
>
> And here's the combined libdpdk.a
>
> GROUP ( librte_acl.a librte_bbdev.a librte_bitratestats.a
> librte_bpf.a librte_bus_dpaa.a librte_bus_fslmc.a librte_bus_ifpga.a
> librte_bus_pci.a librte_bus_vdev.a librte_bus_vmbus.a
> librte_cfgfile.a librte_cmdline.a librte_common_cpt.a
> librte_common_dpaax.a librte_common_iavf.a librte_common_octeontx2.a
> librte_common_octeontx.a librte_compressdev.a librte_cryptodev.a
> librte_distributor.a librte_eal.a librte_efd.a librte_ethdev.a
> librte_eventdev.a librte_fib.a librte_flow_classify.a librte_gro.a
> librte_gso.a librte_hash.a librte_ip_frag.a librte_ipsec.a
> librte_jobstats.a librte_kni.a librte_kvargs.a librte_latencystats.a
> librte_lpm.a librte_mbuf.a librte_member.a librte_mempool.a
> librte_mempool_bucket.a librte_mempool_dpaa2.a librte_mempool_dpaa.a
> librte_mempool_octeontx2.a librte_mempool_octeontx.a
> librte_mempool_ring.a librte_mempool_stack.a librte_meter.a
> librte_metrics.a librte_net.a librte_pci.a librte_pdump.a
> librte_pipeline.a librte_pmd_aesni_gcm.a librte_pmd_aesni_mb.a
> librte_pmd_af_packet.a librte_pmd_ark.a librte_pmd_atlantic.a
> librte_pmd_avp.a librte_pmd_axgbe.a librte_pmd_bbdev_fpga_lte_fec.a
> librte_pmd_bbdev_null.a librte_pmd_bbdev_turbo_sw.a librte_pmd_bnxt.a
> librte_pmd_bond.a librte_pmd_caam_jr.a librte_pmd_ccp.a
> librte_pmd_crypto_scheduler.a librte_pmd_cxgbe.a librte_pmd_dpaa2.a
> librte_pmd_dpaa2_event.a librte_pmd_dpaa2_sec.a librte_pmd_dpaa.a
> librte_pmd_dpaa_event.a librte_pmd_dpaa_sec.a librte_pmd_dsw_event.a
> librte_pmd_e1000.a librte_pmd_ena.a librte_pmd_enetc.a
> librte_pmd_enic.a librte_pmd_failsafe.a librte_pmd_fm10k.a
> librte_pmd_hinic.a librte_pmd_hns3.a librte_pmd_i40e.a
> librte_pmd_iavf.a librte_pmd_ice.a librte_pmd_ifc.a
> librte_pmd_ixgbe.a librte_pmd_kasumi.a librte_pmd_kni.a
> librte_pmd_liquidio.a librte_pmd_memif.a librte_pmd_netvsc.a
> librte_pmd_nfp.a librte_pmd_nitrox.a librte_pmd_null.a
> librte_pmd_null_crypto.a librte_pmd_octeontx2.a
> librte_pmd_octeontx2_crypto.a librte_pmd_octeontx2_event.a
> librte_pmd_octeontx.a librte_pmd_octeontx_compress.a
> librte_pmd_octeontx_crypto.a librte_pmd_octeontx_event.a
> librte_pmd_opdl_event.a librte_pmd_openssl.a librte_pmd_pfe.a
> librte_pmd_qat.a librte_pmd_qede.a librte_pmd_ring.a librte_pmd_sfc.a
> librte_pmd_skeleton_event.a librte_pmd_snow3g.a librte_pmd_softnic.a
> librte_pmd_sw_event.a librte_pmd_tap.a librte_pmd_thunderx.a
> librte_pmd_vdev_netvsc.a librte_pmd_vhost.a librte_pmd_virtio.a
> librte_pmd_virtio_crypto.a librte_pmd_vmxnet3.a librte_pmd_zuc.a
> librte_port.a librte_power.a librte_rawdev.a
> librte_rawdev_dpaa2_cmdif.a librte_rawdev_dpaa2_qdma.a
> librte_rawdev_ioat.a librte_rawdev_ntb.a
> librte_rawdev_octeontx2_dma.a librte_rawdev_octeontx2_ep.a
> librte_rawdev_skeleton.a librte_rcu.a librte_reorder.a librte_rib.a
> librte_ring.a librte_sched.a librte_security.a librte_stack.a
> librte_table.a librte_timer.a librte_vhost.a )
>
> Combining the libs into a single libdpdk.a (including the PMDs) makes
> it much simpler to statically link against.
> How does pkg-config solve this?
>
> Regards,
> Ruslan
pkg-config does cover static linking, and much better as the linker
script is missing all the reverse dependencies and the CFLAGS, which
are necessary when doing static linking.
pkg-config --static --libs --cflags libdpdk
> On Thu, Feb 20, 2020 at 2:13 AM Luca Boccassi <bluca@debian.org>
> wrote:
> > On Wed, 2020-02-19 at 11:13 -0800, Ruslan Babayev wrote:
> > > Add combined libdpdk.a and libdpdk.so libs for Meson similar to
> > how
> > > it's done for Make builds
> > >
> > > Signed-off-by: Ruslan Babayev <
> > > ruslan@babayev.com
> > > >
> > > ---
> > > buildtools/group-libs.sh | 2 ++
> > > buildtools/meson.build | 1 +
> > > meson.build | 17 +++++++++++++++++
> > > 3 files changed, 20 insertions(+)
> > > create mode 100755 buildtools/group-libs.sh
> > >
> > > diff --git a/buildtools/group-libs.sh b/buildtools/group-libs.sh
> > > new file mode 100755
> > > index 000000000..b6e4c1c35
> > > --- /dev/null
> > > +++ b/buildtools/group-libs.sh
> > > @@ -0,0 +1,2 @@
> > > +#!/bin/sh
> > > +echo 'GROUP (' $(echo $* | xargs -n1 basename | sort | xargs)
> > ')'
> > > diff --git a/buildtools/meson.build b/buildtools/meson.build
> > > index 9812917e5..eac8bc4ff 100644
> > > --- a/buildtools/meson.build
> > > +++ b/buildtools/meson.build
> > > @@ -6,6 +6,7 @@ subdir('pmdinfogen')
> > > pkgconf = find_program('pkg-config', 'pkgconf', required: false)
> > > pmdinfo = find_program('gen-pmdinfo-cfile.sh')
> > > list_dir_globs = find_program('list-dir-globs.py')
> > > +group_libs = find_program('group-libs.sh')
> > > check_experimental_syms = find_program('check-experimental-
> > syms.sh')
> > > ldflags_ibverbs_static = find_program('options-ibverbs-
> > static.sh')
> > >
> > > diff --git a/meson.build b/meson.build
> > > index b7ae9c8d9..eb6974d35 100644
> > > --- a/meson.build
> > > +++ b/meson.build
> > > @@ -61,6 +61,23 @@ configure_file(output: build_cfg,
> > > install_dir: join_paths(get_option('includedir'),
> > > get_option('include_subdir_arch')))
> > >
> > > +
> > > +custom_target('group_shared_libs',
> > > + input: dpdk_libraries,
> > > + output: 'libdpdk.so',
> > > + capture: true,
> > > + install: true,
> > > + install_dir: get_option('libdir'),
> > > + command: [group_libs, '@INPUT@'])
> > > +
> > > +custom_target('group_static_libs',
> > > + input: dpdk_static_libraries + dpdk_drivers,
> > > + output: 'libdpdk.a',
> > > + capture: true,
> > > + install: true,
> > > + install_dir: get_option('libdir'),
> > > + command: [group_libs, '@INPUT@'])
> > > +
> > > # for static builds, include the drivers as libs and we need to
> > > "whole-archive"
> > > # them.
> > > dpdk_drivers = ['-Wl,--whole-archive'] + dpdk_drivers + ['-Wl,
> > --no-
> > > whole-archive']
> >
> > Hi,
> >
> > As far as I'm aware all usage of the old hacky linker script can be
> > replaced with pkg-config, and that's why it was left behind. Same
> > for
> > the static archive.
> >
> > Is there any use case that pkg-config doesn't cover?
> >
>
>
--
Kind regards,
Luca Boccassi
prev parent reply other threads:[~2020-02-20 22:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-19 19:13 [dpdk-dev] [PATCH] build: add combined libs Ruslan Babayev
2020-02-20 10:13 ` Luca Boccassi
2020-02-20 21:35 ` Ruslan Babayev
2020-02-20 22:00 ` Luca Boccassi [this message]
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=b6d6b3285fcecb34df407acb623dce08264fb7aa.camel@debian.org \
--to=bluca@debian.org \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=ruslan@babayev.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.