Skip to content

Commit

Permalink
net/mlx: workaround static linkage with meson
Browse files Browse the repository at this point in the history
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:
	mesonbuild/meson#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@monjalon.net>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
  • Loading branch information
tmonjalo authored and ovsrobot committed Feb 11, 2020
1 parent a471e91 commit 6204b7c
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
2 changes: 2 additions & 0 deletions buildtools/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
12 changes: 11 additions & 1 deletion drivers/common/mlx5/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -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

if build
allow_experimental_apis = true
deps += ['hash', 'pci', 'net', 'eal', 'kvargs']
ext_deps += libs
sources = files(
'mlx5_devx_cmds.c',
'mlx5_common.c',
Expand Down
14 changes: 12 additions & 2 deletions drivers/net/mlx4/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,26 @@ foreach libname:libnames
lib = cc.find_library(libname, required:false)
endif
if lib.found()
libs += [ lib ]
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

if build
allow_experimental_apis = true
ext_deps += libs
sources = files(
'mlx4.c',
'mlx4_ethdev.c',
Expand Down

0 comments on commit 6204b7c

Please sign in to comment.