[dpdk-dev] [PATCH v3 3/5] net/mlx: workaround static linkage with meson

Bruce Richardson bruce.richardson at intel.com
Tue Feb 11 12:29:51 CET 2020


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 <thomas at monjalon.net>
> Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
> ---
>  buildtools/meson.build          |  2 ++
>  drivers/common/mlx5/meson.build | 12 +++++++++++-
>  drivers/net/mlx4/meson.build    | 14 ++++++++++++--
>  3 files changed, 25 insertions(+), 3 deletions(-)
> 
> diff --git a/buildtools/meson.build b/buildtools/meson.build
> index 0f563d89a3..4e3541b0d7 100644
> --- a/buildtools/meson.build
> +++ b/buildtools/meson.build
> @@ -3,9 +3,11 @@
>  
>  subdir('pmdinfogen')
>  
> +pkgconf = find_program('pkg-config', 'pkgconf')
>  pmdinfo = find_program('gen-pmdinfo-cfile.sh')
>  list_dir_globs = find_program('list-dir-globs.py')
>  check_experimental_syms = find_program('check-experimental-syms.sh')
> +ldflags_ibverbs_static = find_program('options-ibverbs-static.sh')
>  
>  # set up map-to-def script using python, either built-in or external
>  python3 = import('python').find_installation(required: false)
> diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build
> index f24e421bc3..bf04d16d76 100644
> --- a/drivers/common/mlx5/meson.build
> +++ b/drivers/common/mlx5/meson.build
> @@ -30,16 +30,26 @@ foreach libname:libnames
>  	endif
>  	if lib.found()
>  		libs += lib
> +		if not static_ibverbs
> +			ext_deps += lib
> +		endif
>  	else
>  		build = false
>  		reason = 'missing dependency, "' + libname + '"'
>  	endif
>  endforeach
> +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?



More information about the dev mailing list