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 2c0dd7b69fb0 ("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 <tho...@monjalon.net>
---
 doc/guides/nics/mlx4.rst     | 4 ++++
 doc/guides/nics/mlx5.rst     | 4 ++++
 drivers/net/mlx4/meson.build | 5 +++--
 drivers/net/mlx5/meson.build | 5 +++--
 meson_options.txt            | 4 ++--
 5 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/doc/guides/nics/mlx4.rst b/doc/guides/nics/mlx4.rst
index d0e8a8b2ff..4b1d1aceb2 100644
--- a/doc/guides/nics/mlx4.rst
+++ b/doc/guides/nics/mlx4.rst
@@ -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
 ~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index 66997f1ae7..b3bd3bba34 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -278,6 +278,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
 ~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/drivers/net/mlx4/meson.build b/drivers/net/mlx4/meson.build
index 9eb4988420..51d9784ee2 100644
--- a/drivers/net/mlx4/meson.build
+++ b/drivers/net/mlx4/meson.build
@@ -9,6 +9,7 @@ if not is_linux
 endif
 build = true
 
+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'
@@ -24,8 +25,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()
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index 3ad4f02a53..a4f2f79f22 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -9,6 +9,7 @@ if not is_linux
 endif
 build = true
 
+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'
@@ -24,8 +25,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()
diff --git a/meson_options.txt b/meson_options.txt
index 53dfe13c30..0a02f2faf9 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -12,8 +12,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: '',
-- 
2.24.1

Reply via email to