11/02/2020 12:29, Bruce Richardson: > On Tue, Feb 11, 2020 at 02:19:40AM +0100, Thomas Monjalon wrote: > > If ibverbs_link is static and the application choose to link DPDK > > as static libraries, both PMD and ibverbs libraries must be linked > > as static libraries. And the dependencies of ibverbs (netlink) must > > still be linked as shared libraries. > > > > Unfortunately, meson forget about the static requirement for ibverbs > > when generating the .pc file. > > As a result, libibverbs, libmlx4, libmlx5 are listed in Requires.private > > section (allowing to be linked as shared libraries) and libnl is missing. > > > > A fix is in progress for meson, but anyway we will have to live without > > such a fix until a better version of meson is widely available: > > https://github.com/mesonbuild/meson/pull/6393 > > > > In order to avoid meson suggesting shared libraries in the section > > Requires.private of the .pc file, the dependency object is recreated > > with declare_dependency(): > > - cflags are extracted the libibverbs.pc > > - ldflags, from libibverbs.pc, are processed to force > > static flavor of ibverbs libraries, thanks to this syntax: > > -l:libfoo.a > > > > Fixes: 83fff714bd27 ("net/mlx: add static ibverbs linkage with meson") > > > > Signed-off-by: Thomas Monjalon <tho...@monjalon.net> > > Signed-off-by: Bruce Richardson <bruce.richard...@intel.com> > > --- > > +if build and static_ibverbs > > + # Build without adding shared libs to Requires.private > > + ibv_cflags = run_command(pkgconf, '--cflags', 'libibverbs').stdout() > > + ext_deps += declare_dependency(compile_args: ibv_cflags.split()) > > + # Add static deps ldflags to internal apps and Libs.private > > + ibv_ldflags = run_command(ldflags_ibverbs_static, check:true).stdout() > > + ext_deps += declare_dependency(link_args:ibv_ldflags.split()) > > +endif > > Is there a reason for specfiying two dependencies, rather than putting both > cflags and ldflags into the one dependency object?
Yes, the reason is the patch for dlopen which needs cflags only.