xref: /dpdk/drivers/net/mlx4/meson.build (revision 33d66940e9bab36bae88cf4e1b09f53fe60cd44d)
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