All of lore.kernel.org
 help / color / mirror / Atom feed
From: Srikanth Kaka <srikanth.k@oneconvergence.com>
To: Matan Azrad <matan@nvidia.com>,
	Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Cc: dev@dpdk.org, Vag Singh <vag.singh@oneconvergence.com>,
	Anand Thulasiram <avelu@juniper.net>,
	Srikanth Kaka <srikanth.k@oneconvergence.com>
Subject: [dpdk-dev] [PATCH 19/19] mlx5: Added meson support for FreeBSD
Date: Mon, 27 Sep 2021 19:04:50 +0530	[thread overview]
Message-ID: <20210927133450.10653-20-srikanth.k@oneconvergence.com> (raw)
In-Reply-To: <20210927133450.10653-1-srikanth.k@oneconvergence.com>

The freebsd/meson.build files are derived from their Linux counterparts
This commit includes meson files for both common/mlx5 and net/mlx5 as missing
either one of them will break compilation between the commits

Signed-off-by: Srikanth Kaka <srikanth.k@oneconvergence.com>
Signed-off-by: Vag Singh <vag.singh@oneconvergence.com>
Signed-off-by: Anand Thulasiram <avelu@juniper.net>
---
 drivers/common/mlx5/freebsd/meson.build | 189 ++++++++++++++++++++++++
 drivers/common/mlx5/meson.build         |  12 +-
 drivers/net/mlx5/freebsd/meson.build    |  14 ++
 drivers/net/mlx5/meson.build            |  14 +-
 4 files changed, 222 insertions(+), 7 deletions(-)
 create mode 100644 drivers/common/mlx5/freebsd/meson.build
 create mode 100644 drivers/net/mlx5/freebsd/meson.build

