session: maintain old state on premature close
[vpp.git] / Makefile
index 96db600..98d1d41 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -40,6 +40,7 @@ unix {                                                                        \
        $(if $(wildcard startup.vpp),"exec startup.vpp",)               \
 }                                                                      \
 $(if $(DPDK_CONFIG), "dpdk { $(DPDK_CONFIG) }",)                       \
+$(if $(EXTRA_VPP_CONFIG), "$(EXTRA_VPP_CONFIG)",)                      \
 $(call disable_plugins,$(DISABLED_PLUGINS))                            \
 "
 
@@ -54,9 +55,9 @@ OS_ID        = $(shell grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"
 OS_VERSION_ID= $(shell grep '^VERSION_ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g')
 endif
 
-ifeq ($(filter ubuntu debian,$(OS_ID)),$(OS_ID))
+ifeq ($(filter ubuntu debian linuxmint,$(OS_ID)),$(OS_ID))
 PKG=deb
-else ifeq ($(filter rhel centos fedora opensuse-leap,$(OS_ID)),$(OS_ID))
+else ifeq ($(filter rhel centos fedora opensuse-leap rocky,$(OS_ID)),$(OS_ID))
 PKG=rpm
 endif
 
@@ -65,33 +66,33 @@ endif
 DEB_DEPENDS  = curl build-essential autoconf automake ccache
 DEB_DEPENDS += debhelper dkms git libtool libapr1-dev dh-python
 DEB_DEPENDS += libconfuse-dev git-review exuberant-ctags cscope pkg-config
-DEB_DEPENDS += lcov chrpath autoconf libnuma-dev
+DEB_DEPENDS += gcovr lcov chrpath autoconf libnuma-dev
 DEB_DEPENDS += python3-all python3-setuptools check
 DEB_DEPENDS += libffi-dev python3-ply
-DEB_DEPENDS += cmake ninja-build uuid-dev python3-jsonschema python3-yaml
+DEB_DEPENDS += cmake ninja-build python3-jsonschema python3-yaml
 DEB_DEPENDS += python3-venv  # ensurepip
 DEB_DEPENDS += python3-dev python3-pip
 DEB_DEPENDS += libnl-3-dev libnl-route-3-dev libmnl-dev
 # DEB_DEPENDS += enchant  # for docs
 DEB_DEPENDS += python3-virtualenv
 DEB_DEPENDS += libssl-dev
-DEB_DEPENDS += libelf-dev # for libbpf (af_xdp)
+DEB_DEPENDS += libelf-dev libpcap-dev # for libxdp (af_xdp)
 DEB_DEPENDS += iperf3 # for 'make test TEST=vcl'
 DEB_DEPENDS += nasm
+DEB_DEPENDS += iperf ethtool  # for 'make test TEST=vm_vpp_interfaces'
+DEB_DEPENDS += libpcap-dev
 
 LIBFFI=libffi6 # works on all but 20.04 and debian-testing
 
 ifeq ($(OS_VERSION_ID),22.04)
        DEB_DEPENDS += python3-virtualenv
        DEB_DEPENDS += libssl-dev
-       DEB_DEPENDS += libelf-dev # for libbpf (af_xdp)
        DEB_DEPENDS += clang clang-format-11
        LIBFFI=libffi7
        DEB_DEPENDS += enchant-2  # for docs
 else ifeq ($(OS_VERSION_ID),20.04)
        DEB_DEPENDS += python3-virtualenv
        DEB_DEPENDS += libssl-dev
-       DEB_DEPENDS += libelf-dev # for libbpf (af_xdp)
        DEB_DEPENDS += clang clang-format-11
        LIBFFI=libffi7
        DEB_DEPENDS += enchant-2  # for docs
@@ -112,16 +113,15 @@ endif
 
 DEB_DEPENDS += $(LIBFFI)
 
-RPM_DEPENDS  = redhat-lsb glibc-static
+RPM_DEPENDS  = glibc-static
 RPM_DEPENDS += apr-devel
 RPM_DEPENDS += numactl-devel
 RPM_DEPENDS += check check-devel
 RPM_DEPENDS += selinux-policy selinux-policy-devel
 RPM_DEPENDS += ninja-build
-RPM_DEPENDS += libuuid-devel
 RPM_DEPENDS += ccache
 RPM_DEPENDS += xmlto
-RPM_DEPENDS += elfutils-libelf-devel
+RPM_DEPENDS += elfutils-libelf-devel libpcap-devel
 RPM_DEPENDS += libnl3-devel libmnl-devel
 RPM_DEPENDS += nasm
 
@@ -134,12 +134,23 @@ ifeq ($(OS_ID),fedora)
        RPM_DEPENDS += python3-virtualenv python3-jsonschema
        RPM_DEPENDS += cmake
        RPM_DEPENDS_GROUPS = 'C Development Tools and Libraries'
+else ifeq ($(OS_ID),rocky)
+       RPM_DEPENDS += yum-utils
+       RPM_DEPENDS += subunit subunit-devel
+       RPM_DEPENDS += openssl-devel
+       RPM_DEPENDS += python3-devel  # needed for python3 -m pip install psutil
+       RPM_DEPENDS += python3-ply  # for vppapigen
+       RPM_DEPENDS += python3-virtualenv python3-jsonschema
+       RPM_DEPENDS += infiniband-diags llvm clang cmake
+       RPM_DEPENDS_GROUPS = 'Development Tools'
 else ifeq ($(OS_ID)-$(OS_VERSION_ID),centos-8)
        RPM_DEPENDS += yum-utils
        RPM_DEPENDS += compat-openssl10 openssl-devel
        RPM_DEPENDS += python2-devel python36-devel python3-ply
        RPM_DEPENDS += python3-virtualenv python3-jsonschema
        RPM_DEPENDS += libarchive cmake
+       RPM_DEPENDS += infiniband-diags libibumad
+       RPM_DEPENDS += libpcap-devel llvm-toolset
        RPM_DEPENDS_GROUPS = 'Development Tools'
 else
        RPM_DEPENDS += yum-utils
@@ -164,25 +175,19 @@ RPM_DEPENDS_DEBUG += yum-plugin-auto-update-debug-info
 RPM_SUSE_BUILDTOOLS_DEPS = autoconf automake ccache check-devel chrpath
 RPM_SUSE_BUILDTOOLS_DEPS += clang cmake indent libtool make ninja python3-ply
 
-RPM_SUSE_DEVEL_DEPS = glibc-devel-static libnuma-devel libelf-devel nasm
-RPM_SUSE_DEVEL_DEPS += libopenssl-devel openssl-devel libuuid-devel
+RPM_SUSE_DEVEL_DEPS = glibc-devel-static libnuma-devel libelf-devel
+RPM_SUSE_DEVEL_DEPS += libopenssl-devel lsb-release
+RPM_SUSE_DEVEL_DEPS += libpcap-devel llvm-devel
+RPM_SUSE_DEVEL_DEPS += curl libstdc++-devel bison gcc-c++ zlib-devel
 
-RPM_SUSE_PYTHON_DEPS = python-devel python3-devel python-pip python3-pip
-RPM_SUSE_PYTHON_DEPS += python-rpm-macros python3-rpm-macros
+RPM_SUSE_PYTHON_DEPS = python3-devel python3-pip python3-rpm-macros
 
-RPM_SUSE_PLATFORM_DEPS = distribution-release shadow rpm-build
+RPM_SUSE_PLATFORM_DEPS = shadow rpm-build
 
 ifeq ($(OS_ID),opensuse-leap)
-ifeq ($(OS_VERSION_ID),15.3)
-       RPM_SUSE_DEVEL_DEPS += curl libstdc++-devel bison gcc-c++ zlib-devel xmlto
-       RPM_SUSE_DEVEL_DEPS += lsb-release
-       RPM_SUSE_DEVEL_DEPS += asciidoc git
-       RPM_SUSE_PYTHON_DEPS += python3 python2-ply
-endif
-ifeq ($(OS_VERSION_ID),15.0)
-       RPM_SUSE_DEVEL_DEPS += gcc git curl
-       RPM_SUSE_PYTHON_DEPS += python3-ply python2-virtualenv
-endif
+       RPM_SUSE_DEVEL_DEPS += xmlto openssl-devel asciidoc git nasm
+       RPM_SUSE_PYTHON_DEPS += python3 python3-ply python3-virtualenv
+       RPM_SUSE_PLATFORM_DEPS += distribution-release
 endif
 
 RPM_SUSE_DEPENDS += $(RPM_SUSE_BUILDTOOLS_DEPS) $(RPM_SUSE_DEVEL_DEPS) $(RPM_SUSE_PYTHON_DEPS) $(RPM_SUSE_PLATFORM_DEPS)
@@ -287,7 +292,7 @@ $(BR)/.deps.ok:
 ifeq ($(findstring y,$(UNATTENDED)),y)
        make install-dep
 endif
-ifeq ($(filter ubuntu debian,$(OS_ID)),$(OS_ID))
+ifeq ($(filter ubuntu debian linuxmint,$(OS_ID)),$(OS_ID))
        @MISSING=$$(apt-get install -y -qq -s $(DEB_DEPENDS) | grep "^Inst ") ; \
        if [ -n "$$MISSING" ] ; then \
          echo "\nPlease install missing packages: \n$$MISSING\n" ; \
@@ -315,7 +320,7 @@ bootstrap:
 
 .PHONY: install-dep
 install-dep:
-ifeq ($(filter ubuntu debian,$(OS_ID)),$(OS_ID))
+ifeq ($(filter ubuntu debian linuxmint,$(OS_ID)),$(OS_ID))
        @sudo -E apt-get update
        @sudo -E apt-get $(APT_ARGS) $(CONFIRM) $(FORCE) install $(DEB_DEPENDS)
 else ifneq ("$(wildcard /etc/redhat-release)","")
@@ -324,6 +329,12 @@ ifeq ($(OS_ID),rhel)
        @sudo -E yum groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
        @sudo -E yum install $(CONFIRM) $(RPM_DEPENDS)
        @sudo -E debuginfo-install $(CONFIRM) glibc openssl-libs zlib
+else ifeq ($(OS_ID),rocky)
+       @sudo -E dnf install $(CONFIRM) dnf-plugins-core epel-release
+       @sudo -E dnf config-manager --set-enabled \
+          $(shell dnf repolist all 2>/dev/null|grep -i crb|cut -d' ' -f1|grep -v source)
+       @sudo -E dnf groupinstall $(CONFIRM) $(RPM_DEPENDS_GROUPS)
+       @sudo -E dnf install $(CONFIRM) $(RPM_DEPENDS)
 else ifeq ($(OS_ID)-$(OS_VERSION_ID),centos-8)
        @sudo -E dnf install $(CONFIRM) dnf-plugins-core epel-release
        @sudo -E dnf config-manager --set-enabled \
@@ -340,7 +351,7 @@ else ifeq ($(OS_ID),fedora)
        @sudo -E dnf install $(CONFIRM) $(RPM_DEPENDS)
        @sudo -E debuginfo-install $(CONFIRM) glibc openssl-libs zlib
 endif
-else ifeq ($(filter opensuse-leap,$(OS_ID)),$(OS_ID))
+else ifeq ($(filter opensuse-leap-15.3 opensuse-leap-15.4 ,$(OS_ID)-$(OS_VERSION_ID)),$(OS_ID)-$(OS_VERSION_ID))
        @sudo -E zypper refresh
        @sudo -E zypper install  -y $(RPM_SUSE_DEPENDS)
 else
@@ -417,13 +428,14 @@ rebuild-release: wipe-release build-release
 export TEST_DIR ?= $(WS_ROOT)/test
 
 define test
-       $(if $(filter-out $(2),retest),make -C $(BR) PLATFORM=vpp TAG=$(1) vpp-install,)
+       $(if $(filter-out $(2),retest),make -C $(BR) PLATFORM=vpp TAG=$(1) CC=$(CC) vpp-install,)
        $(eval libs:=lib lib64)
        make -C test \
          VPP_BUILD_DIR=$(BR)/build-$(1)-native/vpp \
          VPP_BIN=$(BR)/install-$(1)-native/vpp/bin/vpp \
          VPP_INSTALL_PATH=$(BR)/install-$(1)-native/ \
          EXTENDED_TESTS=$(EXTENDED_TESTS) \
+         TEST_GCOV=$(TEST_GCOV) \
          PYTHON=$(PYTHON) \
          OS_ID=$(OS_ID) \
          RND_SEED=$(RND_SEED) \
@@ -440,10 +452,28 @@ test:
 test-debug:
        $(call test,vpp_debug,test)
 
-.PHONY: test-gcov
-test-gcov:
+.PHONY: test-cov
+test-cov:
+       $(eval CC=gcc)
+       $(eval TEST_GCOV=1)
+       $(call test,vpp_gcov,cov)
+
+.PHONY: test-cov-build
+test-cov-build:
+       $(eval CC=gcc)
+       $(eval TEST_GCOV=1)
        $(call test,vpp_gcov,test)
 
+.PHONY: test-cov-prep
+test-cov-prep:
+       $(eval CC=gcc)
+       $(call test,vpp_gcov,cov-prep)
+
+.PHONY: test-cov-post
+test-cov-post:
+       $(eval CC=gcc)
+       $(call test,vpp_gcov,cov-post)
+
 .PHONY: test-all
 test-all:
        $(eval EXTENDED_TESTS=1)
@@ -454,6 +484,13 @@ test-all-debug:
        $(eval EXTENDED_TESTS=1)
        $(call test,vpp_debug,test)
 
+.PHONY: test-all-cov
+test-all-cov:
+       $(eval CC=gcc)
+       $(eval TEST_GCOV=1)
+       $(eval EXTENDED_TESTS=1)
+       $(call test,vpp_gcov,test)
+
 .PHONY: papi-wipe
 papi-wipe: test-wipe-papi
        $(call banner,"This command is deprecated. Please use 'test-wipe-papi'")
@@ -478,8 +515,10 @@ test-shell:
 test-shell-debug:
        $(call test,vpp_debug,shell)
 
-.PHONY: test-shell-gcov
-test-shell-gcov:
+.PHONY: test-shell-cov
+test-shell-cov:
+       $(eval CC=gcc)
+       $(eval TEST_GCOV=1)
        $(call test,vpp_gcov,shell)
 
 .PHONY: test-dep
@@ -496,13 +535,9 @@ test-wipe-doc:
        @echo "make test-wipe-doc is DEPRECATED"
        sleep 300
 
-.PHONY: test-cov
-test-cov:
-       $(eval EXTENDED_TESTS=1)
-       $(call test,vpp_gcov,cov)
-
 .PHONY: test-wipe-cov
 test-wipe-cov:
+       $(call make,$(PLATFORM)_gcov,$(addsuffix -wipe,$(TARGETS)))
        @make -C test wipe-cov
 
 .PHONY: test-wipe-all
@@ -747,7 +782,7 @@ docs:
 
 .PHONY: pkg-verify
 pkg-verify: install-dep $(BR)/.deps.ok install-ext-deps
-       $(call banner,"Building for PLATFORM=vpp using gcc")
+       $(call banner,"Building for PLATFORM=vpp")
        @make -C build-root PLATFORM=vpp TAG=vpp wipe-all install-packages
        $(call banner,"Building sample-plugin")
        @make -C build-root PLATFORM=vpp TAG=vpp sample-plugin-install
@@ -756,7 +791,8 @@ pkg-verify: install-dep $(BR)/.deps.ok install-ext-deps
        $(call banner,"Building $(PKG) packages")
        @make pkg-$(PKG)
 
-MAKE_VERIFY_GATE_OS ?= ubuntu-20.04
+# Note: 'make verify' target is not used by ci-management scripts
+MAKE_VERIFY_GATE_OS ?= ubuntu-22.04
 .PHONY: verify
 verify: pkg-verify
 ifeq ($(OS_ID)-$(OS_VERSION_ID),$(MAKE_VERIFY_GATE_OS))
@@ -767,3 +803,7 @@ ifeq ($(OS_ID)-$(OS_VERSION_ID),$(MAKE_VERIFY_GATE_OS))
 else
        $(call banner,"Skipping tests. Tests under 'make verify' supported on $(MAKE_VERIFY_GATE_OS)")
 endif
+
+.PHONY: check-dpdk-mlx
+check-dpdk-mlx:
+       @[ $$(make -sC build/external dpdk-show-DPDK_MLX_DEFAULT) = y ]