misc: remove GNU Indent directives
[vpp.git] / Makefile
1 # Copyright (c) 2021 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 export WS_ROOT=$(CURDIR)
15 export BR=$(WS_ROOT)/build-root
16 CCACHE_DIR?=$(BR)/.ccache
17 SHELL:=$(shell which bash)
18 GDB?=gdb
19 PLATFORM?=vpp
20 SAMPLE_PLUGIN?=no
21 STARTUP_DIR?=$(PWD)
22 MACHINE=$(shell uname -m)
23 SUDO?=sudo -E
24 DPDK_CONFIG?=no-pci
25
26 ,:=,
27 define disable_plugins
28 $(if $(1), \
29   "plugins {" \
30   $(patsubst %,"plugin %_plugin.so { disable }",$(subst $(,), ,$(1))) \
31   " }" \
32   ,)
33 endef
34
35 MINIMAL_STARTUP_CONF="                                                  \
36 unix {                                                                  \
37         interactive                                                     \
38         cli-listen /run/vpp/cli.sock                                    \
39         gid $(shell id -g)                                              \
40         $(if $(wildcard startup.vpp),"exec startup.vpp",)               \
41 }                                                                       \
42 $(if $(DPDK_CONFIG), "dpdk { $(DPDK_CONFIG) }",)                        \
43 $(if $(EXTRA_VPP_CONFIG), "$(EXTRA_VPP_CONFIG)",)                       \
44 $(call disable_plugins,$(DISABLED_PLUGINS))                             \
45 "
46
47 GDB_ARGS= -ex "handle SIGUSR1 noprint nostop"
48
49 #
50 # OS Detection
51 #
52 # We allow Darwin (MacOS) for docs generation; VPP build will still fail.
53 ifneq ($(shell uname),Darwin)
54 OS_ID        = $(shell grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
55 OS_VERSION_ID= $(shell grep '^VERSION_ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
56 endif
57
58 ifeq ($(filter ubuntu debian linuxmint,$(OS_ID)),$(OS_ID))
59 PKG=deb
60 else ifeq ($(filter rhel centos fedora opensuse-leap rocky almalinux,$(OS_ID)),$(OS_ID))
61 PKG=rpm
62 endif
63
64 # +libganglia1-dev if building the gmond plugin
65
66 DEB_DEPENDS  = curl build-essential autoconf automake ccache
67 DEB_DEPENDS += debhelper dkms git libtool libapr1-dev dh-python
68 DEB_DEPENDS += libconfuse-dev git-review exuberant-ctags cscope pkg-config
69 DEB_DEPENDS += gcovr lcov chrpath autoconf libnuma-dev
70 DEB_DEPENDS += python3-all python3-setuptools check
71 DEB_DEPENDS += libffi-dev python3-ply
72 DEB_DEPENDS += cmake ninja-build python3-jsonschema python3-yaml
73 DEB_DEPENDS += python3-venv  # ensurepip
74 DEB_DEPENDS += python3-dev python3-pip
75 DEB_DEPENDS += libnl-3-dev libnl-route-3-dev libmnl-dev
76 # DEB_DEPENDS += enchant  # for docs
77 DEB_DEPENDS += python3-virtualenv
78 DEB_DEPENDS += libssl-dev
79 DEB_DEPENDS += libelf-dev libpcap-dev # for libxdp (af_xdp)
80 DEB_DEPENDS += iperf3 # for 'make test TEST=vcl'
81 DEB_DEPENDS += nasm
82 DEB_DEPENDS += iperf ethtool  # for 'make test TEST=vm_vpp_interfaces'
83 DEB_DEPENDS += libpcap-dev
84 DEB_DEPENDS += tshark
85
86 LIBFFI=libffi6 # works on all but 20.04 and debian-testing
87
88 ifeq ($(OS_VERSION_ID),22.04)
89         DEB_DEPENDS += python3-virtualenv
90         DEB_DEPENDS += libssl-dev
91         DEB_DEPENDS += clang clang-format-11
92         LIBFFI=libffi7
93         DEB_DEPENDS += enchant-2  # for docs
94 else ifeq ($(OS_VERSION_ID),20.04)
95         DEB_DEPENDS += python3-virtualenv
96         DEB_DEPENDS += libssl-dev
97         DEB_DEPENDS += clang clang-format-11
98         LIBFFI=libffi7
99         DEB_DEPENDS += enchant-2  # for docs
100 else ifeq ($(OS_VERSION_ID),20.10)
101         DEB_DEPENDS += clang clang-format-11
102         LIBFFI=libffi8ubuntu1
103 else ifeq ($(OS_ID)-$(OS_VERSION_ID),debian-10)
104         DEB_DEPENDS += virtualenv
105 else ifeq ($(OS_ID)-$(OS_VERSION_ID),debian-11)
106         DEB_DEPENDS += virtualenv
107         DEB_DEPENDS += clang clang-format-11
108         LIBFFI=libffi7
109 else ifeq ($(OS_ID)-$(OS_VERSION_ID),debian-12)
110         DEB_DEPENDS += virtualenv
111         DEB_DEPENDS += clang-14 clang-format-14
112         # for extras/scripts/checkstyle.sh
113         export CLANG_FORMAT_VER=14
114         LIBFFI=libffi8
115 else
116         DEB_DEPENDS += clang-11 clang-format-11
117         LIBFFI=libffi7
118         DEB_DEPENDS += enchant-2  # for docs
119 endif
120
121 DEB_DEPENDS += $(LIBFFI)
122
123 RPM_DEPENDS  = glibc-static
124 RPM_DEPENDS += apr-devel
125 RPM_DEPENDS += numactl-devel
126 RPM_DEPENDS += check check-devel
127 RPM_DEPENDS += selinux-policy selinux-policy-devel
128 RPM_DEPENDS += ninja-build
129 RPM_DEPENDS += ccache
130 RPM_DEPENDS += xmlto
131 RPM_DEPENDS += elfutils-libelf-devel libpcap-devel
132 RPM_DEPENDS += libnl3-devel libmnl-devel
133 RPM_DEPENDS += nasm
134
135 ifeq ($(OS_ID),fedora)
136         RPM_DEPENDS += dnf-utils
137         RPM_DEPENDS += subunit subunit-devel
138         RPM_DEPENDS += compat-openssl10-devel
139         RPM_DEPENDS += python3-devel  # needed for python3 -m pip install psutil
140         RPM_DEPENDS += python3-ply  # for vppapigen
141         RPM_DEPENDS += python3-virtualenv python3-jsonschema
142         RPM_DEPENDS += cmake
143         RPM_DEPENDS_GROUPS = 'C Development Tools and Libraries'
144 else ifeq ($(OS_ID),rocky)
145         RPM_DEPENDS += yum-utils
146         RPM_DEPENDS += subunit subunit-devel
147         RPM_DEPENDS += openssl-devel
148         RPM_DEPENDS += python3-devel  # needed for python3 -m pip install psutil
149         RPM_DEPENDS += python3-ply  # for vppapigen
150         RPM_DEPENDS += python3-virtualenv python3-jsonschema
151         RPM_DEPENDS += infiniband-diags llvm clang cmake
152         RPM_DEPENDS_GROUPS = 'Development Tools'
153 else ifeq ($(OS_ID),almalinux)
154         RPM_DEPENDS += yum-utils
155         RPM_DEPENDS += subunit subunit-devel
156         RPM_DEPENDS += openssl-devel
157         RPM_DEPENDS += python3-devel  # needed for python3 -m pip install psutil
158         RPM_DEPENDS += python3-ply  # for vppapigen
159         RPM_DEPENDS += python3-virtualenv python3-jsonschema
160         RPM_DEPENDS += infiniband-diags llvm clang cmake
161         RPM_DEPENDS_GROUPS = 'Development Tools'
162 else ifeq ($(OS_ID)-$(OS_VERSION_ID),centos-8)
163         RPM_DEPENDS += yum-utils
164         RPM_DEPENDS += compat-openssl10 openssl-devel
165         RPM_DEPENDS += python2-devel python36-devel python3-ply
166         RPM_DEPENDS += python3-virtualenv python3-jsonschema
167         RPM_DEPENDS += libarchive cmake
168         RPM_DEPENDS += infiniband-diags libibumad
169         RPM_DEPENDS += libpcap-devel llvm-toolset
170         RPM_DEPENDS_GROUPS = 'Development Tools'
171 else
172         RPM_DEPENDS += yum-utils
173         RPM_DEPENDS += openssl-devel
174         RPM_DEPENDS += python36-ply  # for vppapigen
175         RPM_DEPENDS += python3-devel python3-pip
176         RPM_DEPENDS += python-virtualenv python36-jsonschema
177         RPM_DEPENDS += devtoolset-9 devtoolset-9-libasan-devel
178         RPM_DEPENDS += cmake3
179         RPM_DEPENDS_GROUPS = 'Development Tools'
180 endif
181
182 # +ganglia-devel if building the ganglia plugin
183
184 RPM_DEPENDS += chrpath libffi-devel rpm-build
185
186 RPM_DEPENDS_DEBUG  = glibc-debuginfo e2fsprogs-debuginfo
187 RPM_DEPENDS_DEBUG += krb5-debuginfo openssl-debuginfo
188 RPM_DEPENDS_DEBUG += zlib-debuginfo nss-softokn-debuginfo
189 RPM_DEPENDS_DEBUG += yum-plugin-auto-update-debug-info
190
191 RPM_SUSE_BUILDTOOLS_DEPS = autoconf automake ccache check-devel chrpath
192 RPM_SUSE_BUILDTOOLS_DEPS += clang cmake indent libtool make ninja python3-ply
193
194 RPM_SUSE_DEVEL_DEPS = glibc-devel-static libnuma-devel libelf-devel
195 RPM_SUSE_DEVEL_DEPS += libopenssl-devel lsb-release
196 RPM_SUSE_DEVEL_DEPS += libpcap-devel llvm-devel
197 RPM_SUSE_DEVEL_DEPS += curl libstdc++-devel bison gcc-c++ zlib-devel
198
199 RPM_SUSE_PYTHON_DEPS = python3-devel python3-pip python3-rpm-macros
200
201 RPM_SUSE_PLATFORM_DEPS = shadow rpm-build
202
203 ifeq ($(OS_ID),opensuse-leap)
204         RPM_SUSE_DEVEL_DEPS += xmlto openssl-devel asciidoc git nasm
205         RPM_SUSE_PYTHON_DEPS += python3 python3-ply python3-virtualenv
206         RPM_SUSE_PLATFORM_DEPS += distribution-release
207 endif
208
209 RPM_SUSE_DEPENDS += $(RPM_SUSE_BUILDTOOLS_DEPS) $(RPM_SUSE_DEVEL_DEPS) $(RPM_SUSE_PYTHON_DEPS) $(RPM_SUSE_PLATFORM_DEPS)
210
211 ifneq ($(wildcard $(STARTUP_DIR)/startup.conf),)
212         STARTUP_CONF ?= $(STARTUP_DIR)/startup.conf
213 endif
214
215 ifeq ($(findstring y,$(UNATTENDED)),y)
216 DEBIAN_FRONTEND=noninteractive
217 CONFIRM=-y
218 FORCE=--allow-downgrades --allow-remove-essential --allow-change-held-packages
219 endif
220
221 TARGETS = vpp
222
223 ifneq ($(SAMPLE_PLUGIN),no)
224 TARGETS += sample-plugin
225 endif
226
227 define banner
228         @echo "========================================================================"
229         @echo " $(1)"
230         @echo "========================================================================"
231         @echo " "
232 endef
233
234 .PHONY: help
235 help:
236         @echo "Make Targets:"
237         @echo " install-dep[s]       - install software dependencies"
238         @echo " wipe                 - wipe all products of debug build "
239         @echo " wipe-release         - wipe all products of release build "
240         @echo " build                - build debug binaries"
241         @echo " build-release        - build release binaries"
242         @echo " build-coverity       - build coverity artifacts"
243         @echo " rebuild              - wipe and build debug binaries"
244         @echo " rebuild-release      - wipe and build release binaries"
245         @echo " run                  - run debug binary"
246         @echo " run-release          - run release binary"
247         @echo " debug                - run debug binary with debugger"
248         @echo " debug-release        - run release binary with debugger"
249         @echo " test                 - build and run tests"
250         @echo " test-help            - show help on test framework"
251         @echo " run-vat              - run vpp-api-test tool"
252         @echo " pkg-deb              - build DEB packages"
253         @echo " pkg-deb-debug        - build DEB debug packages"
254         @echo " pkg-snap             - build SNAP package"
255         @echo " snap-clean           - clean up snap build environment"
256         @echo " pkg-rpm              - build RPM packages"
257         @echo " install-ext-dep[s]   - install external development dependencies"
258         @echo " ctags                - (re)generate ctags database"
259         @echo " gtags                - (re)generate gtags database"
260         @echo " cscope               - (re)generate cscope database"
261         @echo " compdb               - (re)generate compile_commands.json"
262         @echo " checkstyle           - check coding style"
263         @echo " checkstyle-commit    - check commit message format"
264         @echo " checkstyle-python    - check python coding style using 'black' formatter"
265         @echo " checkstyle-api       - check api for incompatible changes"
266         @echo " fixstyle             - fix coding style"
267         @echo " fixstyle-python      - fix python coding style using 'black' formatter"
268         @echo " doxygen              - DEPRECATED - use 'make docs'"
269         @echo " bootstrap-doxygen    - DEPRECATED"
270         @echo " wipe-doxygen         - DEPRECATED"
271         @echo " checkfeaturelist     - check FEATURE.yaml according to schema"
272         @echo " featurelist          - dump feature list in markdown"
273         @echo " json-api-files       - (re)-generate json api files"
274         @echo " json-api-files-debug - (re)-generate json api files for debug target"
275         @echo " go-api-files         - (re)-generate golang api files"
276         @echo " docs                 - Build the Sphinx documentation"
277         @echo " docs-venv            - Build the virtual environment for the Sphinx docs"
278         @echo " docs-clean           - Remove the generated files from the Sphinx docs"
279         @echo " docs-rebuild         - Rebuild all of the Sphinx documentation"
280         @echo ""
281         @echo "Make Arguments:"
282         @echo " V=[0|1]                  - set build verbosity level"
283         @echo " STARTUP_CONF=<path>      - startup configuration file"
284         @echo "                            (e.g. /etc/vpp/startup.conf)"
285         @echo " STARTUP_DIR=<path>       - startup directory (e.g. /etc/vpp)"
286         @echo "                            It also sets STARTUP_CONF if"
287         @echo "                            startup.conf file is present"
288         @echo " GDB=<path>               - gdb binary to use for debugging"
289         @echo " PLATFORM=<name>          - target platform. default is vpp"
290         @echo " DPDK_CONFIG=<conf>       - add specified dpdk config commands to"
291         @echo "                            autogenerated startup.conf"
292         @echo "                            (e.g. \"no-pci\" )"
293         @echo " SAMPLE_PLUGIN=yes        - in addition build/run/debug sample plugin"
294         @echo " DISABLED_PLUGINS=<list>  - comma separated list of plugins which"
295         @echo "                            should not be loaded"
296         @echo ""
297         @echo "Current Argument Values:"
298         @echo " V                 = $(V)"
299         @echo " STARTUP_CONF      = $(STARTUP_CONF)"
300         @echo " STARTUP_DIR       = $(STARTUP_DIR)"
301         @echo " GDB               = $(GDB)"
302         @echo " PLATFORM          = $(PLATFORM)"
303         @echo " DPDK_VERSION      = $(DPDK_VERSION)"
304         @echo " DPDK_CONFIG       = $(DPDK_CONFIG)"
305         @echo " SAMPLE_PLUGIN     = $(SAMPLE_PLUGIN)"
306         @echo " DISABLED_PLUGINS  = $(DISABLED_PLUGINS)"
307
308 $(BR)/.deps.ok:
309 ifeq ($(findstring y,$(UNATTENDED)),y)
310         $(MAKE) install-dep
311 endif
312 ifeq ($(filter ubuntu debian linuxmint,$(OS_ID)),$(OS_ID))
313         @MISSING=$$(apt-get install -y -qq -s $(DEB_DEPENDS) | grep "^Inst ") ; \
314         if [ -n "$$MISSING" ] ; then \
315           echo "\nPlease install missing packages: \n$$MISSING\n" ; \
316           echo "by executing \"make install-dep\"\n" ; \
317           exit 1 ; \
318         fi ; \
319         exit 0
320 else ifneq ("$(wildcard /etc/redhat-release)","")
321         @for i in $(RPM_DEPENDS) ; do \
322             RPM=$$(basename -s .rpm "$${i##*/}" | cut -d- -f1,2,3,4)  ; \
323             MISSING+=$$(rpm -q $$RPM | grep "^package")    ;    \
324         done                                                       ;    \
325         if [ -n "$$MISSING" ] ; then \
326           echo "Please install missing RPMs: \n$$MISSING\n" ; \
327           echo "by executing \"make install-dep\"\n" ; \
328           exit 1 ; \
329         fi ; \
330         exit 0
331 endif
332         @touch $@
333
334 .PHONY: bootstrap
335 bootstrap:
336         @echo "'make bootstrap' is not needed anymore"
337
338 .PHONY: install-dep
339 install-dep:
340 ifeq ($(filter ubuntu debian linuxmint,$(OS_ID)),$(OS_ID))
341         @sudo -E apt-get update
342         @sudo -E apt-get $(APT_ARGS) $(CONFIRM) $(FORCE) install $(DEB_DEPENDS)
343 else ifneq ("$(wildcard /etc/redhat-release)","")
344 ifeq ($(OS_ID),rhel)
345         @sudo -E yum-config-manager --enable rhel-server-rhscl-7-rpms
346         @sudo -E yum groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
347         @sudo -E yum install $(CONFIRM) $(RPM_DEPENDS)
348         @sudo -E debuginfo-install $(CONFIRM) glibc openssl-libs zlib
349 else ifeq ($(OS_ID),rocky)
350         @sudo -E dnf install $(CONFIRM) dnf-plugins-core epel-release
351         @sudo -E dnf config-manager --set-enabled \
352           $(shell dnf repolist all 2>/dev/null|grep -i crb|cut -d' ' -f1|grep -v source)
353         @sudo -E dnf groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
354         @sudo -E dnf install $(CONFIRM) $(RPM_DEPENDS)
355 else ifeq ($(OS_ID)-$(OS_VERSION_ID),centos-8)
356         @sudo -E dnf install $(CONFIRM) dnf-plugins-core epel-release
357         @sudo -E dnf config-manager --set-enabled \
358           $(shell dnf repolist all 2>/dev/null|grep -i powertools|cut -d' ' -f1|grep -v source)
359         @sudo -E dnf groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
360         @sudo -E dnf install --skip-broken $(CONFIRM) $(RPM_DEPENDS)
361 else ifeq ($(OS_ID),centos)
362         @sudo -E yum install $(CONFIRM) centos-release-scl-rh epel-release
363         @sudo -E yum groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
364         @sudo -E yum install $(CONFIRM) $(RPM_DEPENDS)
365         @sudo -E yum install $(CONFIRM) --enablerepo=base-debuginfo $(RPM_DEPENDS_DEBUG)
366 else ifeq ($(OS_ID),fedora)
367         @sudo -E dnf groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
368         @sudo -E dnf install $(CONFIRM) $(RPM_DEPENDS)
369         @sudo -E debuginfo-install $(CONFIRM) glibc openssl-libs zlib
370 endif
371 else ifeq ($(filter opensuse-leap-15.3 opensuse-leap-15.4 ,$(OS_ID)-$(OS_VERSION_ID)),$(OS_ID)-$(OS_VERSION_ID))
372         @sudo -E zypper refresh
373         @sudo -E zypper install  -y $(RPM_SUSE_DEPENDS)
374 else
375         $(error "This option currently works only on Ubuntu, Debian, RHEL, CentOS or openSUSE-leap systems")
376 endif
377         git config commit.template .git_commit_template.txt
378
379 .PHONY: install-deps
380 install-deps: install-dep
381
382 define make
383         @$(MAKE) -C $(BR) PLATFORM=$(PLATFORM) TAG=$(1) $(2)
384 endef
385
386 $(BR)/scripts/.version:
387 ifneq ("$(wildcard /etc/redhat-release)","")
388         $(shell $(BR)/scripts/version rpm-string > $(BR)/scripts/.version)
389 else
390         $(shell $(BR)/scripts/version > $(BR)/scripts/.version)
391 endif
392
393 DIST_FILE = $(BR)/vpp-$(shell src/scripts/version).tar
394 DIST_SUBDIR = vpp-$(shell src/scripts/version|cut -f1 -d-)
395
396 .PHONY: dist
397 dist:
398         @if git rev-parse 2> /dev/null ; then \
399             git archive \
400               --prefix=$(DIST_SUBDIR)/ \
401               --format=tar \
402               -o $(DIST_FILE) \
403             HEAD ; \
404             git describe --long > $(BR)/.version ; \
405         else \
406             (cd .. ; tar -cf $(DIST_FILE) $(DIST_SUBDIR) --exclude=*.tar) ; \
407             src/scripts/version > $(BR)/.version ; \
408         fi
409         @tar --append \
410           --file $(DIST_FILE) \
411           --transform='s,.*/.version,$(DIST_SUBDIR)/src/scripts/.version,' \
412           $(BR)/.version
413         @$(RM) $(BR)/.version $(DIST_FILE).xz
414         @xz -v --threads=0 $(DIST_FILE)
415         @$(RM) $(BR)/vpp-latest.tar.xz
416         @ln -rs $(DIST_FILE).xz $(BR)/vpp-latest.tar.xz
417
418 .PHONY: build
419 build: $(BR)/.deps.ok
420         $(call make,$(PLATFORM)_debug,$(addsuffix -install,$(TARGETS)))
421
422 .PHONY: wipedist
423 wipedist:
424         @$(RM) $(BR)/*.tar.xz
425
426 .PHONY: wipe
427 wipe: wipedist test-wipe $(BR)/.deps.ok
428         $(call make,$(PLATFORM)_debug,$(addsuffix -wipe,$(TARGETS)))
429         @find . -type f -name "*.api.json" ! -path "./src/*" -exec rm {} \;
430
431 .PHONY: rebuild
432 rebuild: wipe build
433
434 .PHONY: build-release
435 build-release: $(BR)/.deps.ok
436         $(call make,$(PLATFORM),$(addsuffix -install,$(TARGETS)))
437
438 .PHONY: wipe-release
439 wipe-release: test-wipe $(BR)/.deps.ok
440         $(call make,$(PLATFORM),$(addsuffix -wipe,$(TARGETS)))
441
442 .PHONY: rebuild-release
443 rebuild-release: wipe-release build-release
444
445 export TEST_DIR ?= $(WS_ROOT)/test
446
447 define test
448         $(if $(filter-out $(2),retest),$(MAKE) -C $(BR) PLATFORM=vpp TAG=$(1) CC=$(CC) vpp-install,)
449         $(eval libs:=lib lib64)
450         $(MAKE) -C test \
451           VPP_BUILD_DIR=$(BR)/build-$(1)-native/vpp \
452           VPP_BIN=$(BR)/install-$(1)-native/vpp/bin/vpp \
453           VPP_INSTALL_PATH=$(BR)/install-$(1)-native/ \
454           EXTENDED_TESTS=$(EXTENDED_TESTS) \
455           TEST_GCOV=$(TEST_GCOV) \
456           PYTHON=$(PYTHON) \
457           OS_ID=$(OS_ID) \
458           RND_SEED=$(RND_SEED) \
459           CACHE_OUTPUT=$(CACHE_OUTPUT) \
460           TAG=$(1) \
461           $(2)
462 endef
463
464 .PHONY: test
465 test:
466 ifeq ($(CC),cc)
467         $(eval CC=clang)
468 endif
469         $(call test,vpp,test)
470
471 .PHONY: test-debug
472 test-debug:
473 ifeq ($(CC),cc)
474         $(eval CC=clang)
475 endif
476         $(call test,vpp_debug,test)
477
478 .PHONY: test-cov
479 test-cov:
480         $(eval CC=gcc)
481         $(eval TEST_GCOV=1)
482         $(call test,vpp_gcov,cov)
483
484 .PHONY: test-cov-build
485 test-cov-build:
486         $(eval CC=gcc)
487         $(eval TEST_GCOV=1)
488         $(call test,vpp_gcov,test)
489
490 .PHONY: test-cov-prep
491 test-cov-prep:
492         $(eval CC=gcc)
493         $(call test,vpp_gcov,cov-prep)
494
495 .PHONY: test-cov-post
496 test-cov-post:
497         $(eval CC=gcc)
498         $(call test,vpp_gcov,cov-post)
499
500 .PHONY: test-all
501 test-all:
502         $(eval EXTENDED_TESTS=1)
503         $(call test,vpp,test)
504
505 .PHONY: test-all-debug
506 test-all-debug:
507         $(eval EXTENDED_TESTS=1)
508         $(call test,vpp_debug,test)
509
510 .PHONY: test-all-cov
511 test-all-cov:
512         $(eval CC=gcc)
513         $(eval TEST_GCOV=1)
514         $(eval EXTENDED_TESTS=1)
515         $(call test,vpp_gcov,test)
516
517 .PHONY: papi-wipe
518 papi-wipe: test-wipe-papi
519         $(call banner,"This command is deprecated. Please use 'test-wipe-papi'")
520
521 .PHONY: test-wipe-papi
522 test-wipe-papi:
523         @$(MAKE) -C test wipe-papi
524
525 .PHONY: test-help
526 test-help:
527         @$(MAKE) -C test help
528
529 .PHONY: test-wipe
530 test-wipe:
531         @$(MAKE) -C test wipe
532
533 .PHONY: test-shell
534 test-shell:
535         $(call test,vpp,shell)
536
537 .PHONY: test-shell-debug
538 test-shell-debug:
539         $(call test,vpp_debug,shell)
540
541 .PHONY: test-shell-cov
542 test-shell-cov:
543         $(eval CC=gcc)
544         $(eval TEST_GCOV=1)
545         $(call test,vpp_gcov,shell)
546
547 .PHONY: test-dep
548 test-dep:
549         @make -C test test-dep
550
551 .PHONY: test-doc
552 test-doc:
553         @echo "make test-doc is DEPRECATED: use 'make docs'"
554         sleep 300
555
556 .PHONY: test-wipe-doc
557 test-wipe-doc:
558         @echo "make test-wipe-doc is DEPRECATED"
559         sleep 300
560
561 .PHONY: test-wipe-cov
562 test-wipe-cov:
563         $(call make,$(PLATFORM)_gcov,$(addsuffix -wipe,$(TARGETS)))
564         @$(MAKE) -C test wipe-cov
565
566 .PHONY: test-wipe-all
567 test-wipe-all:
568         @$(MAKE) -C test wipe-all
569
570 # Note: All python venv consolidated in test/Makefile, test/requirements*.txt
571 .PHONY: test-checkstyle
572 test-checkstyle:
573         $(warning test-checkstyle is deprecated. Running checkstyle-python.")
574         @$(MAKE) -C test checkstyle-python-all
575
576 # Note: All python venv consolidated in test/Makefile, test/requirements*.txt
577 .PHONY: test-checkstyle-diff
578 test-checkstyle-diff:
579         $(warning test-checkstyle-diff is deprecated. Running checkstyle-python.")
580         @$(MAKE) -C test checkstyle-python-all
581
582 .PHONY: test-refresh-deps
583 test-refresh-deps:
584         @$(MAKE) -C test refresh-deps
585
586 .PHONY: retest
587 retest:
588         $(call test,vpp,retest)
589
590 .PHONY: retest-debug
591 retest-debug:
592         $(call test,vpp_debug,retest)
593
594 .PHONY: retest-all
595 retest-all:
596         $(eval EXTENDED_TESTS=1)
597         $(call test,vpp,retest)
598
599 .PHONY: retest-all-debug
600 retest-all-debug:
601         $(eval EXTENDED_TESTS=1)
602         $(call test,vpp_debug,retest)
603
604 .PHONY: test-start-vpp-in-gdb
605 test-start-vpp-in-gdb:
606         $(call test,vpp,start-gdb)
607
608 .PHONY: test-start-vpp-debug-in-gdb
609 test-start-vpp-debug-in-gdb:
610         $(call test,vpp_debug,start-gdb)
611
612 ifeq ("$(wildcard $(STARTUP_CONF))","")
613 define run
614         @echo "WARNING: STARTUP_CONF not defined or file doesn't exist."
615         @echo "         Running with minimal startup config: $(MINIMAL_STARTUP_CONF)\n"
616         @cd $(STARTUP_DIR) && \
617           $(SUDO) $(2) $(1)/vpp/bin/vpp $(MINIMAL_STARTUP_CONF)
618 endef
619 else
620 define run
621         @cd $(STARTUP_DIR) && \
622           $(SUDO) $(2) $(1)/vpp/bin/vpp $(shell cat $(STARTUP_CONF) | sed -e 's/#.*//')
623 endef
624 endif
625
626 %.files: .FORCE
627         @find src -name '*.[chS]' > $@
628
629 .FORCE:
630
631 .PHONY: run
632 run:
633         $(call run, $(BR)/install-$(PLATFORM)_debug-native)
634
635 .PHONY: run-release
636 run-release:
637         $(call run, $(BR)/install-$(PLATFORM)-native)
638
639 .PHONY: debug
640 debug:
641         $(call run, $(BR)/install-$(PLATFORM)_debug-native,$(GDB) $(GDB_ARGS) --args)
642
643 .PHONY: build-coverity
644 build-coverity:
645         $(call make,$(PLATFORM)_coverity,install-packages)
646         @$(MAKE) -C build-root PLATFORM=vpp TAG=vpp_coverity libmemif-install
647
648 .PHONY: debug-release
649 debug-release:
650         $(call run, $(BR)/install-$(PLATFORM)-native,$(GDB) $(GDB_ARGS) --args)
651
652 .PHONY: build-vat
653 build-vat:
654         $(call make,$(PLATFORM)_debug,vpp-api-test-install)
655
656 .PHONY: run-vat
657 run-vat:
658         @$(SUDO) $(BR)/install-$(PLATFORM)_debug-native/vpp/bin/vpp_api_test
659
660 .PHONY: pkg-deb
661 pkg-deb:
662         $(call make,$(PLATFORM),vpp-package-deb)
663
664 .PHONY: pkg-snap
665 pkg-snap:
666         cd extras/snap ;                        \
667         ./prep ;                                \
668         SNAPCRAFT_BUILD_ENVIRONMENT_MEMORY=8G   \
669         SNAPCRAFT_BUILD_ENVIRONMENT_CPU=6       \
670         snapcraft --debug
671
672 .PHONY: snap-clean
673 snap-clean:
674         cd extras/snap ;                        \
675         snapcraft clean ;                       \
676         rm -f *.snap *.tgz
677
678 .PHONY: pkg-deb-debug
679 pkg-deb-debug:
680         $(call make,$(PLATFORM)_debug,vpp-package-deb)
681
682 .PHONY: pkg-rpm
683 pkg-rpm: dist
684         $(MAKE) -C extras/rpm
685
686 .PHONY: pkg-srpm
687 pkg-srpm: dist
688         $(MAKE) -C extras/rpm srpm
689
690 .PHONY: install-ext-deps
691 install-ext-deps:
692         $(MAKE) -C build/external install-$(PKG)
693
694 .PHONY: install-ext-dep
695 install-ext-dep: install-ext-deps
696
697 .PHONY: json-api-files
698 json-api-files:
699         $(WS_ROOT)/src/tools/vppapigen/generate_json.py
700
701 .PHONY: json-api-files-debug
702 json-api-files-debug:
703         $(WS_ROOT)/src/tools/vppapigen/generate_json.py --debug-target
704
705 .PHONY: go-api-files
706 go-api-files: json-api-files
707         $(WS_ROOT)/src/tools/vppapigen/generate_go.py $(ARGS)
708
709 .PHONY: ctags
710 ctags: ctags.files
711         @ctags --totals --tag-relative=yes -L $<
712         @rm $<
713
714 .PHONY: gtags
715 gtags: ctags
716         @gtags --gtagslabel=ctags
717
718 .PHONY: cscope
719 cscope: cscope.files
720         @cscope -b -q -v
721
722 .PHONY: compdb
723 compdb:
724         @ninja -C build-root/build-vpp_debug-native/vpp build.ninja
725         @ninja -C build-root/build-vpp_debug-native/vpp -t compdb | \
726           src/scripts/compdb_cleanup.py > compile_commands.json
727
728 .PHONY: checkstyle
729 checkstyle: checkfeaturelist
730         @extras/scripts/checkstyle.sh
731
732 .PHONY: checkstyle-commit
733 checkstyle-commit:
734         @extras/scripts/check_commit_msg.sh
735
736 .PHONY: checkstyle-test
737 checkstyle-test:
738         $(warning test-checkstyle is deprecated. Running checkstyle-python.")
739         @$(MAKE) -C test checkstyle-python-all
740
741 # Note: All python venv consolidated in test/Makefile, test/requirements*.txt
742 .PHONY: checkstyle-python
743 checkstyle-python:
744         @$(MAKE) -C test checkstyle-python-all
745
746 .PHONY: checkstyle-all
747 checkstyle-all: checkstyle-commit checkstyle checkstyle-python docs-spell
748
749 .PHONY: fixstyle
750 fixstyle:
751         @extras/scripts/checkstyle.sh --fix
752
753 # Note: All python venv consolidated in test/Makefile, test/requirements*.txt
754 .PHONY: fixstyle-python
755 fixstyle-python:
756         @$(MAKE) -C test fixstyle-python-all
757
758 .PHONY: checkstyle-api
759 checkstyle-api:
760         @extras/scripts/crcchecker.py --check-patchset
761
762 # necessary because Bug 1696324 - Update to python3.6 breaks PyYAML dependencies
763 # Status:       CLOSED CANTFIX
764 # https://bugzilla.redhat.com/show_bug.cgi?id=1696324
765 .PHONY: centos-pyyaml
766 centos-pyyaml:
767 ifeq ($(OS_ID)-$(OS_VERSION_ID),centos-8)
768         @sudo -E yum install $(CONFIRM) python3-pyyaml
769 endif
770
771 .PHONY: featurelist
772 featurelist: centos-pyyaml
773         @extras/scripts/fts.py --all --markdown
774
775 .PHONY: checkfeaturelist
776 checkfeaturelist: centos-pyyaml
777         @extras/scripts/fts.py --validate --all
778
779 #
780 # Build the documentation
781 #
782
783 .PHONY: bootstrap-doxygen
784 bootstrap-doxygen:
785         @echo "make bootstrap-doxygen is DEPRECATED"
786         sleep 300
787
788 .PHONY: doxygen
789 doxygen: docs
790         @echo "make doxygen is DEPRECATED: use 'make docs'"
791         sleep 300
792
793 .PHONY: wipe-doxygen
794 wipe-doxygen:
795         @echo "make wipe-doxygen is DEPRECATED"
796         sleep 300
797
798 .PHONY: docs-%
799 docs-%:
800         @$(MAKE) -C $(WS_ROOT)/docs $*
801
802 .PHONY: docs
803 docs:
804         @$(MAKE) -C $(WS_ROOT)/docs docs
805
806 .PHONY: pkg-verify
807 pkg-verify: install-dep $(BR)/.deps.ok install-ext-deps
808         $(call banner,"Building for PLATFORM=vpp")
809         @$(MAKE) -C build-root PLATFORM=vpp TAG=vpp wipe-all install-packages
810         $(call banner,"Building sample-plugin")
811         @$(MAKE) -C build-root PLATFORM=vpp TAG=vpp sample-plugin-install
812         $(call banner,"Building libmemif")
813         @$(MAKE) -C build-root PLATFORM=vpp TAG=vpp libmemif-install
814         $(call banner,"Building $(PKG) packages")
815         @$(MAKE) pkg-$(PKG)
816
817 # Note: 'make verify' target is not used by ci-management scripts
818 MAKE_VERIFY_GATE_OS ?= ubuntu-22.04
819 .PHONY: verify
820 verify: pkg-verify
821 ifeq ($(OS_ID)-$(OS_VERSION_ID),$(MAKE_VERIFY_GATE_OS))
822         $(call banner,"Testing vppapigen")
823         @src/tools/vppapigen/test_vppapigen.py
824         $(call banner,"Running tests")
825         @$(MAKE) COMPRESS_FAILED_TEST_LOGS=yes RETRIES=3 test
826 else
827         $(call banner,"Skipping tests. Tests under 'make verify' supported on $(MAKE_VERIFY_GATE_OS)")
828 endif
829
830 .PHONY: check-dpdk-mlx
831 check-dpdk-mlx:
832         @[ $$($(MAKE) -sC build/external dpdk-show-DPDK_MLX_DEFAULT) = y ]