[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