DPDK_BUILD_DIR ?= $(CURDIR)/_build
DPDK_INSTALL_DIR ?= $(CURDIR)/_install
DPDK_PKTMBUF_HEADROOM ?= 128
+DPDK_CACHE_LINE_SIZE ?= 64
DPDK_DOWNLOAD_DIR ?= $(HOME)/Downloads
DPDK_DEBUG ?= n
DPDK_MLX4_PMD ?= n
DPDK_MLX5_PMD ?= n
+DPDK_TAP_PMD ?= n
+DPDK_FAILSAFE_PMD ?= n
B := $(DPDK_BUILD_DIR)
I := $(DPDK_INSTALL_DIR)
-DPDK_VERSION ?= 17.08
+DPDK_VERSION ?= 18.08
PKG_SUFFIX ?= vpp2
-DPDK_BASE_URL ?= http://static.dpdk.org/rel
+DPDK_BASE_URL ?= http://fast.dpdk.org/rel
DPDK_TARBALL := dpdk-$(DPDK_VERSION).tar.xz
DPDK_TAR_URL := $(DPDK_BASE_URL)/$(DPDK_TARBALL)
-DPDK_17.08_TARBALL_MD5_CKSUM := 537ff038915fefd0f210905fafcadb4b
-DPDK_17.11_TARBALL_MD5_CKSUM := 53ee9e054a8797c9e67ffa0eb5d0c701
+DPDK_18.05_TARBALL_MD5_CKSUM := 9fc86367cd9407ff6a8dfea56c4eddc4
+DPDK_18.08_TARBALL_MD5_CKSUM := da5e7fb25ab063c47e53929fb8c58be5
MACHINE=$(shell uname -m)
+# replace dot with space, and if 3rd word exists we deal with stable dpdk rel
+ifeq ($(word 3,$(subst ., ,$(DPDK_VERSION))),)
+DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION)
+else
+DPDK_SOURCE := $(B)/dpdk-stable-$(DPDK_VERSION)
+endif
+
NASM_BASE_URL := http://www.nasm.us/pub/nasm/releasebuilds
-NASM_VER := 2.13.01
+NASM_VER := 2.13.03
NASM_TARBALL := nasm-$(NASM_VER).tar.xz
NASM_TAR_URL := $(NASM_BASE_URL)/$(NASM_VER)/$(NASM_TARBALL)
NASM_SOURCE := $(B)/nasm-$(NASM_VER)
-ISA_L_CRYPTO_LIB := n
-
-ifeq ($(DPDK_VERSION),17.08)
-IPSEC_MB_VER ?= 0.46
-DPDK_SOURCE := $(B)/dpdk-stable-$(DPDK_VERSION)
+ifneq (,$(findstring 18.02,$(DPDK_VERSION)))
+IPSEC_MB_VER ?= 0.48
else
-IPSEC_MB_VER ?= 0.47
-DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION)
+IPSEC_MB_VER ?= 0.49
endif
-ISA_L_CRYPTO_VER := 2.18.0
ifeq ($(MACHINE),$(filter $(MACHINE),x86_64))
AESNI ?= y
-# DPDK pre 17.08 depends on ISA-L Crypto library for GCM PMD
- ifneq ($(firstword $(sort $(DPDK_VERSION), 17.08)), 17.08)
- ISA_L_CRYPTO_LIB = y
- IPSEC_MB_VER = 0.45
- $(info Building ISA-L Crypto $(ISA_L_CRYPTO_VER) library)
- endif
$(info Building IPSec-MB $(IPSEC_MB_VER) library)
else
AESNI ?= N
AESNIMB_LIB_TARBALL_URL := http://github.com/01org/intel-ipsec-mb/archive/$(AESNIMB_LIB_TARBALL)
AESNIMB_LIB_SOURCE := $(B)/intel-ipsec-mb-$(IPSEC_MB_VER)
-ISA_L_CRYPTO_LIB_TARBALL := v$(ISA_L_CRYPTO_VER).tar.gz
-ISA_L_CRYPTO_LIB_TARBALL_URL := http://github.com/01org/isa-l_crypto/archive/$(ISA_L_CRYPTO_LIB_TARBALL)
-ISA_L_CRYPTO_LIB_SOURCE := $(B)/isa-l_crypto-$(ISA_L_CRYPTO_VER)
-ISA_L_CRYPTO_INSTALL_DIR := $(ISA_L_CRYPTO_LIB_SOURCE)/install
-
ifneq (,$(findstring clang,$(CC)))
DPDK_CC=clang
else ifneq (,$(findstring icc,$(CC)))
# ARM64
##############################################################################
else ifeq ($(MACHINE),aarch64)
-export CROSS=""
+CROSS :=
+export CROSS
DPDK_TARGET ?= arm64-armv8a-linuxapp-$(DPDK_CC)
DPDK_MACHINE ?= armv8a
DPDK_TUNE ?= generic
$(CPU_PART_CAVIUM_THUNDERX_81XX) $(CPU_PART_CAVIUM_THUNDERX_83XX)))
DPDK_TARGET = arm64-thunderx-linuxapp-$(DPDK_CC)
DPDK_MACHINE = thunderx
+DPDK_CACHE_LINE_SIZE := 128
else
$(warning Unknown Cavium CPU)
endif
$(shell grep -c ^processor /proc/cpuinfo), 2)
# compiler/linker custom arguments
+ifeq ($(DPDK_CC),clang)
+DPDK_CPU_CFLAGS := -fPIE -fPIC
+else
DPDK_CPU_CFLAGS := -pie -fPIC
+endif
ifeq ($(DPDK_DEBUG),n)
DPDK_EXTRA_CFLAGS := -g -mtune=$(DPDK_TUNE)
DPDK_EXTRA_CFLAGS := -g -O0
endif
-ifeq ($(ISA_L_CRYPTO_LIB),y)
-DPDK_EXTRA_CFLAGS += -I$(ISA_L_CRYPTO_INSTALL_DIR)/include -Wl,-z,muldefs
-DPDK_EXTRA_LDFLAGS += -L$(I)/lib
+# -Wimplicit-fallthrough was introduced starting from GCC 7,
+# and it requires newer version of ccache.
+# Disable fallthrough warning for old ccache version.
+ifeq ($(DPDK_CC),gcc)
+GCC_VER_V = "7.0.0"
+CCACHE_VER_V = "3.4.1"
+GCC_VER = $(shell gcc --version | grep ^gcc | sed 's/^.* //g')
+CCACHE_VER = $(shell ccache --version | grep ^ccache | sed 's/^.* //g')
+ifeq ($(shell expr "$(GCC_VER)" ">=" "$(GCC_VER_V)"),1)
+ifeq ($(shell expr "$(CCACHE_VER)" "<" "$(CCACHE_VER_V)"),1)
+DPDK_EXTRA_CFLAGS += -Wimplicit-fallthrough=0
+endif
+endif
+endif
+
+ifeq ($(AESNI),y)
+IPSEC_MB_BUILD_PATH := $(B)/intel-ipsec-mb-$(IPSEC_MB_VER)
+DPDK_EXTRA_CFLAGS += -L$(IPSEC_MB_BUILD_PATH) -I$(IPSEC_MB_BUILD_PATH)
endif
+
DPDK_MAKE_EXTRA_ARGS += AESNI_MULTI_BUFFER_LIB_PATH=$(AESNIMB_LIB_SOURCE)
# assemble DPDK make arguments
@# modify options
$(call set,RTE_MAX_LCORE,256)
$(call set,RTE_PKTMBUF_HEADROOM,$(DPDK_PKTMBUF_HEADROOM))
+ $(call set,RTE_CACHE_LINE_SIZE,$(DPDK_CACHE_LINE_SIZE))
$(call set,RTE_LIBEAL_USE_HPET,y)
$(call set,RTE_BUILD_COMBINE_LIBS,y)
$(call set,RTE_PCI_CONFIG,y)
$(call set,RTE_LIBRTE_PMD_AESNI_GCM,$(AESNI))
$(call set,RTE_LIBRTE_MLX4_PMD,$(DPDK_MLX4_PMD))
$(call set,RTE_LIBRTE_MLX5_PMD,$(DPDK_MLX5_PMD))
+ $(call set,RTE_LIBRTE_PMD_SOFTNIC,n)
+ $(call set,RTE_LIBRTE_MLX4_DLOPEN_DEPS,$(DPDK_MLX4_PMD))
+ $(call set,RTE_LIBRTE_MLX5_DLOPEN_DEPS,$(DPDK_MLX5_PMD))
+ $(call set,RTE_LIBRTE_PMD_TAP,$(DPDK_TAP_PMD))
+ $(call set,RTE_LIBRTE_PMD_FAILSAFE,$(DPDK_FAILSAFE_PMD))
@# not needed
- $(call set,RTE_LIBRTE_PMD_TAP,n)
- $(call set,RTE_LIBRTE_TIMER,n)
$(call set,RTE_LIBRTE_CFGFILE,n)
$(call set,RTE_LIBRTE_LPM,n)
$(call set,RTE_LIBRTE_ACL,n)
$(call set,RTE_LIBRTE_FLOW_CLASSIFY,n)
$(call set,RTE_KNI_KMOD,n)
$(call set,RTE_EAL_IGB_UIO,n)
+ @# currently broken in 18.02
+ $(call set,RTE_LIBRTE_DPAA_BUS,n)
+ $(call set,RTE_LIBRTE_DPAA_MEMPOOL,n)
+ $(call set,RTE_LIBRTE_DPAA_PMD,n)
+ $(call set,RTE_LIBRTE_PMD_DPAA_SEC,n)
+ $(call set,RTE_LIBRTE_PMD_DPAA_EVENTDEV,n)
@rm -f .config.ok
$(CURDIR)/$(DPDK_TARBALL):
else curl -o $@ -LO $(AESNIMB_LIB_TARBALL_URL) ; \
fi
-$(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL):
- @if [ -e $(DPDK_DOWNLOAD_DIR)/$(ISA_L_CRYPTO_LIB_TARBALL) ] ; \
- then cp $(DPDK_DOWNLOAD_DIR)/$(ISA_L_CRYPTO_LIB_TARBALL) $(CURDIR) ; \
- else curl -o $@ -LO $(ISA_L_CRYPTO_LIB_TARBALL_URL) ; \
- fi
-
DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL)
ifeq ($(AESNI),y)
DPDK_DOWNLOADS += $(CURDIR)/$(NASM_TARBALL)
DPDK_DOWNLOADS += $(CURDIR)/$(AESNIMB_LIB_TARBALL)
endif
-ifeq ($(ISA_L_CRYPTO_LIB),y)
-DPDK_DOWNLOADS += $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL)
-endif
$(B)/.download.ok: $(DPDK_DOWNLOADS)
@mkdir -p $(B)
@tar --directory $(B) --extract --file $(CURDIR)/$(NASM_TARBALL)
@echo --- extracting $(AESNIMB_LIB_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(AESNIMB_LIB_TARBALL)
-endif
-ifeq ($(ISA_L_CRYPTO_LIB),y)
- @echo --- extracting $(ISA_L_CRYPTO_LIB_TARBALL) ---
- @tar --directory $(B) --extract --file $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL)
endif
@touch $@
build-ipsec-mb:
mkdir -p $(I)/lib/
# Do not build GCM stuff if we are building ISA_L
- make -C $(AESNIMB_LIB_SOURCE) -j NO_GCM=$(ISA_L_CRYPTO_LIB) \
- DEBUG=$(DPDK_DEBUG) EXTRA_CFLAGS=-fPIC NASM=$(NASM_SOURCE)/nasm
+ make -C $(AESNIMB_LIB_SOURCE) -j SHARED=n \
+ EXTRA_CFLAGS=-fPIC NASM=$(NASM_SOURCE)/nasm
cp $(AESNIMB_LIB_SOURCE)/libIPSec_MB.a $(I)/lib/
-.PHONY: build-isal-crypto
-build-isal-crypto:
- mkdir -p $(I)/lib/
- cd $(ISA_L_CRYPTO_LIB_SOURCE) && ./autogen.sh && \
- ./configure --prefix=$(ISA_L_CRYPTO_INSTALL_DIR) \
- --libdir=$(ISA_L_CRYPTO_INSTALL_DIR)/lib CFLAGS='-fPIC -DPIC -O2'
- make -C $(ISA_L_CRYPTO_LIB_SOURCE) -j install
- cp $(ISA_L_CRYPTO_INSTALL_DIR)/lib/libisal_crypto.a $(I)/lib/
-
.PHONY: build-dpdk
build-dpdk:
@if [ ! -e $(B)/.config.ok ] ; then echo 'Please run "make config" first' && false ; fi
BUILD_TARGETS += build-nasm
BUILD_TARGETS += build-ipsec-mb
endif
-ifeq ($(ISA_L_CRYPTO_LIB),y)
-BUILD_TARGETS += build-isal-crypto
-endif
BUILD_TARGETS += build-dpdk
$(B)/.build.ok: $(BUILD_TARGETS)
install-deb:
ifneq ($(INSTALLED_DEB_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
+ @echo "=========================================================="
+ @echo " Out of date DPDK package installed."
+ @echo " Installed: $(INSTALLED_DEB_VER)"
+ @echo " Needed: $(DPDK_VERSION)-$(PKG_SUFFIX)"
+ @echo "=========================================================="
@make $(DEV_DEB)
@sudo dpkg -i $(DEV_DEB)
else