summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>2017-06-06 15:29:16 +0100
committerSergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>2017-08-18 19:06:15 +0000
commit48e1668917cf5bb1d368ddd42f3c7a064f570eb4 (patch)
tree64834b94e8a913b56661f4d43df0535b3f332de8
parentc1ff53f25d04ec1cc31844abd38014e91e398b5f (diff)
dpdk: update build
Current optional DPDK PMDs are: - AESNI MB PMD (SW crypto) - AESNI GCM PMD (SW crypto) - MLX4 PMD - MLX5 PMD This change will always build DPDK SW crypto PMDs and required SW crypto libraries, while MLX PMDs are still optional and the user has to build required libraries. Now the configure script detects if any of the optional DPDK PMDs were built and link against their required libraries/dependencies. Change-Id: I1560bebd71035d6486483f22da90042ec2ce40a1 Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
-rw-r--r--dpdk/Makefile59
-rw-r--r--src/configure.ac48
-rw-r--r--src/plugins/dpdk.am7
3 files changed, 82 insertions, 32 deletions
diff --git a/dpdk/Makefile b/dpdk/Makefile
index d781ed5db40..8b4e7b60a5b 100644
--- a/dpdk/Makefile
+++ b/dpdk/Makefile
@@ -19,14 +19,13 @@ DPDK_INSTALL_DIR ?= $(CURDIR)/_install
DPDK_PKTMBUF_HEADROOM ?= 128
DPDK_DOWNLOAD_DIR ?= $(HOME)/Downloads
DPDK_DEBUG ?= n
-DPDK_CRYPTO_SW_PMD ?= n
DPDK_MLX4_PMD ?= n
DPDK_MLX5_PMD ?= n
B := $(DPDK_BUILD_DIR)
I := $(DPDK_INSTALL_DIR)
DPDK_VERSION ?= 17.05
-PKG_SUFFIX ?= vpp5
+PKG_SUFFIX ?= vpp6
DPDK_BASE_URL ?= http://fast.dpdk.org/rel
DPDK_TARBALL := dpdk-$(DPDK_VERSION).tar.xz
DPDK_TAR_URL := $(DPDK_BASE_URL)/$(DPDK_TARBALL)
@@ -34,14 +33,15 @@ DPDK_17.02_TARBALL_MD5_CKSUM := 6b9f7387c35641f4e8dbba3e528f2376
DPDK_17.05_TARBALL_MD5_CKSUM := 0a68c31cd6a6cabeed0a4331073e4c05
DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION)
-ifeq ($(DPDK_CRYPTO_SW_PMD),y)
-AESNIMB_LIB_TARBALL := v0.44-gcm.2.tar.gz
+IPSEC_MB_VER := 0.45
+AESNIMB_LIB_TARBALL := v$(IPSEC_MB_VER).tar.gz
AESNIMB_LIB_TARBALL_URL := http://github.com/01org/intel-ipsec-mb/archive/$(AESNIMB_LIB_TARBALL)
-AESNIMB_LIB_SOURCE := $(B)/intel-ipsec-mb-0.44-gcm.2
-ISA_L_CRYPTO_LIB_TARBALL := isa_l_crypto.tar.gz
-ISA_L_CRYPTO_LIB_TARBALL_URL := http://github.com/01org/isa-l_crypto/archive/master.tar.gz
-ISA_L_CRYPTO_LIB_SOURCE := $(B)/isa-l_crypto-master
-endif
+AESNIMB_LIB_SOURCE := $(B)/intel-ipsec-mb-$(IPSEC_MB_VER)
+ISA_L_CRYPTO_VER := 2.18.0
+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
@@ -89,11 +89,9 @@ else
DPDK_EXTRA_CFLAGS := -g -O0
endif
-ifeq ($(DPDK_CRYPTO_SW_PMD),y)
-DPDK_EXTRA_CFLAGS += -I$(I)/include
+DPDK_EXTRA_CFLAGS += -I$(ISA_L_CRYPTO_INSTALL_DIR)/include -Wl,-z,muldefs
DPDK_EXTRA_LDFLAGS += -L$(I)/lib
DPDK_MAKE_EXTRA_ARGS += AESNI_MULTI_BUFFER_LIB_PATH=$(AESNIMB_LIB_SOURCE)
-endif
# assemble DPDK make arguments
DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
@@ -105,8 +103,6 @@ DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
DESTDIR=$(I) \
$(DPDK_MAKE_EXTRA_ARGS)
-DPDK_SOURCE_FILES := $(shell [ -e $(DPDK_SOURCE) ] && find $(DPDK_SOURCE) -name "*.[chS]")
-
define set
@if grep -q CONFIG_$1 $@ ; \
then sed -i -e 's/.*\(CONFIG_$1=\).*/\1$2/' $@ ; \
@@ -137,8 +133,8 @@ $(B)/custom-config: $(B)/.patch.ok Makefile
$(call set,RTE_LIBRTE_PMD_BOND,y)
$(call set,RTE_LIBRTE_IP_FRAG,y)
$(call set,RTE_LIBRTE_PMD_QAT,y)
- $(call set,RTE_LIBRTE_PMD_AESNI_MB,$(DPDK_CRYPTO_SW_PMD))
- $(call set,RTE_LIBRTE_PMD_AESNI_GCM,$(DPDK_CRYPTO_SW_PMD))
+ $(call set,RTE_LIBRTE_PMD_AESNI_MB,y)
+ $(call set,RTE_LIBRTE_PMD_AESNI_GCM,y)
$(call set,RTE_LIBRTE_MLX4_PMD,$(DPDK_MLX4_PMD))
$(call set,RTE_LIBRTE_MLX5_PMD,$(DPDK_MLX5_PMD))
@# not needed
@@ -175,10 +171,8 @@ $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL):
fi
DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL)
-ifeq ($(DPDK_CRYPTO_SW_PMD),y)
DPDK_DOWNLOADS += $(CURDIR)/$(AESNIMB_LIB_TARBALL)
DPDK_DOWNLOADS += $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL)
-endif
$(B)/.download.ok: $(DPDK_DOWNLOADS)
@mkdir -p $(B)
@@ -194,12 +188,10 @@ download: $(B)/.download.ok
$(B)/.extract.ok: $(B)/.download.ok
@echo --- extracting $(DPDK_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(DPDK_TARBALL)
-ifeq ($(DPDK_CRYPTO_SW_PMD),y)
@echo --- extracting $(AESNIMB_LIB_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(AESNIMB_LIB_TARBALL)
@echo --- extracting $(ISA_L_CRYPTO_LIB_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL)
-endif
@touch $@
.PHONY: extract
@@ -225,18 +217,29 @@ $(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
.PHONY: config
config: $(B)/.config.ok
-$(B)/.build.ok: $(DPDK_SOURCE_FILES)
- @if [ ! -e $(B)/.config.ok ] ; then echo 'Please run "make config" first' && false ; fi
-ifeq ($(DPDK_CRYPTO_SW_PMD),y)
- # Build IPsec_MB library
+# Order matters
+BUILD_TARGETS += build-ipsec-mb build-isal-crypto build-dpdk
+
+.PHONY: build-ipsec-mb
+build-ipsec-mb:
mkdir -p $(I)/lib/
make -C $(AESNIMB_LIB_SOURCE) -j NO_GCM=y
cp $(AESNIMB_LIB_SOURCE)/libIPSec_MB.a $(I)/lib/
- # Build ISA-L Crypto library
- cd $(ISA_L_CRYPTO_LIB_SOURCE) && ./autogen.sh && ./configure --prefix=$(I)
+
+.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) CFLAGS='-fPIC -DPIC -O2'
make -C $(ISA_L_CRYPTO_LIB_SOURCE) -j install
-endif
+ 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
@make $(DPDK_MAKE_ARGS) install
+
+$(B)/.build.ok: $(BUILD_TARGETS)
@touch $@
.PHONY: build
@@ -317,7 +320,7 @@ build-rpm: $(DEV_RPM)
install-rpm:
ifneq ($(INSTALLED_RPM_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
- @make $(DEV_RPM)
+ @$(MAKE) $(DEV_RPM)
sudo rpm -Uih $(DEV_RPM)
else
@echo "=========================================================="
diff --git a/src/configure.ac b/src/configure.ac
index 173b3153807..92a2d86e1b1 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -80,6 +80,23 @@ AC_DEFUN([PLUGIN_DISABLED],
AC_DEFUN([PRINT_VAL], [ AC_MSG_RESULT(AC_HELP_STRING($1,$2)) ])
+AC_DEFUN([DPDK_IS_PMD_ENABLED],
+[
+ AC_MSG_CHECKING([for $1 in rte_config.h])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <rte_config.h>]],
+ [[return RTE_$1;]],
+ )],
+ [with_$2=yes]
+ [AC_MSG_RESULT([yes])],
+ [with_$2=no]
+ [AC_MSG_RESULT([no])]
+ )
+ AM_CONDITIONAL(m4_toupper(WITH_$2), test "$with_$2" = "yes")
+ m4_append_uniq([list_of_with], [$2], [, ])
+])
+
###############################################################################
# configure arguments
###############################################################################
@@ -97,8 +114,6 @@ DISABLE_ARG(papi, [Disable Python API bindings])
DISABLE_ARG(japi, [Disable Java API bindings])
# --with-X
-WITH_ARG(dpdk_crypto_sw,[Use DPDK cryptodev SW PMDs])
-WITH_ARG(dpdk_mlx5_pmd, [Use DPDK with mlx5 PMD])
# --without-X
WITHOUT_ARG(libssl, [Disable libssl])
@@ -130,7 +145,6 @@ AC_SUBST(PRE_DATA_SIZE, [$with_pre_data])
AC_SUBST(APICLI, [-DVPP_API_TEST_BUILTIN=${n_with_apicli}])
AC_DEFINE_UNQUOTED(DPDK_SHARED_LIB, [${n_enable_dpdk_shared}])
-AC_DEFINE_UNQUOTED(DPDK_CRYPTO_SW, [${n_with_dpdk_crypto_sw}])
AC_DEFINE_UNQUOTED(WITH_LIBSSL, [${n_with_libssl}])
@@ -170,6 +184,34 @@ AM_COND_IF([ENABLE_DPDK_SHARED],
[AC_MSG_ERROR([DPDK shared library not found])],)
])
+DPDK_IS_PMD_ENABLED(LIBRTE_PMD_AESNI_MB, dpdk_aesni_mb_pmd)
+AM_COND_IF([WITH_DPDK_AESNI_MB_PMD],
+[
+ AC_CHECK_LIB([IPSec_MB], [submit_job_sse], [],
+ [AC_MSG_ERROR([IPSec_MB library not found])])
+])
+
+DPDK_IS_PMD_ENABLED(LIBRTE_PMD_AESNI_GCM, dpdk_aesni_gcm_pmd)
+AM_COND_IF([WITH_DPDK_AESNI_GCM_PMD],
+[
+ AC_CHECK_LIB([isal_crypto], [aesni_gcm128_init], [],
+ [AC_MSG_ERROR([isal_crypto library not found])])
+])
+
+DPDK_IS_PMD_ENABLED(LIBRTE_MLX5_PMD, dpdk_mlx5_pmd)
+AM_COND_IF([WITH_DPDK_MLX5_PMD],
+[
+ AC_CHECK_LIB([ibverbs], [ibv_fork_init], [],
+ [AC_MSG_ERROR([ibverbs library not found])])
+])
+
+DPDK_IS_PMD_ENABLED(LIBRTE_MLX4_PMD, dpdk_mlx4_pmd)
+AM_COND_IF([WITH_DPDK_MLX4_PMD],
+[
+ AC_CHECK_LIB([ibverbs], [ibv_fork_init], [],
+ [AC_MSG_ERROR([ibverbs library not found])])
+])
+
AM_COND_IF([ENABLE_G2],
[
PKG_CHECK_MODULES(g2, gtk+-2.0)
diff --git a/src/plugins/dpdk.am b/src/plugins/dpdk.am
index 75bfb967af6..3a1ffeeb4a2 100644
--- a/src/plugins/dpdk.am
+++ b/src/plugins/dpdk.am
@@ -19,14 +19,19 @@ dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -ldpdk
else
dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--whole-archive,-l:libdpdk.a,--no-whole-archive
endif
-if WITH_DPDK_CRYPTO_SW
+if WITH_DPDK_AESNI_MB_PMD
dpdk_plugin_la_LDFLAGS += -Wl,--exclude-libs,libIPSec_MB.a,-l:libIPSec_MB.a
+endif
+if WITH_DPDK_AESNI_GCM_PMD
dpdk_plugin_la_LDFLAGS += -Wl,--exclude-libs,libisal_crypto.a,-l:libisal_crypto.a
endif
dpdk_plugin_la_LDFLAGS += -Wl,-lm,-ldl
if WITH_DPDK_MLX5_PMD
dpdk_plugin_la_LDFLAGS += -Wl,-libverbs
endif
+if WITH_DPDK_MLX4_PMD
+dpdk_plugin_la_LDFLAGS += -Wl,-libverbs
+endif
dpdk_plugin_la_SOURCES = \
dpdk/main.c \