1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright 2015 6WIND S.A.
3 # Copyright 2015 Mellanox Technologies, Ltd
5 include $(RTE_SDK)/mk/rte.vars.mk
8 LIB = librte_pmd_mlx5.a
9 LIB_GLUE = $(LIB_GLUE_BASE).$(LIB_GLUE_VERSION)
10 LIB_GLUE_BASE = librte_pmd_mlx5_glue.so
11 LIB_GLUE_VERSION = 18.11.0
14 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5.c
15 ifneq ($(CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS),y)
16 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_glue.c
18 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_rxq.c
19 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_txq.c
20 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_rxtx.c
21 ifneq ($(filter y,$(CONFIG_RTE_ARCH_X86_64) \
22 $(CONFIG_RTE_ARCH_ARM64)),)
23 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_rxtx_vec.c
25 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_trigger.c
26 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_ethdev.c
27 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_mac.c
28 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_rxmode.c
29 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_vlan.c
30 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_stats.c
31 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_rss.c
32 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_mr.c
33 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow.c
34 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow_dv.c
35 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow_tcf.c
36 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow_verbs.c
37 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_socket.c
38 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_nl.c
40 ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS),y)
41 INSTALL-$(CONFIG_RTE_LIBRTE_MLX5_PMD)-lib += $(LIB_GLUE)
46 CFLAGS += -std=c11 -Wall -Wextra
49 CFLAGS += -D_BSD_SOURCE
50 CFLAGS += -D_DEFAULT_SOURCE
51 CFLAGS += -D_XOPEN_SOURCE=600
52 CFLAGS += $(WERROR_FLAGS)
53 CFLAGS += -Wno-strict-prototypes
54 ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS),y)
55 CFLAGS += -DMLX5_GLUE='"$(LIB_GLUE)"'
56 CFLAGS += -DMLX5_GLUE_VERSION='"$(LIB_GLUE_VERSION)"'
57 CFLAGS_mlx5_glue.o += -fPIC
60 LDLIBS += -libverbs -lmlx5
63 LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
64 LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs
65 LDLIBS += -lrte_bus_pci
67 # A few warnings cannot be avoided in external headers.
68 CFLAGS += -Wno-error=cast-qual
70 EXPORT_MAP := rte_pmd_mlx5_version.map
73 # memseg walk is not part of stable API
74 CFLAGS += -DALLOW_EXPERIMENTAL_API
76 # DEBUG which is usually provided on the command-line may enable
77 # CONFIG_RTE_LIBRTE_MLX5_DEBUG.
79 CONFIG_RTE_LIBRTE_MLX5_DEBUG := y
82 # User-defined CFLAGS.
83 ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DEBUG),y)
84 CFLAGS += -pedantic -UNDEBUG -DPEDANTIC
86 CFLAGS += -DNDEBUG -UPEDANTIC
89 include $(RTE_SDK)/mk/rte.lib.mk
91 # Generate and clean-up mlx5_autoconf.h.
93 export CC CFLAGS CPPFLAGS EXTRA_CFLAGS EXTRA_CPPFLAGS
94 export AUTO_CONFIG_CFLAGS = -Wno-error
97 AUTOCONF_OUTPUT := >/dev/null
100 mlx5_autoconf.h.new: FORCE
102 mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh
105 HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT \
106 infiniband/mlx5dv.h \
107 enum MLX5DV_CQE_RES_FORMAT_CSUM_STRIDX \
110 HAVE_IBV_DEVICE_TUNNEL_SUPPORT \
111 infiniband/mlx5dv.h \
112 enum MLX5DV_CONTEXT_MASK_TUNNEL_OFFLOADS \
115 HAVE_IBV_DEVICE_MPLS_SUPPORT \
117 enum IBV_FLOW_SPEC_MPLS \
120 HAVE_IBV_WQ_FLAG_RX_END_PADDING \
122 enum IBV_WQ_FLAG_RX_END_PADDING \
125 HAVE_IBV_MLX5_MOD_SWP \
126 infiniband/mlx5dv.h \
127 type 'struct mlx5dv_sw_parsing_caps' \
130 HAVE_IBV_MLX5_MOD_MPW \
131 infiniband/mlx5dv.h \
132 enum MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED \
135 HAVE_IBV_MLX5_MOD_CQE_128B_COMP \
136 infiniband/mlx5dv.h \
137 enum MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP \
140 HAVE_IBV_FLOW_DV_SUPPORT \
141 infiniband/mlx5dv.h \
142 enum MLX5DV_FLOW_ACTION_TAG \
145 HAVE_ETHTOOL_LINK_MODE_25G \
146 /usr/include/linux/ethtool.h \
147 enum ETHTOOL_LINK_MODE_25000baseCR_Full_BIT \
150 HAVE_ETHTOOL_LINK_MODE_50G \
151 /usr/include/linux/ethtool.h \
152 enum ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT \
155 HAVE_ETHTOOL_LINK_MODE_100G \
156 /usr/include/linux/ethtool.h \
157 enum ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT \
160 HAVE_IBV_DEVICE_COUNTERS_SET_SUPPORT \
162 type 'struct ibv_counter_set_init_attr' \
166 rdma/rdma_netlink.h \
170 HAVE_RDMA_NLDEV_CMD_GET \
171 rdma/rdma_netlink.h \
172 enum RDMA_NLDEV_CMD_GET \
175 HAVE_RDMA_NLDEV_CMD_PORT_GET \
176 rdma/rdma_netlink.h \
177 enum RDMA_NLDEV_CMD_PORT_GET \
180 HAVE_RDMA_NLDEV_ATTR_DEV_INDEX \
181 rdma/rdma_netlink.h \
182 enum RDMA_NLDEV_ATTR_DEV_INDEX \
185 HAVE_RDMA_NLDEV_ATTR_DEV_NAME \
186 rdma/rdma_netlink.h \
187 enum RDMA_NLDEV_ATTR_DEV_NAME \
190 HAVE_RDMA_NLDEV_ATTR_PORT_INDEX \
191 rdma/rdma_netlink.h \
192 enum RDMA_NLDEV_ATTR_PORT_INDEX \
195 HAVE_RDMA_NLDEV_ATTR_NDEV_INDEX \
196 rdma/rdma_netlink.h \
197 enum RDMA_NLDEV_ATTR_NDEV_INDEX \
200 HAVE_IFLA_PHYS_SWITCH_ID \
202 enum IFLA_PHYS_SWITCH_ID \
205 HAVE_IFLA_PHYS_PORT_NAME \
207 enum IFLA_PHYS_PORT_NAME \
210 HAVE_TCA_FLOWER_ACT \
212 enum TCA_FLOWER_ACT \
215 HAVE_TCA_FLOWER_FLAGS \
217 enum TCA_FLOWER_FLAGS \
220 HAVE_TCA_FLOWER_KEY_ETH_TYPE \
222 enum TCA_FLOWER_KEY_ETH_TYPE \
225 HAVE_TCA_FLOWER_KEY_ETH_DST \
227 enum TCA_FLOWER_KEY_ETH_DST \
230 HAVE_TCA_FLOWER_KEY_ETH_DST_MASK \
232 enum TCA_FLOWER_KEY_ETH_DST_MASK \
235 HAVE_TCA_FLOWER_KEY_ETH_SRC \
237 enum TCA_FLOWER_KEY_ETH_SRC \
240 HAVE_TCA_FLOWER_KEY_ETH_SRC_MASK \
242 enum TCA_FLOWER_KEY_ETH_SRC_MASK \
245 HAVE_TCA_FLOWER_KEY_IP_PROTO \
247 enum TCA_FLOWER_KEY_IP_PROTO \
250 HAVE_TCA_FLOWER_KEY_IPV4_SRC \
252 enum TCA_FLOWER_KEY_IPV4_SRC \
255 HAVE_TCA_FLOWER_KEY_IPV4_SRC_MASK \
257 enum TCA_FLOWER_KEY_IPV4_SRC_MASK \
260 HAVE_TCA_FLOWER_KEY_IPV4_DST \
262 enum TCA_FLOWER_KEY_IPV4_DST \
265 HAVE_TCA_FLOWER_KEY_IPV4_DST_MASK \
267 enum TCA_FLOWER_KEY_IPV4_DST_MASK \
270 HAVE_TCA_FLOWER_KEY_IPV6_SRC \
272 enum TCA_FLOWER_KEY_IPV6_SRC \
275 HAVE_TCA_FLOWER_KEY_IPV6_SRC_MASK \
277 enum TCA_FLOWER_KEY_IPV6_SRC_MASK \
280 HAVE_TCA_FLOWER_KEY_IPV6_DST \
282 enum TCA_FLOWER_KEY_IPV6_DST \
285 HAVE_TCA_FLOWER_KEY_IPV6_DST_MASK \
287 enum TCA_FLOWER_KEY_IPV6_DST_MASK \
290 HAVE_TCA_FLOWER_KEY_TCP_SRC \
292 enum TCA_FLOWER_KEY_TCP_SRC \
295 HAVE_TCA_FLOWER_KEY_TCP_SRC_MASK \
297 enum TCA_FLOWER_KEY_TCP_SRC_MASK \
300 HAVE_TCA_FLOWER_KEY_TCP_DST \
302 enum TCA_FLOWER_KEY_TCP_DST \
305 HAVE_TCA_FLOWER_KEY_TCP_DST_MASK \
307 enum TCA_FLOWER_KEY_TCP_DST_MASK \
310 HAVE_TCA_FLOWER_KEY_UDP_SRC \
312 enum TCA_FLOWER_KEY_UDP_SRC \
315 HAVE_TCA_FLOWER_KEY_UDP_SRC_MASK \
317 enum TCA_FLOWER_KEY_UDP_SRC_MASK \
320 HAVE_TCA_FLOWER_KEY_UDP_DST \
322 enum TCA_FLOWER_KEY_UDP_DST \
325 HAVE_TCA_FLOWER_KEY_UDP_DST_MASK \
327 enum TCA_FLOWER_KEY_UDP_DST_MASK \
330 HAVE_TCA_FLOWER_KEY_VLAN_ID \
332 enum TCA_FLOWER_KEY_VLAN_ID \
335 HAVE_TCA_FLOWER_KEY_VLAN_PRIO \
337 enum TCA_FLOWER_KEY_VLAN_PRIO \
340 HAVE_TCA_FLOWER_KEY_VLAN_ETH_TYPE \
342 enum TCA_FLOWER_KEY_VLAN_ETH_TYPE \
345 HAVE_TCA_FLOWER_KEY_TCP_FLAGS \
347 enum TCA_FLOWER_KEY_TCP_FLAGS \
350 HAVE_TCA_FLOWER_KEY_TCP_FLAGS_MASK \
352 enum TCA_FLOWER_KEY_TCP_FLAGS_MASK \
356 linux/tc_act/tc_vlan.h \
357 enum TCA_VLAN_PUSH_VLAN_PRIORITY \
361 linux/tc_act/tc_pedit.h \
362 enum TCA_PEDIT_KEY_EX_HDR_TYPE_UDP \
365 HAVE_SUPPORTED_40000baseKR4_Full \
366 /usr/include/linux/ethtool.h \
367 define SUPPORTED_40000baseKR4_Full \
370 HAVE_SUPPORTED_40000baseCR4_Full \
371 /usr/include/linux/ethtool.h \
372 define SUPPORTED_40000baseCR4_Full \
375 HAVE_SUPPORTED_40000baseSR4_Full \
376 /usr/include/linux/ethtool.h \
377 define SUPPORTED_40000baseSR4_Full \
380 HAVE_SUPPORTED_40000baseLR4_Full \
381 /usr/include/linux/ethtool.h \
382 define SUPPORTED_40000baseLR4_Full \
385 HAVE_SUPPORTED_56000baseKR4_Full \
386 /usr/include/linux/ethtool.h \
387 define SUPPORTED_56000baseKR4_Full \
390 HAVE_SUPPORTED_56000baseCR4_Full \
391 /usr/include/linux/ethtool.h \
392 define SUPPORTED_56000baseCR4_Full \
395 HAVE_SUPPORTED_56000baseSR4_Full \
396 /usr/include/linux/ethtool.h \
397 define SUPPORTED_56000baseSR4_Full \
400 HAVE_SUPPORTED_56000baseLR4_Full \
401 /usr/include/linux/ethtool.h \
402 define SUPPORTED_56000baseLR4_Full \
406 /usr/include/assert.h \
407 define static_assert \
410 # Create mlx5_autoconf.h or update it in case it differs from the new one.
412 mlx5_autoconf.h: mlx5_autoconf.h.new
414 cmp '$<' '$@' $(AUTOCONF_OUTPUT) || \
417 $(SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD):.c=.o): mlx5_autoconf.h
419 # Generate dependency plug-in for rdma-core when the PMD must not be linked
420 # directly, so that applications do not inherit this dependency.
422 ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS),y)
426 ifeq ($(LINK_USING_CC),1)
427 GLUE_LDFLAGS := $(call linkerprefix,$(LDFLAGS))
429 GLUE_LDFLAGS := $(LDFLAGS)
431 $(LIB_GLUE): mlx5_glue.o
432 $Q $(LD) $(GLUE_LDFLAGS) $(EXTRA_LDFLAGS) \
434 -shared -o $@ $< -libverbs -lmlx5
436 mlx5_glue.o: mlx5_autoconf.h
441 $Q rm -f -- mlx5_autoconf.h mlx5_autoconf.h.new
442 $Q rm -f -- mlx5_glue.o $(LIB_GLUE_BASE)*