diff --git a/drivers/common/mlx5/freebsd/meson.build b/drivers/common/mlx5/freebsd/meson.build
new file mode 100644
index 0000000000..1385ffc0f7
--- /dev/null
+++ b/drivers/common/mlx5/freebsd/meson.build
@@ -0,0 +1,189 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2020 Mellanox Technologies, Ltd
+
+includes += include_directories('.')
+
+static_ibverbs = (get_option('ibverbs_link') == 'static')
+dlopen_ibverbs = (get_option('ibverbs_link') == 'dlopen')
+LIB_GLUE_BASE = 'librte_common_mlx5_glue.so'
+LIB_GLUE_VERSION = abi_version
+LIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION
+if dlopen_ibverbs
+    dpdk_conf.set('RTE_IBVERBS_LINK_DLOPEN', 1)
+    cflags += [
+	    '-DMLX5_GLUE="@0@"'.format(LIB_GLUE),
+	    '-DMLX5_GLUE_VERSION="@0@"'.format(LIB_GLUE_VERSION),
+    ]
+endif
+
+libnames = [ 'mlx5', 'ibverbs' ]
+libs = []
+foreach libname:libnames
+    lib = dependency('lib' + libname, static:static_ibverbs, required:false, method: 'pkg-config')
+    if not lib.found() and not static_ibverbs
+	lib = cc.find_library(libname, required:false)
+    endif
+    if lib.found()
+	libs += lib
+	if not static_ibverbs and not dlopen_ibverbs
+	    ext_deps += lib
+	endif
+    else
+	build = false
+	reason = 'missing dependency, "' + libname + '"'
+	subdir_done()
+    endif
+endforeach
+if static_ibverbs or dlopen_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())
+endif
+if static_ibverbs
+    # 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
+
+sources += files('mlx5_inet.c')
+sources += files('mlx5_common_os.c')
+sources += files('mlx5_common_verbs.c')
+if not dlopen_ibverbs
+    sources += files('mlx5_glue.c')
+endif
+
+# To maintain the compatibility with the make build system
+# mlx5_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_MLX5_MOD_SWP', 'infiniband/mlx5dv.h',
+	    'struct mlx5dv_sw_parsing_caps', 'sw_parsing_offloads' ],
+	[ 'HAVE_IBV_DEVICE_COUNTERS_SET_V42', 'infiniband/verbs.h',
+	    'struct ibv_counter_set_init_attr', 'counter_set_id' ],
+	[ 'HAVE_IBV_DEVICE_COUNTERS_SET_V45', 'infiniband/verbs.h',
+	    'struct ibv_counters_init_attr', 'comp_mask' ],
+	[ 'HAVE_MLX5DV_DEVX_UAR_OFFSET', 'infiniband/mlx5dv.h',
+	    'struct mlx5dv_devx_uar', 'mmap_off' ],
+]
+# input array for meson symbol search:
+# [ "MACRO to define if found", "header for the search",
+#   "symbol to search" ]
+has_sym_args = [
+	[ 'HAVE_IBV_RELAXED_ORDERING', 'infiniband/verbs.h',
+	    'IBV_ACCESS_RELAXED_ORDERING ' ],
+	[ 'HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT', 'infiniband/mlx5dv.h',
+	    'MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX' ],
+	[ 'HAVE_IBV_DEVICE_TUNNEL_SUPPORT', 'infiniband/mlx5dv.h',
+	    'MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS' ],
+	[ 'HAVE_IBV_MLX5_MOD_MPW', 'infiniband/mlx5dv.h',
+	    'MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED' ],
+	[ 'HAVE_IBV_MLX5_MOD_CQE_128B_COMP', 'infiniband/mlx5dv.h',
+	    'MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP' ],
+	[ 'HAVE_IBV_MLX5_MOD_CQE_128B_PAD', 'infiniband/mlx5dv.h',
+	    'MLX5DV_CQ_INIT_ATTR_FLAGS_CQE_PAD' ],
+	[ 'HAVE_IBV_FLOW_DV_SUPPORT', 'infiniband/mlx5dv.h',
+	    'mlx5dv_create_flow_action_packet_reformat' ],
+	[ 'HAVE_IBV_DEVICE_MPLS_SUPPORT', 'infiniband/verbs.h',
+	    'IBV_FLOW_SPEC_MPLS' ],
+	[ 'HAVE_IBV_WQ_FLAGS_PCI_WRITE_END_PADDING', 'infiniband/verbs.h',
+	    'IBV_WQ_FLAGS_PCI_WRITE_END_PADDING' ],
+	[ 'HAVE_IBV_WQ_FLAG_RX_END_PADDING', 'infiniband/verbs.h',
+	    'IBV_WQ_FLAG_RX_END_PADDING' ],
+	[ 'HAVE_MLX5DV_DR_DEVX_PORT', 'infiniband/mlx5dv.h',
+	    'mlx5dv_query_devx_port' ],
+	[ 'HAVE_MLX5DV_DR_DEVX_PORT_V35', 'infiniband/mlx5dv.h',
+	    'mlx5dv_query_port' ],
+	[ 'HAVE_MLX5DV_DR_CREATE_DEST_IB_PORT', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_dest_ib_port' ],
+	[ 'HAVE_IBV_DEVX_OBJ', 'infiniband/mlx5dv.h',
+	    'mlx5dv_devx_obj_create' ],
+	[ 'HAVE_IBV_FLOW_DEVX_COUNTERS', 'infiniband/mlx5dv.h',
+	    'MLX5DV_FLOW_ACTION_COUNTERS_DEVX' ],
+	[ 'HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS', 'infiniband/mlx5dv.h',
+	    'MLX5DV_FLOW_ACTION_DEFAULT_MISS' ],
+	[ 'HAVE_IBV_DEVX_ASYNC', 'infiniband/mlx5dv.h',
+	    'mlx5dv_devx_obj_query_async' ],
+	[ 'HAVE_IBV_DEVX_QP', 'infiniband/mlx5dv.h',
+	    'mlx5dv_devx_qp_query' ],
+	[ 'HAVE_MLX5DV_PP_ALLOC', 'infiniband/mlx5dv.h',
+	    'mlx5dv_pp_alloc' ],
+	[ 'HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_dest_devx_tir' ],
+	[ 'HAVE_IBV_DEVX_EVENT', 'infiniband/mlx5dv.h',
+	    'mlx5dv_devx_get_event' ],
+	[ 'HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_flow_meter' ],
+	[ 'HAVE_MLX5DV_MMAP_GET_NC_PAGES_CMD', 'infiniband/mlx5dv.h',
+	    'MLX5_MMAP_GET_NC_PAGES_CMD' ],
+	[ 'HAVE_MLX5DV_DR', 'infiniband/mlx5dv.h',
+	    'MLX5DV_DR_DOMAIN_TYPE_NIC_RX' ],
+	[ 'HAVE_MLX5DV_DR_ESWITCH', 'infiniband/mlx5dv.h',
+	    'MLX5DV_DR_DOMAIN_TYPE_FDB' ],
+	[ 'HAVE_MLX5DV_DR_VLAN', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_push_vlan' ],
+	[ 'HAVE_IBV_VAR', 'infiniband/mlx5dv.h', 'mlx5dv_alloc_var' ],
+	[ 'HAVE_MLX5_OPCODE_ENHANCED_MPSW', 'infiniband/mlx5dv.h',
+	    'MLX5_OPCODE_ENHANCED_MPSW' ],
+	[ 'HAVE_MLX5_OPCODE_SEND_EN', 'infiniband/mlx5dv.h',
+	    'MLX5_OPCODE_SEND_EN' ],
+	[ 'HAVE_MLX5_OPCODE_WAIT', 'infiniband/mlx5dv.h',
+	    'MLX5_OPCODE_WAIT' ],
+	[ 'HAVE_MLX5_OPCODE_ACCESS_ASO', 'infiniband/mlx5dv.h',
+	    'MLX5_OPCODE_ACCESS_ASO' ],
+	[ 'HAVE_MLX5_DR_FLOW_DUMP', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dump_dr_domain'],
+	[ 'HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_flow_sampler'],
+	[ 'HAVE_MLX5DV_DR_MEM_RECLAIM', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_domain_set_reclaim_device_memory'],
+	[ 'HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_dest_array'],
+	[ 'HAVE_MLX5_DR_CREATE_ACTION_ASO', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_action_create_aso' ],
+	[ 'HAVE_INFINIBAND_VERBS_H', 'infiniband/verbs.h',
+	    'INFINIBAND_VERBS_H' ],
+	[ 'HAVE_MLX5_UMR_IMKEY', 'infiniband/mlx5dv.h',
+	    'MLX5_WQE_UMR_CTRL_FLAG_INLINE' ],
+	[ 'HAVE_MLX5_DR_FLOW_DUMP_RULE', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dump_dr_rule' ],
+	[ 'HAVE_MLX5_DR_ACTION_ASO_CT', 'infiniband/mlx5dv.h',
+	    'MLX5DV_DR_ACTION_FLAGS_ASO_CT_DIRECTION_INITIATOR' ],
+	[ 'HAVE_MLX5_DR_ALLOW_DUPLICATE', 'infiniband/mlx5dv.h',
+	    'mlx5dv_dr_domain_allow_duplicate_rules' ],
+]
+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 : 'mlx5_autoconf.h', configuration : config)
+
+# Build Glue Library
+if dlopen_ibverbs
+    dlopen_name = 'mlx5_glue'
+    dlopen_lib_name = 'rte_common_' + dlopen_name
+    dlopen_so_version = LIB_GLUE_VERSION
+    dlopen_sources = files('mlx5_glue.c')
+    dlopen_install_dir = [ eal_pmd_path + '-glue' ]
+    dlopen_includes = [global_inc]
+    dlopen_includes += include_directories('../../../../lib/eal/include/generic')
+    shared_lib = shared_library(
+	    dlopen_lib_name,
+	    dlopen_sources,
+	    include_directories: dlopen_includes,
+	    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
diff --git a/drivers/common/mlx5/meson.build b/drivers/common/mlx5/meson.build
index 6ddbde7e8f..8037d57d81 100644
--- a/drivers/common/mlx5/meson.build
+++ b/drivers/common/mlx5/meson.build
@@ -1,9 +1,9 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright 2019 Mellanox Technologies, Ltd
 
-if not (is_linux or (is_windows and is_ms_linker))
+if not (is_linux or (is_windows and is_ms_linker) or is_freebsd)
     build = false
-    reason = 'only supported on Linux and Windows build with clang'
+    reason = 'only supported on Linux, Windows and FreeBSD build with clang'
     subdir_done()
 endif
 
@@ -24,8 +24,14 @@ cflags_options = [
         '-Wno-strict-prototypes',
         '-D_BSD_SOURCE',
         '-D_DEFAULT_SOURCE',
-        '-D_XOPEN_SOURCE=600',
 ]
+
+if not is_freebsd
+    cflags_options += [
+	'-D_XOPEN_SOURCE=600',
+    ]
+endif
+
 foreach option:cflags_options
     if cc.has_argument(option)
         cflags += option
diff --git a/drivers/net/mlx5/freebsd/meson.build b/drivers/net/mlx5/freebsd/meson.build
new file mode 100644
index 0000000000..8412edce78
--- /dev/null
+++ b/drivers/net/mlx5/freebsd/meson.build
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2020 Mellanox Technologies, Ltd
+
+includes += include_directories('.')
+sources += files(
+	'mlx5_socket.c',
+	'mlx5_os.c',
+	'mlx5_ethdev_os.c',
+	'mlx5_verbs.c',
+	'mlx5_mp_os.c',
+	'mlx5_vlan_os.c',
+	'mlx5_flow_os.c',
+)
+
diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build
index dac7f1fabf..51172adf90 100644
--- a/drivers/net/mlx5/meson.build
+++ b/drivers/net/mlx5/meson.build
@@ -2,9 +2,9 @@
 # Copyright 2018 6WIND S.A.
 # Copyright 2018 Mellanox Technologies, Ltd
 
-if not (is_linux or is_windows)
+if not (is_linux or is_windows or is_freebsd)
     build = false
-    reason = 'only supported on Linux and Windows'
+    reason = 'only supported on Linux, Windows and FreeBSD'
     subdir_done()
 endif
 
@@ -38,7 +38,7 @@ sources = files(
         'mlx5_devx.c',
 )
 
-if is_linux
+if is_linux or is_freebsd
     sources += files(
             'mlx5_flow_verbs.c',
     )
@@ -54,8 +54,14 @@ cflags_options = [
         '-Wno-strict-prototypes',
         '-D_BSD_SOURCE',
         '-D_DEFAULT_SOURCE',
-        '-D_XOPEN_SOURCE=600',
 ]
+
+if not is_freebsd
+    cflags_options += [
+	    '-D_XOPEN_SOURCE=600',
+    ]
+endif
+
 foreach option:cflags_options
     if cc.has_argument(option)
         cflags += option
-- 
2.30.2


  parent reply	other threads:[~2021-09-27 15:00 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-27 13:34 [dpdk-dev] [PATCH 00/19] MLX5 FreeBSD support Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 01/19] common/mlx5: stub for FreeBSD Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 02/19] net/mlx5: " Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 03/19] common/mlx5: disabling auxiliary bus support Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 04/19] net/mlx5: " Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 05/19] net/mlx5: modified PCI probe to work on FreeBSD Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 06/19] common/mlx5: define PF_INET socket Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 07/19] net/mlx5: use the newly defined INET socket Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 08/19] common/mlx5: derive PCI addr in FreeBSD Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 09/19] common/mlx5: get interface name Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 10/19] net/mlx5: fix socket MAC request Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 11/19] net/mlx5: removing port representator support Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 12/19] net/mlx5: Added procedure to detect link state Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 13/19] net/mlx5: added placeholder for VLAN vmwa Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 14/19] net/mlx5: added stats support Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 15/19] net/mlx5: making flow control DPDK callback invalid Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 16/19] net/mlx5: making module DPDK callbacks invalid Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 17/19] common/mlx5: fixed missing dependency in mlx5_glue.h Srikanth Kaka
2021-09-27 13:34 ` [dpdk-dev] [PATCH 18/19] net/mlx5: fixed compilation warnings Srikanth Kaka
2021-09-27 13:34 ` Srikanth Kaka [this message]
2021-09-29 12:20 ` [dpdk-dev] [PATCH 00/19] MLX5 FreeBSD support Thomas Monjalon
2021-09-29 15:56   ` Srikanth K
2021-09-29 16:20     ` Thomas Monjalon
2021-09-30 16:27       ` Srikanth K
2021-09-30 16:55         ` Thomas Monjalon
2021-10-01 11:35           ` Srikanth K

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210927133450.10653-20-srikanth.k@oneconvergence.com \
    --to=srikanth.k@oneconvergence.com \
    --cc=avelu@juniper.net \
    --cc=dev@dpdk.org \
    --cc=matan@nvidia.com \
    --cc=vag.singh@oneconvergence.com \
    --cc=viacheslavo@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.