11dd7c7e3SNelio Laranjeiro# SPDX-License-Identifier: BSD-3-Clause 21dd7c7e3SNelio Laranjeiro# Copyright 2018 6WIND S.A. 31dd7c7e3SNelio Laranjeiro# Copyright 2018 Mellanox Technologies, Ltd 41dd7c7e3SNelio Laranjeiro 53dee3f1bSThomas Monjalonif not is_linux 63dee3f1bSThomas Monjalon build = false 73dee3f1bSThomas Monjalon reason = 'only supported on Linux' 83dee3f1bSThomas Monjalon subdir_done() 93dee3f1bSThomas Monjalonendif 103dee3f1bSThomas Monjalon 116affeabaSThomas Monjalonstatic_ibverbs = (get_option('ibverbs_link') == 'static') 1276c72a34SThomas Monjalondlopen_ibverbs = (get_option('ibverbs_link') == 'dlopen') 1363c3ebfaSAli AlnubaniLIB_GLUE_BASE = 'librte_net_mlx4_glue.so' 14af21b442SDavid MarchandLIB_GLUE_VERSION = abi_version 151dd7c7e3SNelio LaranjeiroLIB_GLUE = LIB_GLUE_BASE + '.' + LIB_GLUE_VERSION 1676c72a34SThomas Monjalonif dlopen_ibverbs 1772b934adSThomas Monjalon dpdk_conf.set('RTE_IBVERBS_LINK_DLOPEN', 1) 181dd7c7e3SNelio Laranjeiro cflags += [ 191dd7c7e3SNelio Laranjeiro '-DMLX4_GLUE="@0@"'.format(LIB_GLUE), 201dd7c7e3SNelio Laranjeiro '-DMLX4_GLUE_VERSION="@0@"'.format(LIB_GLUE_VERSION), 211dd7c7e3SNelio Laranjeiro ] 221dd7c7e3SNelio Laranjeiroendif 233dee3f1bSThomas Monjalon 240224b78eSDavid Marchandlibnames = [ 'mlx4', 'ibverbs' ] 25d588f12fSYongseok Kohlibs = [] 26d588f12fSYongseok Kohforeach libname:libnames 277be7dc6dSBruce Richardson lib = dependency('lib' + libname, static:static_ibverbs, 287be7dc6dSBruce Richardson required:false, method: 'pkg-config') 296affeabaSThomas Monjalon if not lib.found() and not static_ibverbs 30d588f12fSYongseok Koh lib = cc.find_library(libname, required:false) 31d588f12fSYongseok Koh endif 32d588f12fSYongseok Koh if lib.found() 33af331158SThomas Monjalon libs += lib 34e21492a5SThomas Monjalon if not static_ibverbs and not dlopen_ibverbs 35af331158SThomas Monjalon ext_deps += lib 36af331158SThomas Monjalon endif 37d588f12fSYongseok Koh else 381dd7c7e3SNelio Laranjeiro build = false 39530588f3SBruce Richardson reason = 'missing dependency, "' + libname + '"' 4079ece364SThomas Monjalon subdir_done() 411dd7c7e3SNelio Laranjeiro endif 421dd7c7e3SNelio Laranjeiroendforeach 43e21492a5SThomas Monjalonif static_ibverbs or dlopen_ibverbs 44af331158SThomas Monjalon # Build without adding shared libs to Requires.private 45ecb904ccSBruce Richardson ibv_cflags = run_command(pkgconf, '--cflags', 'libibverbs', check:true).stdout() 46af331158SThomas Monjalon ext_deps += declare_dependency(compile_args: ibv_cflags.split()) 47e21492a5SThomas Monjalonendif 48e21492a5SThomas Monjalonif static_ibverbs 49af331158SThomas Monjalon # Add static deps ldflags to internal apps and Libs.private 50af331158SThomas Monjalon ibv_ldflags = run_command(ldflags_ibverbs_static, check:true).stdout() 51af331158SThomas Monjalon ext_deps += declare_dependency(link_args:ibv_ldflags.split()) 52af331158SThomas Monjalonendif 533dee3f1bSThomas Monjalon 541dd7c7e3SNelio Laranjeirosources = files( 551dd7c7e3SNelio Laranjeiro 'mlx4.c', 561dd7c7e3SNelio Laranjeiro 'mlx4_ethdev.c', 571dd7c7e3SNelio Laranjeiro 'mlx4_flow.c', 581dd7c7e3SNelio Laranjeiro 'mlx4_intr.c', 590203d33aSYongseok Koh 'mlx4_mp.c', 601dd7c7e3SNelio Laranjeiro 'mlx4_mr.c', 611dd7c7e3SNelio Laranjeiro 'mlx4_rxq.c', 621dd7c7e3SNelio Laranjeiro 'mlx4_rxtx.c', 631dd7c7e3SNelio Laranjeiro 'mlx4_txq.c', 641dd7c7e3SNelio Laranjeiro 'mlx4_utils.c', 651dd7c7e3SNelio Laranjeiro) 6676c72a34SThomas Monjalonif not dlopen_ibverbs 671dd7c7e3SNelio Laranjeiro sources += files('mlx4_glue.c') 681dd7c7e3SNelio Laranjeiroendif 691dd7c7e3SNelio Laranjeirocflags_options = [ 701dd7c7e3SNelio Laranjeiro '-std=c11', 711dd7c7e3SNelio Laranjeiro '-Wno-strict-prototypes', 721dd7c7e3SNelio Laranjeiro '-D_BSD_SOURCE', 731dd7c7e3SNelio Laranjeiro '-D_DEFAULT_SOURCE', 744ad4b20aSBruce Richardson '-D_XOPEN_SOURCE=600', 751dd7c7e3SNelio Laranjeiro] 761dd7c7e3SNelio Laranjeiroforeach option:cflags_options 771dd7c7e3SNelio Laranjeiro if cc.has_argument(option) 781dd7c7e3SNelio Laranjeiro cflags += option 791dd7c7e3SNelio Laranjeiro endif 801dd7c7e3SNelio Laranjeiroendforeach 811dd7c7e3SNelio Laranjeiroif get_option('buildtype').contains('debug') 82e99fdaa7SAlexander Kozyrev cflags += [ '-pedantic', '-DPEDANTIC' ] 831dd7c7e3SNelio Laranjeiroelse 84e99fdaa7SAlexander Kozyrev cflags += [ '-UPEDANTIC' ] 851dd7c7e3SNelio Laranjeiroendif 861dd7c7e3SNelio Laranjeiro# input array for meson member search: 871dd7c7e3SNelio Laranjeiro# [ "MACRO to define if found", "header for the search", 881dd7c7e3SNelio Laranjeiro# "symbol to search", "struct member to search" ] 891dd7c7e3SNelio Laranjeiro# 901dd7c7e3SNelio Laranjeirohas_member_args = [ 911dd7c7e3SNelio Laranjeiro [ 'HAVE_IBV_MLX4_WQE_LSO_SEG', 'infiniband/mlx4dv.h', 921dd7c7e3SNelio Laranjeiro 'struct mlx4_wqe_lso_seg', 'mss_hdr_size' ], 931dd7c7e3SNelio Laranjeiro] 948e493764SYongseok Koh# input array for meson symbol search: 958e493764SYongseok Koh# [ "MACRO to define if found", "header for the search", 968e493764SYongseok Koh# "symbol to search" ] 978e493764SYongseok Kohhas_sym_args = [ 988e493764SYongseok Koh [ 'HAVE_IBV_MLX4_BUF_ALLOCATORS', 'infiniband/mlx4dv.h', 998e493764SYongseok Koh 'MLX4DV_SET_CTX_ATTR_BUF_ALLOCATORS' ], 1000203d33aSYongseok Koh [ 'HAVE_IBV_MLX4_UAR_MMAP_OFFSET', 'infiniband/mlx4dv.h', 1010203d33aSYongseok Koh 'MLX4DV_QP_MASK_UAR_MMAP_OFFSET' ], 1028e493764SYongseok Koh] 1031dd7c7e3SNelio Laranjeiroconfig = configuration_data() 1048e493764SYongseok Kohforeach arg:has_sym_args 105de38dd8cSThomas Monjalon config.set(arg[0], cc.has_header_symbol(arg[1], arg[2], 106*33d66940SBruce Richardson dependencies: libs, args: cflags)) 1078e493764SYongseok Kohendforeach 1081dd7c7e3SNelio Laranjeiroforeach arg:has_member_args 1091dd7c7e3SNelio Laranjeiro file_prefix = '#include <' + arg[1] + '>' 1101dd7c7e3SNelio Laranjeiro config.set(arg[0], cc.has_member(arg[2], arg[3], 111*33d66940SBruce Richardson prefix: file_prefix, dependencies: libs, args: cflags)) 1121dd7c7e3SNelio Laranjeiroendforeach 1131dd7c7e3SNelio Laranjeiroconfigure_file(output : 'mlx4_autoconf.h', configuration : config) 11479ece364SThomas Monjalon 1151dd7c7e3SNelio Laranjeiro# Build Glue Library 11676c72a34SThomas Monjalonif dlopen_ibverbs 1171dd7c7e3SNelio Laranjeiro dlopen_name = 'mlx4_glue' 118a20b2c01SBruce Richardson dlopen_lib_name = 'rte_net_' + dlopen_name 1191dd7c7e3SNelio Laranjeiro dlopen_so_version = LIB_GLUE_VERSION 1201dd7c7e3SNelio Laranjeiro dlopen_sources = files('mlx4_glue.c') 1211dd7c7e3SNelio Laranjeiro dlopen_install_dir = [ eal_pmd_path + '-glue' ] 1221dd7c7e3SNelio Laranjeiro shared_lib = shared_library( 1231dd7c7e3SNelio Laranjeiro dlopen_lib_name, 1241dd7c7e3SNelio Laranjeiro dlopen_sources, 1251dd7c7e3SNelio Laranjeiro include_directories: global_inc, 1261dd7c7e3SNelio Laranjeiro c_args: cflags, 1271dd7c7e3SNelio Laranjeiro dependencies: libs, 1281dd7c7e3SNelio Laranjeiro link_args: [ 1291dd7c7e3SNelio Laranjeiro '-Wl,-export-dynamic', 1301dd7c7e3SNelio Laranjeiro '-Wl,-h,@0@'.format(LIB_GLUE), 1311dd7c7e3SNelio Laranjeiro ], 1321dd7c7e3SNelio Laranjeiro soversion: dlopen_so_version, 1331dd7c7e3SNelio Laranjeiro install: true, 1341dd7c7e3SNelio Laranjeiro install_dir: dlopen_install_dir, 1351dd7c7e3SNelio Laranjeiro ) 1361dd7c7e3SNelio Laranjeiroendif 137