29/04/2020 12:42, Bruce Richardson: > On Wed, Apr 29, 2020 at 12:18:19PM +0200, Thomas Monjalon wrote: > > 29/04/2020 12:08, Bruce Richardson: > > > To ensure all constructors are included in static build, we need to pass > > > the --whole-archive flag when linking, which is used with the > > > "link_whole" meson option. Since we use link_whole for all libs, we no > > > longer need to track the lib as part of the static dependency, just the > > > path to the headers for compiling. > > > > Please could you add the generated command line before/after? > > > > I would like to make sure that the external dependencies are out of > > the whole-archive option. > > > > Thanks > > > Sure, > > the link args for the helloworld example from build.ninja are now (snipping > out some .a's from the middle for brevity): > > LINK_ARGS = -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -Wl,--whole-archive > -Wl,--start-group lib/librte_telemetry.a lib/librte_bpf.a > lib/librte_flow_classify.a lib/librte_pipeline.a lib/librte_table.a > lib/librte_port.a lib/librte_fib.a lib/librte_ipsec.a lib/librte_vhost.a > lib/librte_stack.a lib/librte_security.a lib/librte_sched.a > lib/librte_reorder.a lib/librte_rib.a lib/librte_rawdev.a > lib/librte_pdump.a lib/librte_power.a lib/librte_member.a lib/librte_lpm.a > lib/librte_latencystats.a lib/librte_kni.a lib/librte_jobstats.a > lib/librte_ip_frag.a lib/librte_gso.a lib/librte_gro.a > <snip> > drivers/librte_pmd_mlx5_vdpa.a drivers/librte_pmd_bbdev_null.a > drivers/librte_pmd_bbdev_turbo_sw.a drivers/librte_pmd_bbdev_fpga_lte_fec.a > drivers/librte_pmd_bbdev_fpga_5gnr_fec.a -Wl,--no-whole-archive > -Wl,--no-as-needed -pthread -lm -ldl -lnuma -lpcap > /usr/lib/x86_64-linux-gnu/libbsd.so /usr/lib/x86_64-linux-gnu/libjansson.so > /usr/lib/x86_64-linux-gnu/libelf.so -lpcap -lpcap -lpcap -lpcap > /usr/lib/x86_64-linux-gnu/libmlx5.so > /usr/lib/x86_64-linux-gnu/libibverbs.so /usr/lib/x86_64-linux-gnu/libz.so > /usr/lib/x86_64-linux-gnu/libmlx4.so -lpcap -lpcap -Wl,--end-group > > The before case is below (again snipping some drivers): > > LINK_ARGS = -Wl,--as-needed -Wl,--no-undefined -Wl,-O1 -Wl,--whole-archive > -Wl,--start-group drivers/librte_common_cpt.a drivers/librte_common_dpaax.a > drivers/librte_common_iavf.a drivers/librte_common_mlx5.a > drivers/librte_common_octeontx.a drivers/librte_common_octeontx2.a > drivers/librte_bus_dpaa.a drivers/librte_bus_fslmc.a > drivers/librte_bus_ifpga.a drivers/librte_bus_pci.a > <snip> > drivers/librte_pmd_octeontx_event.a drivers/librte_pmd_bbdev_null.a > drivers/librte_pmd_bbdev_turbo_sw.a drivers/librte_pmd_bbdev_fpga_lte_fec.a > drivers/librte_pmd_bbdev_fpga_5gnr_fec.a -Wl,--no-whole-archive > -Wl,--no-as-needed -pthread -lm -ldl -lnuma lib/librte_eal.a > lib/librte_kvargs.a lib/librte_mempool.a lib/librte_ring.a lib/librte_net.a > lib/librte_mbuf.a lib/librte_ethdev.a lib/librte_meter.a > lib/librte_cmdline.a lib/librte_pci.a lib/librte_cryptodev.a > lib/librte_hash.a lib/librte_eventdev.a lib/librte_timer.a > lib/librte_rawdev.a lib/librte_stack.a lib/librte_sched.a > lib/librte_ip_frag.a lib/librte_security.a lib/librte_kni.a > lib/librte_pipeline.a lib/librte_port.a lib/librte_table.a lib/librte_lpm.a > lib/librte_acl.a lib/librte_gso.a lib/librte_vhost.a lib/librte_reorder.a > lib/librte_compressdev.a lib/librte_bbdev.a -lpcap > /usr/lib/x86_64-linux-gnu/libbsd.so /usr/lib/x86_64-linux-gnu/libmlx5.so > /usr/lib/x86_64-linux-gnu/libibverbs.so /usr/lib/x86_64-linux-gnu/libz.so > /usr/lib/x86_64-linux-gnu/libmlx4.so -lpcap -lpcap -lpcap -lpcap -lpcap > -lIPSec_MB -lIPSec_MB /usr/lib/x86_64-linux-gnu/libcrypto.so > /usr/lib/x86_64-linux-gnu/libisal.so -Wl,--end-group > '-Wl,-rpath,$$ORIGIN/../lib' -Wl,-rpath-link,/home/bruce/dpdk.org/build/lib > > These both come from builds with meson 0.54. I can also check that things > look the same for 0.47 too.
That's fine, it looks good. Please mention that you move DPDK libs inside but external dependencies are still outside of whole-archive block. Thanks