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
B := $(DPDK_BUILD_DIR)
I := $(DPDK_INSTALL_DIR)
-DPDK_VERSION ?= 17.08
+DPDK_VERSION ?= 18.02
PKG_SUFFIX ?= vpp1
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.05_TARBALL_MD5_CKSUM := 0a68c31cd6a6cabeed0a4331073e4c05
-DPDK_17.08_TARBALL_MD5_CKSUM := 0641f59ea8ea98afefa7cfa2699f6241
+DPDK_17.11_TARBALL_MD5_CKSUM := 53ee9e054a8797c9e67ffa0eb5d0c701
+DPDK_18.02_TARBALL_MD5_CKSUM := ca13077a014a2102c6e10153dfa3b920
DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION)
MACHINE=$(shell uname -m)
-ISA_L_CRYPTO_LIB := n
+NASM_BASE_URL := http://www.nasm.us/pub/nasm/releasebuilds
+NASM_VER := 2.13.01
+NASM_TARBALL := nasm-$(NASM_VER).tar.xz
+NASM_TAR_URL := $(NASM_BASE_URL)/$(NASM_VER)/$(NASM_TARBALL)
+NASM_SOURCE := $(B)/nasm-$(NASM_VER)
-IPSEC_MB_VER ?= 0.46
-ISA_L_CRYPTO_VER := 2.18.0
+ifeq ($(DPDK_VERSION),17.11)
+IPSEC_MB_VER ?= 0.47
+else
+IPSEC_MB_VER ?= 0.48
+endif
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)))
# NB: GNU Make 4.2 will let us use '$(file </proc/cpuinfo)' to both test
# for file presence and content; for now this will have to do.
JOBS := $(if $(shell [ -f /proc/cpuinfo ] && head /proc/cpuinfo),\
- $(shell expr 2 '*' $$(grep -c ^processor /proc/cpuinfo)), 2)
+ $(shell grep -c ^processor /proc/cpuinfo), 2)
# compiler/linker custom arguments
DPDK_CPU_CFLAGS := -pie -fPIC
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
-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_MLX4_DLOPEN_DEPS,$(DPDK_MLX4_PMD))
+ $(call set,RTE_LIBRTE_MLX5_DLOPEN_DEPS,$(DPDK_MLX5_PMD))
@# not needed
$(call set,RTE_LIBRTE_PMD_TAP,n)
$(call set,RTE_LIBRTE_TIMER,n)
$(call set,RTE_LIBRTE_PORT,n)
$(call set,RTE_LIBRTE_TABLE,n)
$(call set,RTE_LIBRTE_PIPELINE,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):
fi
@rm -f $(B)/.download.ok
+$(CURDIR)/$(NASM_TARBALL):
+ @if [ -e $(DPDK_DOWNLOAD_DIR)/$(NASM_TARBALL) ] ; \
+ then cp $(DPDK_DOWNLOAD_DIR)/$(NASM_TARBALL) $(CURDIR) ; \
+ else curl -o $(CURDIR)/$(NASM_TARBALL) -LO $(NASM_TAR_URL) ; \
+ fi
+
$(CURDIR)/$(AESNIMB_LIB_TARBALL):
@if [ -e $(DPDK_DOWNLOAD_DIR)/$(AESNIMB_LIB_TARBALL) ] ; \
then cp $(DPDK_DOWNLOAD_DIR)/$(AESNIMB_LIB_TARBALL) $(CURDIR) ; \
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)
@echo --- extracting $(DPDK_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(DPDK_TARBALL)
ifeq ($(AESNI),y)
+ @echo --- extracting $(NASM_TARBALL) ---
+ @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 $@
.PHONY: config
config: $(B)/.config.ok
+.PHONY: build-nasm
+build-nasm:
+ cd $(NASM_SOURCE) && sh configure && make -j
+
.PHONY: build-ipsec-mb
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
+ make -C $(AESNIMB_LIB_SOURCE) -j \
+ 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
# Order matters
ifeq ($(AESNI),y)
+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