Skip to content

Commit

Permalink
net/mlx: add static ibverbs linkage with meson
Browse files Browse the repository at this point in the history
The libibverbs (and libmlx4/5) can be statically embedded
in the shared PMD library, or in the application with the static PMD.
It was supported with make build system in
commit 2c0dd7b ("config: add static linkage of mlx dependency").

The same feature is enabled with meson when using pkg-config
(i.e. only if the call to dependency() is successful).
The fallback method for searching library with cc.find_library()
is not supported because the dependencies of the found library
would not be linked (no such info in .a file unlike .so).

The main difference, in meson build system, is the generated .pc file
giving arguments to link DPDK with the application.
Unfortunately the .pc file will not keep memory of the static linkage
option for libibverbs.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  • Loading branch information
tmonjalo authored and Ferruh Yigit committed Feb 14, 2020
1 parent 79ece36 commit 6affeab
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 6 deletions.
4 changes: 4 additions & 0 deletions doc/guides/nics/mlx4.rst
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ These options can be modified in the ``.config`` file.
adds additional run-time checks and debugging messages at the cost of
lower performance.

This option is available in meson:

- ``ibverbs_link`` can be ``static``, ``shared``, or ``dlopen``.

Environment variables
~~~~~~~~~~~~~~~~~~~~~

Expand Down
4 changes: 4 additions & 0 deletions doc/guides/nics/mlx5.rst
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,10 @@ These options can be modified in the ``.config`` file.
64. Default armv8a configuration of make build and meson build set it to 128
then brings performance degradation.

This option is available in meson:

- ``ibverbs_link`` can be ``static``, ``shared``, or ``dlopen``.

Environment variables
~~~~~~~~~~~~~~~~~~~~~

Expand Down
5 changes: 3 additions & 2 deletions drivers/common/mlx5/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ if not is_linux
subdir_done()
endif

static_ibverbs = (get_option('ibverbs_link') == 'static')
pmd_dlopen = (get_option('ibverbs_link') == 'dlopen')
LIB_GLUE_BASE = 'librte_pmd_mlx5_glue.so'
LIB_GLUE_VERSION = '20.02.0'
Expand All @@ -22,8 +23,8 @@ endif
libnames = [ 'mlx5', 'ibverbs' ]
libs = []
foreach libname:libnames
lib = dependency('lib' + libname, required:false)
if not lib.found()
lib = dependency('lib' + libname, static:static_ibverbs, required:false)
if not lib.found() and not static_ibverbs
lib = cc.find_library(libname, required:false)
endif
if lib.found()
Expand Down
5 changes: 3 additions & 2 deletions drivers/net/mlx4/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ if not is_linux
subdir_done()
endif

static_ibverbs = (get_option('ibverbs_link') == 'static')
pmd_dlopen = (get_option('ibverbs_link') == 'dlopen')
LIB_GLUE_BASE = 'librte_pmd_mlx4_glue.so'
LIB_GLUE_VERSION = '18.02.0'
Expand All @@ -23,8 +24,8 @@ endif
libnames = [ 'mlx4', 'ibverbs' ]
libs = []
foreach libname:libnames
lib = dependency('lib' + libname, required:false)
if not lib.found()
lib = dependency('lib' + libname, static:static_ibverbs, required:false)
if not lib.found() and not static_ibverbs
lib = cc.find_library(libname, required:false)
endif
if lib.found()
Expand Down
4 changes: 2 additions & 2 deletions meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ option('examples', type: 'string', value: '',
description: 'Comma-separated list of examples to build by default')
option('flexran_sdk', type: 'string', value: '',
description: 'Path to FlexRAN SDK optional Libraries for BBDEV device')
option('ibverbs_link', type: 'combo', choices : ['shared', 'dlopen'], value: 'shared',
description: 'Linkage method (shared/dlopen) for Mellanox PMDs with ibverbs dependencies.')
option('ibverbs_link', type: 'combo', choices : ['static', 'shared', 'dlopen'], value: 'shared',
description: 'Linkage method (static/shared/dlopen) for Mellanox PMDs with ibverbs dependencies.')
option('include_subdir_arch', type: 'string', value: '',
description: 'subdirectory where to install arch-dependent headers')
option('kernel_dir', type: 'string', value: '',
Expand Down

0 comments on commit 6affeab

Please sign in to comment.