2018-08-31 07:16:05 +00:00
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Copyright 2018 6WIND S.A.
|
|
|
|
# Copyright 2018 Mellanox Technologies, Ltd
|
|
|
|
|
2019-07-08 07:18:04 +00:00
|
|
|
if not is_linux
|
|
|
|
build = false
|
|
|
|
reason = 'only supported on Linux'
|
|
|
|
subdir_done()
|
|
|
|
endif
|
|
|
|
|
2020-02-12 22:07:04 +00:00
|
|
|
static_ibverbs = (get_option('ibverbs_link') == 'static')
|
2020-02-12 22:07:07 +00:00
|
|
|
dlopen_ibverbs = (get_option('ibverbs_link') == 'dlopen')
|
2020-10-26 09:20:34 +00:00
|
|
|
LIB_GLUE_BASE = 'librte_net_mlx4_glue.so'
|
2020-10-19 09:41:51 +00:00
|
|
|
LIB_GLUE_VERSION = abi_version
|
2018-08-31 07:16:05 +00:00
|
|
|
LIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION
|
2020-02-12 22:07:07 +00:00
|
|
|
if dlopen_ibverbs
|
2019-01-09 14:23:18 +00:00
|
|
|
dpdk_conf.set('RTE_IBVERBS_LINK_DLOPEN', 1)
|
2018-08-31 07:16:05 +00:00
|
|
|
cflags += [
|
|
|
|
'-DMLX4_GLUE="@0@"'.format(LIB_GLUE),
|
|
|
|
'-DMLX4_GLUE_VERSION="@0@"'.format(LIB_GLUE_VERSION),
|
|
|
|
]
|
|
|
|
endif
|
2019-07-08 07:18:04 +00:00
|
|
|
|
2019-10-02 14:24:10 +00:00
|
|
|
libnames = [ 'mlx4', 'ibverbs' ]
|
2019-04-18 11:49:02 +00:00
|
|
|
libs = []
|
|
|
|
foreach libname:libnames
|
2021-01-18 14:29:57 +00:00
|
|
|
lib = dependency('lib' + libname, static:static_ibverbs,
|
|
|
|
required:false, method: 'pkg-config')
|
2020-02-12 22:07:04 +00:00
|
|
|
if not lib.found() and not static_ibverbs
|
2019-04-18 11:49:02 +00:00
|
|
|
lib = cc.find_library(libname, required:false)
|
|
|
|
endif
|
|
|
|
if lib.found()
|
net/mlx: workaround static linkage with meson
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: 6affeabaf321 ("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>
2020-02-12 22:07:06 +00:00
|
|
|
libs += lib
|
2020-02-12 22:07:08 +00:00
|
|
|
if not static_ibverbs and not dlopen_ibverbs
|
net/mlx: workaround static linkage with meson
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: 6affeabaf321 ("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>
2020-02-12 22:07:06 +00:00
|
|
|
ext_deps += lib
|
|
|
|
endif
|
2019-04-18 11:49:02 +00:00
|
|
|
else
|
2018-08-31 07:16:05 +00:00
|
|
|
build = false
|
2019-06-05 20:22:41 +00:00
|
|
|
reason = 'missing dependency, "' + libname + '"'
|
2020-02-12 22:07:03 +00:00
|
|
|
subdir_done()
|
2018-08-31 07:16:05 +00:00
|
|
|
endif
|
|
|
|
endforeach
|
2020-02-12 22:07:08 +00:00
|
|
|
if static_ibverbs or dlopen_ibverbs
|
net/mlx: workaround static linkage with meson
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: 6affeabaf321 ("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>
2020-02-12 22:07:06 +00:00
|
|
|
# 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())
|
2020-02-12 22:07:08 +00:00
|
|
|
endif
|
|
|
|
if static_ibverbs
|
net/mlx: workaround static linkage with meson
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: 6affeabaf321 ("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>
2020-02-12 22:07:06 +00:00
|
|
|
# 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
|
2019-07-08 07:18:04 +00:00
|
|
|
|
2020-02-12 22:07:03 +00:00
|
|
|
sources = files(
|
|
|
|
'mlx4.c',
|
|
|
|
'mlx4_ethdev.c',
|
|
|
|
'mlx4_flow.c',
|
|
|
|
'mlx4_intr.c',
|
|
|
|
'mlx4_mp.c',
|
|
|
|
'mlx4_mr.c',
|
|
|
|
'mlx4_rxq.c',
|
|
|
|
'mlx4_rxtx.c',
|
|
|
|
'mlx4_txq.c',
|
|
|
|
'mlx4_utils.c',
|
|
|
|
)
|
2020-02-12 22:07:07 +00:00
|
|
|
if not dlopen_ibverbs
|
2020-02-12 22:07:03 +00:00
|
|
|
sources += files('mlx4_glue.c')
|
|
|
|
endif
|
|
|
|
cflags_options = [
|
|
|
|
'-std=c11',
|
|
|
|
'-Wno-strict-prototypes',
|
|
|
|
'-D_BSD_SOURCE',
|
|
|
|
'-D_DEFAULT_SOURCE',
|
|
|
|
'-D_XOPEN_SOURCE=600'
|
|
|
|
]
|
|
|
|
foreach option:cflags_options
|
|
|
|
if cc.has_argument(option)
|
|
|
|
cflags += option
|
2018-08-31 07:16:05 +00:00
|
|
|
endif
|
2020-02-12 22:07:03 +00:00
|
|
|
endforeach
|
|
|
|
if get_option('buildtype').contains('debug')
|
|
|
|
cflags += [ '-pedantic', '-DPEDANTIC' ]
|
|
|
|
else
|
|
|
|
cflags += [ '-UPEDANTIC' ]
|
2018-08-31 07:16:05 +00:00
|
|
|
endif
|
2020-02-12 22:07:03 +00:00
|
|
|
# To maintain the compatibility with the make build system
|
|
|
|
# mlx4_autoconf.h file is still generated.
|
|
|
|
# input array for meson member search:
|
|
|
|
# [ "MACRO to define if found", "header for the search",
|
|
|
|
# "symbol to search", "struct member to search" ]
|
|
|
|
#
|
|
|
|
has_member_args = [
|
|
|
|
[ 'HAVE_IBV_MLX4_WQE_LSO_SEG', 'infiniband/mlx4dv.h',
|
|
|
|
'struct mlx4_wqe_lso_seg', 'mss_hdr_size' ],
|
|
|
|
]
|
|
|
|
# input array for meson symbol search:
|
|
|
|
# [ "MACRO to define if found", "header for the search",
|
|
|
|
# "symbol to search" ]
|
|
|
|
has_sym_args = [
|
|
|
|
[ 'HAVE_IBV_MLX4_BUF_ALLOCATORS', 'infiniband/mlx4dv.h',
|
|
|
|
'MLX4DV_SET_CTX_ATTR_BUF_ALLOCATORS' ],
|
|
|
|
[ 'HAVE_IBV_MLX4_UAR_MMAP_OFFSET', 'infiniband/mlx4dv.h',
|
|
|
|
'MLX4DV_QP_MASK_UAR_MMAP_OFFSET' ],
|
|
|
|
]
|
|
|
|
config = configuration_data()
|
|
|
|
foreach arg:has_sym_args
|
|
|
|
config.set(arg[0], cc.has_header_symbol(arg[1], arg[2],
|
|
|
|
dependencies: libs))
|
|
|
|
endforeach
|
|
|
|
foreach arg:has_member_args
|
|
|
|
file_prefix = '#include <' + arg[1] + '>'
|
|
|
|
config.set(arg[0], cc.has_member(arg[2], arg[3],
|
|
|
|
prefix: file_prefix, dependencies: libs))
|
|
|
|
endforeach
|
|
|
|
configure_file(output : 'mlx4_autoconf.h', configuration : config)
|
|
|
|
|
2018-08-31 07:16:05 +00:00
|
|
|
# Build Glue Library
|
2020-02-12 22:07:07 +00:00
|
|
|
if dlopen_ibverbs
|
2018-08-31 07:16:05 +00:00
|
|
|
dlopen_name = 'mlx4_glue'
|
build: standardize component names and defines
As discussed on the dpdk-dev mailing list[1], we can make some easy
improvements in standardizing the naming of the various components in DPDK,
and their associated feature-enabled macros.
Following this patch, each library will have the name in format,
'librte_<name>.so', and the macro indicating that library is enabled in the
build will have the form 'RTE_LIB_<NAME>'.
Similarly, for libraries, the equivalent name formats and macros are:
'librte_<class>_<name>.so' and 'RTE_<CLASS>_<NAME>', where class is the
device type taken from the relevant driver subdirectory name, i.e. 'net',
'crypto' etc.
To avoid too many changes at once for end applications, the old macro names
will still be provided in the build in this release, but will be removed
subsequently.
[1] http://inbox.dpdk.org/dev/ef7c1a87-79ab-e405-4202-39b7ad6b0c71@solarflare.com/t/#u
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Acked-by: Rosen Xu <rosen.xu@intel.com>
2020-10-15 15:05:53 +00:00
|
|
|
dlopen_lib_name = 'rte_net_' + dlopen_name
|
2018-08-31 07:16:05 +00:00
|
|
|
dlopen_so_version = LIB_GLUE_VERSION
|
|
|
|
dlopen_sources = files('mlx4_glue.c')
|
|
|
|
dlopen_install_dir = [ eal_pmd_path + '-glue' ]
|
|
|
|
shared_lib = shared_library(
|
|
|
|
dlopen_lib_name,
|
|
|
|
dlopen_sources,
|
|
|
|
include_directories: global_inc,
|
|
|
|
c_args: cflags,
|
|
|
|
dependencies: libs,
|
|
|
|
link_args: [
|
|
|
|
'-Wl,-export-dynamic',
|
|
|
|
'-Wl,-h,@0@'.format(LIB_GLUE),
|
|
|
|
],
|
|
|
|
soversion: dlopen_so_version,
|
|
|
|
install: true,
|
|
|
|
install_dir: dlopen_install_dir,
|
|
|
|
)
|
|
|
|
endif
|