Fix toeplitz initialization key and rss key len for mlx4
[samplevnf.git] / VNFs / DPPD-PROX / Makefile
1 ##
2 ## Copyright (c) 2010-2019 Intel Corporation
3 ##
4 ## Licensed under the Apache License, Version 2.0 (the "License");
5 ## you may not use this file except in compliance with the License.
6 ## You may obtain a copy of the License at
7 ##
8 ##     http://www.apache.org/licenses/LICENSE-2.0
9 ##
10 ## Unless required by applicable law or agreed to in writing, software
11 ## distributed under the License is distributed on an "AS IS" BASIS,
12 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ## See the License for the specific language governing permissions and
14 ## limitations under the License.
15 ##
16
17 ifeq ($(RTE_SDK),)
18 define err_msg
19
20 Please define RTE_SDK environment variable.
21 If DPDK was built with Meson, please use meson to build Prox too.
22 ***
23 endef
24 $(error $(err_msg))
25 endif
26
27 # Default target, can be overriden by command line or environment
28 RTE_TARGET ?= x86_64-native-linuxapp-gcc
29
30 ifeq ($(wildcard $(RTE_SDK)/$(RTE_TARGET)/.),)
31 define err_msg
32
33 Could not find build target: $(RTE_TARGET)
34 Perhaps DPDK was built using meson?
35 ***
36 endef
37 $(error $(err_msg))
38 endif
39
40 rte_version_h := $(RTE_SDK)/$(RTE_TARGET)/include/rte_version.h
41 rte_config_h := $(RTE_SDK)/$(RTE_TARGET)/include/rte_config.h
42 rte_ver_part = $(shell sed -n -e 's/^\#define\s*$1\s*\(.*\)$$/\1/p' $(rte_version_h))
43 rte_config_part = $(shell sed -n -e 's/^\#define\s*$1\s*\(.*\)$$/\1/p' $(rte_config_h))
44 rte_ver_eval = $(shell printf '%u' $$(printf '0x%02x%02x%02x%02x' $1 $2 $3 $4))
45 rte_ver_MMLR = $(call rte_ver_eval,$(call \
46         rte_ver_part,RTE_VER_MAJOR),$(call \
47         rte_ver_part,RTE_VER_MINOR),$(call \
48         rte_ver_part,RTE_VER_PATCH_LEVEL),$(call \
49         rte_ver_part,RTE_VER_PATCH_RELEASE))
50 rte_version_YMMR = $(call rte_ver_eval,$(call \
51         rte_ver_part,RTE_VER_YEAR),$(call \
52         rte_ver_part,RTE_VER_MONTH),$(call \
53         rte_ver_part,RTE_VER_MINOR),$(call \
54         rte_ver_part,RTE_VER_RELEASE))
55 rte_config_YMMR = $(call rte_ver_eval,$(call \
56         rte_config_part,RTE_VER_YEAR),$(call \
57         rte_config_part,RTE_VER_MONTH),$(call \
58         rte_config_part,RTE_VER_MINOR),$(call \
59         rte_config_part,RTE_VER_RELEASE))
60 rte_ver_YMMR = $(if $(shell test $(rte_config_YMMR) -gt 0 && echo 'y'),$(rte_config_YMMR),$(rte_version_YMMR))
61 rte_ver_dpdk := $(if $(call rte_ver_part,RTE_VER_MAJOR),$(rte_ver_MMLR),$(rte_ver_YMMR))
62 rte_ver_comp = $(shell test $(rte_ver_dpdk) $5 $(call rte_ver_eval,$1,$2,$3,$4) && echo 'y')
63 rte_ver_EQ = $(call rte_ver_comp,$1,$2,$3,$4,-eq)
64 rte_ver_NE = $(call rte_ver_comp,$1,$2,$3,$4,-ne)
65 rte_ver_GT = $(call rte_ver_comp,$1,$2,$3,$4,-gt)
66 rte_ver_LT = $(call rte_ver_comp,$1,$2,$3,$4,-lt)
67 rte_ver_GE = $(call rte_ver_comp,$1,$2,$3,$4,-ge)
68 rte_ver_LE = $(call rte_ver_comp,$1,$2,$3,$4,-le)
69
70 include $(RTE_SDK)/mk/rte.vars.mk
71
72 # binary name
73 APP = prox
74 CFLAGS += -DPROGRAM_NAME=\"$(APP)\"
75 CFLAGS += -DCOMPILED_WITH_MAKE
76
77 CFLAGS += -O2 -g
78 CFLAGS += -fno-stack-protector -Wno-deprecated-declarations
79
80 ifeq ($(BNG_QINQ),)
81 CFLAGS += -DUSE_QINQ
82 else ifeq ($(BNG_QINQ),y)
83 CFLAGS += -DUSE_QINQ
84 endif
85
86 ifeq ($(MPLS_ROUTING),)
87 CFLAGS += -DMPLS_ROUTING
88 else ifeq ($(MPLS_ROUTING),y)
89 CFLAGS += -DMPLS_ROUTING
90 endif
91
92 LD_LUA  = $(shell pkg-config --silence-errors --libs-only-l lua)
93 CFLAGS += $(shell pkg-config --silence-errors --cflags lua)
94 ifeq ($(LD_LUA),)
95 LD_LUA  = $(shell pkg-config --silence-errors --libs-only-l lua5.2)
96 CFLAGS += $(shell pkg-config --silence-errors --cflags lua5.2)
97 ifeq ($(LD_LUA),)
98 LD_LUA  = $(shell pkg-config --silence-errors --libs-only-l lua5.3)
99 CFLAGS += $(shell pkg-config --silence-errors --cflags lua5.3)
100 ifeq ($(LD_LUA),)
101 LD_LUA =-llua
102 endif
103 endif
104 endif
105
106 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
107 LDLIBS += -lrte_pmd_ring -lrte_pmd_null -lrte_pmd_ixgbe -lrte_pmd_i40e  -lrte_pmd_e1000  -lrte_pmd_virtio -lrte_pmd_vmxnet3_uio
108 endif
109
110 LD_TINFO = $(shell pkg-config --silence-errors --libs-only-l tinfo)
111 LDFLAGS += -lm -lpcap $(LD_TINFO) $(LD_LUA)
112 LDFLAGS += -lncurses -lncursesw -ledit
113
114 PROX_STATS ?= y
115 ifeq ($(PROX_STATS),y)
116 CFLAGS += -DPROX_STATS
117 endif
118
119 ifeq ($(DPI_STATS),y)
120 CFLAGS += -DDPI_STATS
121 endif
122
123 ifeq ($(HW_DIRECT_STATS),y)
124 CFLAGS += -DPROX_HW_DIRECT_STATS
125 endif
126
127 ifeq ($(dbg),y)
128 EXTRA_CFLAGS += -ggdb
129 endif
130
131 ifeq ($(log),)
132 CFLAGS += -DPROX_MAX_LOG_LVL=2
133 else
134 CFLAGS += -DPROX_MAX_LOG_LVL=$(log)
135 endif
136
137 # When ipv4 packet is de-encalpusled from ipv6 packet, genaerate IP checksum.
138 ifeq ($(GEN_DECAP_IPV6_TO_IPV4_CKSUM),y)
139 CFLAGS += -DGEN_DECAP_IPV6_TO_IPV4_CKSUM
140 endif
141
142 # override any use-case/enviroment specific choices regarding crc and
143 # always use the sw implementation
144 ifeq ($(crc),soft)
145 CFLAGS += -DSOFT_CRC
146 endif
147
148 CFLAGS += -DPROX_PREFETCH_OFFSET=2
149 #CFLAGS += -DBRAS_RX_BULK
150 #CFLAGS += -DASSERT
151 #CFLAGS += -DENABLE_EXTRA_USER_STATISTICS
152 CFLAGS += -DLATENCY_PER_PACKET
153 CFLAGS += -DLATENCY_HISTOGRAM
154 CFLAGS += -DGRE_TP
155 CFLAGS += -std=gnu99
156 CFLAGS += -D_GNU_SOURCE                # for PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
157 CFLAGS += $(WERROR_FLAGS)
158 CFLAGS += -Wno-unused
159 CFLAGS += -Wno-unused-parameter
160 CFLAGS += -Wno-unused-result
161
162 # all source are stored in SRCS-y
163
164 SRCS-y := task_init.c
165
166 SRCS-y += handle_aggregator.c
167 SRCS-y += handle_nop.c
168 SRCS-y += handle_irq.c
169 SRCS-y += handle_arp.c
170 SRCS-y += handle_impair.c
171 SRCS-y += handle_lat.c
172 SRCS-y += handle_qos.c
173 SRCS-y += handle_qinq_decap4.c
174 SRCS-y += handle_routing.c
175 SRCS-y += handle_untag.c
176 SRCS-y += handle_mplstag.c
177 SRCS-y += handle_qinq_decap6.c
178
179 # support for GRE encap/decap dropped in latest DPDK versions
180 SRCS-$(call rte_ver_LT,2,1,0,0) += handle_gre_decap_encap.c
181
182 SRCS-y += rw_reg.c
183 SRCS-y += handle_lb_qinq.c
184 SRCS-y += handle_lb_pos.c
185 SRCS-y += handle_lb_net.c
186 SRCS-y += handle_qinq_encap4.c
187 SRCS-y += handle_qinq_encap6.c
188 SRCS-y += handle_classify.c
189 SRCS-y += handle_l2fwd.c
190 SRCS-y += handle_swap.c
191 SRCS-y += handle_police.c
192 SRCS-y += handle_acl.c
193 SRCS-y += handle_gen.c
194 SRCS-y += handle_master.c
195 SRCS-y += packet_utils.c
196 SRCS-y += handle_mirror.c
197 SRCS-y += handle_genl4.c
198 SRCS-y += handle_ipv6_tunnel.c
199 SRCS-y += handle_read.c
200 SRCS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += handle_esp.c
201 ifneq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_MB),y)
202 ifeq ($(FIRST_PROX_MAKE),)
203 $(warning "Building w/o IPSEC support")
204 endif
205 endif
206 SRCS-y += handle_cgnat.c
207 SRCS-y += handle_nat.c
208 SRCS-y += handle_dump.c
209 SRCS-y += handle_tsc.c
210 SRCS-y += handle_fm.c
211 SRCS-$(call rte_ver_GE,1,8,0,16) += handle_nsh.c
212 SRCS-y += handle_lb_5tuple.c
213 SRCS-y += handle_blockudp.c
214 SRCS-y += toeplitz.c
215 SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) += handle_pf_acl.c
216
217 SRCS-y += thread_nop.c
218 SRCS-y += thread_generic.c
219 SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) += thread_pipeline.c
220
221 SRCS-y += prox_args.c prox_cfg.c prox_cksum.c prox_port_cfg.c
222
223 SRCS-y += cfgfile.c clock.c commands.c cqm.c msr.c defaults.c
224 SRCS-y += display.c display_latency.c display_latency_distr.c display_mempools.c
225 SRCS-y += display_ports.c display_rings.c display_priority.c display_pkt_len.c display_l4gen.c display_tasks.c display_irq.c
226 SRCS-y += log.c hash_utils.c main.c parse_utils.c file_utils.c
227 SRCS-y += run.c input_conn.c input_curses.c
228 SRCS-y += rx_pkt.c lconf.c tx_pkt.c expire_cpe.c ip_subnet.c
229 SRCS-y += stats_port.c stats_mempool.c stats_ring.c stats_l4gen.c
230 SRCS-y += stats_latency.c stats_global.c stats_core.c stats_task.c stats_prio.c stats_irq.c
231 SRCS-y += cmd_parser.c input.c prox_shared.c prox_lua_types.c
232 SRCS-y += genl4_bundle.c heap.c genl4_stream_tcp.c genl4_stream_udp.c cdf.c
233 SRCS-y += stats.c stats_cons_log.c stats_cons_cli.c stats_parser.c hash_set.c prox_lua.c prox_malloc.c prox_ipv6.c prox_compat.c
234 SRCS-y += git_version.c
235
236 GIT_VERSION := "$(shell git describe --abbrev=8 --dirty --always)"
237
238 ifeq ($(FIRST_PROX_MAKE),)
239 MAKEFLAGS += --no-print-directory
240 FIRST_PROX_MAKE = 1
241 export FIRST_PROX_MAKE
242 all:    libedit_autoconf.h git_version.c
243         @./helper-scripts/trailing.sh
244         @$(MAKE) $@
245 clean:
246         $(Q) $(RM) -- 'libedit_autoconf.h'
247         @$(MAKE) $@
248 %::
249         @$(MAKE) $@
250
251 ifeq ($(call rte_ver_LT,17,2,0,0),y)
252 AUTO-CONFIG-SCRIPT = $(RTE_SDK)/scripts/auto-config-h.sh
253 else
254 AUTO-CONFIG-SCRIPT = $(RTE_SDK)/buildtools/auto-config-h.sh
255 endif
256
257 # DPDK CFLAGS prevents auto-conf program to properly compile
258 export CFLAGS=
259 # if el_rfunc_t exists, define HAVE_LIBEDIT_EL_RFUNC_T so that PROX knows it can use it
260 libedit_autoconf.h: $(AUTO-CONFIG-SCRIPT)
261         $(Q) $(RM) -- '$@'
262         $(Q) sh -- '$(AUTO-CONFIG-SCRIPT)' '$@' \
263                 HAVE_LIBEDIT_EL_RFUNC_T \
264                 histedit.h \
265                 type 'el_rfunc_t' \
266                 > /dev/null
267 # auto-conf adds empty line at the end of the file, considered as error by trailing.sh script
268         $(Q) sed -i '$$ d' '$@'
269
270 git_version.c: force
271         @echo 'const char *git_version=$(GIT_VERSION);' | cmp -s - $@ || echo 'const char *git_version=$(GIT_VERSION);' > $@
272         @echo $@
273 force:
274         
275 else
276 include $(RTE_SDK)/mk/rte.extapp.mk
277 endif