* [dpdk-dev] [PATCH] build: add combined libs @ 2020-02-19 19:13 Ruslan Babayev 2020-02-20 10:13 ` Luca Boccassi 0 siblings, 1 reply; 4+ messages in thread From: Ruslan Babayev @ 2020-02-19 19:13 UTC (permalink / raw) To: dev; +Cc: Ruslan Babayev 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'] -- 2.17.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH] build: add combined libs 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 0 siblings, 1 reply; 4+ messages in thread From: Luca Boccassi @ 2020-02-20 10:13 UTC (permalink / raw) To: Ruslan Babayev, dev; +Cc: Richardson, Bruce 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 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH] build: add combined libs 2020-02-20 10:13 ` Luca Boccassi @ 2020-02-20 21:35 ` Ruslan Babayev 2020-02-20 22:00 ` Luca Boccassi 0 siblings, 1 reply; 4+ messages in thread From: Ruslan Babayev @ 2020-02-20 21:35 UTC (permalink / raw) To: Luca Boccassi; +Cc: dev, Richardson, Bruce 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 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 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dpdk-dev] [PATCH] build: add combined libs 2020-02-20 21:35 ` Ruslan Babayev @ 2020-02-20 22:00 ` Luca Boccassi 0 siblings, 0 replies; 4+ messages in thread From: Luca Boccassi @ 2020-02-20 22:00 UTC (permalink / raw) To: Ruslan Babayev; +Cc: dev, Richardson, Bruce 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 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-02-20 22:00 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 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 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).