dpdk: update build 44/7044/3
authorSergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Tue, 6 Jun 2017 14:29:16 +0000 (15:29 +0100)
committerDave Wallace <dwallacelf@gmail.com>
Fri, 14 Jul 2017 13:04:44 +0000 (13:04 +0000)
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>
dpdk/Makefile
src/configure.ac
src/plugins/dpdk.am

index 06ba127..659439c 100644 (file)
@@ -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
@@ -95,11 +95,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) \
@@ -111,8 +109,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/' $@ ; \
@@ -143,8 +139,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
@@ -181,10 +177,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)
@@ -200,12 +194,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
@@ -231,18 +223,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
@@ -323,7 +326,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 "=========================================================="
index ef8c3b0..cb00d0b 100644 (file)
@@ -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)
index 75bfb96..3a1ffee 100644 (file)
@@ -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                                                  \