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>
This commit is contained in:
Sergio Gonzalez Monroy
2017-06-06 15:29:16 +01:00
committed by Dave Wallace
parent 19e9d954bd
commit 3b12cdc59c
3 changed files with 82 additions and 32 deletions

View File

@ -19,14 +19,13 @@ DPDK_INSTALL_DIR ?= $(CURDIR)/_install
DPDK_PKTMBUF_HEADROOM ?= 128 DPDK_PKTMBUF_HEADROOM ?= 128
DPDK_DOWNLOAD_DIR ?= $(HOME)/Downloads DPDK_DOWNLOAD_DIR ?= $(HOME)/Downloads
DPDK_DEBUG ?= n DPDK_DEBUG ?= n
DPDK_CRYPTO_SW_PMD ?= n
DPDK_MLX4_PMD ?= n DPDK_MLX4_PMD ?= n
DPDK_MLX5_PMD ?= n DPDK_MLX5_PMD ?= n
B := $(DPDK_BUILD_DIR) B := $(DPDK_BUILD_DIR)
I := $(DPDK_INSTALL_DIR) I := $(DPDK_INSTALL_DIR)
DPDK_VERSION ?= 17.05 DPDK_VERSION ?= 17.05
PKG_SUFFIX ?= vpp5 PKG_SUFFIX ?= vpp6
DPDK_BASE_URL ?= http://fast.dpdk.org/rel DPDK_BASE_URL ?= http://fast.dpdk.org/rel
DPDK_TARBALL := dpdk-$(DPDK_VERSION).tar.xz DPDK_TARBALL := dpdk-$(DPDK_VERSION).tar.xz
DPDK_TAR_URL := $(DPDK_BASE_URL)/$(DPDK_TARBALL) 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_17.05_TARBALL_MD5_CKSUM := 0a68c31cd6a6cabeed0a4331073e4c05
DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION) DPDK_SOURCE := $(B)/dpdk-$(DPDK_VERSION)
ifeq ($(DPDK_CRYPTO_SW_PMD),y) IPSEC_MB_VER := 0.45
AESNIMB_LIB_TARBALL := v0.44-gcm.2.tar.gz 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_TARBALL_URL := http://github.com/01org/intel-ipsec-mb/archive/$(AESNIMB_LIB_TARBALL)
AESNIMB_LIB_SOURCE := $(B)/intel-ipsec-mb-0.44-gcm.2 AESNIMB_LIB_SOURCE := $(B)/intel-ipsec-mb-$(IPSEC_MB_VER)
ISA_L_CRYPTO_LIB_TARBALL := isa_l_crypto.tar.gz ISA_L_CRYPTO_VER := 2.18.0
ISA_L_CRYPTO_LIB_TARBALL_URL := http://github.com/01org/isa-l_crypto/archive/master.tar.gz ISA_L_CRYPTO_LIB_TARBALL := v$(ISA_L_CRYPTO_VER).tar.gz
ISA_L_CRYPTO_LIB_SOURCE := $(B)/isa-l_crypto-master ISA_L_CRYPTO_LIB_TARBALL_URL := http://github.com/01org/isa-l_crypto/archive/$(ISA_L_CRYPTO_LIB_TARBALL)
endif 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))) ifneq (,$(findstring clang,$(CC)))
DPDK_CC=clang DPDK_CC=clang
@ -95,11 +95,9 @@ else
DPDK_EXTRA_CFLAGS := -g -O0 DPDK_EXTRA_CFLAGS := -g -O0
endif endif
ifeq ($(DPDK_CRYPTO_SW_PMD),y) DPDK_EXTRA_CFLAGS += -I$(ISA_L_CRYPTO_INSTALL_DIR)/include -Wl,-z,muldefs
DPDK_EXTRA_CFLAGS += -I$(I)/include
DPDK_EXTRA_LDFLAGS += -L$(I)/lib DPDK_EXTRA_LDFLAGS += -L$(I)/lib
DPDK_MAKE_EXTRA_ARGS += AESNI_MULTI_BUFFER_LIB_PATH=$(AESNIMB_LIB_SOURCE) DPDK_MAKE_EXTRA_ARGS += AESNI_MULTI_BUFFER_LIB_PATH=$(AESNIMB_LIB_SOURCE)
endif
# assemble DPDK make arguments # assemble DPDK make arguments
DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \ DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
@ -111,8 +109,6 @@ DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
DESTDIR=$(I) \ DESTDIR=$(I) \
$(DPDK_MAKE_EXTRA_ARGS) $(DPDK_MAKE_EXTRA_ARGS)
DPDK_SOURCE_FILES := $(shell [ -e $(DPDK_SOURCE) ] && find $(DPDK_SOURCE) -name "*.[chS]")
define set define set
@if grep -q CONFIG_$1 $@ ; \ @if grep -q CONFIG_$1 $@ ; \
then sed -i -e 's/.*\(CONFIG_$1=\).*/\1$2/' $@ ; \ 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_PMD_BOND,y)
$(call set,RTE_LIBRTE_IP_FRAG,y) $(call set,RTE_LIBRTE_IP_FRAG,y)
$(call set,RTE_LIBRTE_PMD_QAT,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_MB,y)
$(call set,RTE_LIBRTE_PMD_AESNI_GCM,$(DPDK_CRYPTO_SW_PMD)) $(call set,RTE_LIBRTE_PMD_AESNI_GCM,y)
$(call set,RTE_LIBRTE_MLX4_PMD,$(DPDK_MLX4_PMD)) $(call set,RTE_LIBRTE_MLX4_PMD,$(DPDK_MLX4_PMD))
$(call set,RTE_LIBRTE_MLX5_PMD,$(DPDK_MLX5_PMD)) $(call set,RTE_LIBRTE_MLX5_PMD,$(DPDK_MLX5_PMD))
@# not needed @# not needed
@ -181,10 +177,8 @@ $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL):
fi fi
DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL) DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL)
ifeq ($(DPDK_CRYPTO_SW_PMD),y)
DPDK_DOWNLOADS += $(CURDIR)/$(AESNIMB_LIB_TARBALL) DPDK_DOWNLOADS += $(CURDIR)/$(AESNIMB_LIB_TARBALL)
DPDK_DOWNLOADS += $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL) DPDK_DOWNLOADS += $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL)
endif
$(B)/.download.ok: $(DPDK_DOWNLOADS) $(B)/.download.ok: $(DPDK_DOWNLOADS)
@mkdir -p $(B) @mkdir -p $(B)
@ -200,12 +194,10 @@ download: $(B)/.download.ok
$(B)/.extract.ok: $(B)/.download.ok $(B)/.extract.ok: $(B)/.download.ok
@echo --- extracting $(DPDK_TARBALL) --- @echo --- extracting $(DPDK_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(DPDK_TARBALL) @tar --directory $(B) --extract --file $(CURDIR)/$(DPDK_TARBALL)
ifeq ($(DPDK_CRYPTO_SW_PMD),y)
@echo --- extracting $(AESNIMB_LIB_TARBALL) --- @echo --- extracting $(AESNIMB_LIB_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(AESNIMB_LIB_TARBALL) @tar --directory $(B) --extract --file $(CURDIR)/$(AESNIMB_LIB_TARBALL)
@echo --- extracting $(ISA_L_CRYPTO_LIB_TARBALL) --- @echo --- extracting $(ISA_L_CRYPTO_LIB_TARBALL) ---
@tar --directory $(B) --extract --file $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL) @tar --directory $(B) --extract --file $(CURDIR)/$(ISA_L_CRYPTO_LIB_TARBALL)
endif
@touch $@ @touch $@
.PHONY: extract .PHONY: extract
@ -231,18 +223,29 @@ $(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
.PHONY: config .PHONY: config
config: $(B)/.config.ok config: $(B)/.config.ok
$(B)/.build.ok: $(DPDK_SOURCE_FILES) # Order matters
@if [ ! -e $(B)/.config.ok ] ; then echo 'Please run "make config" first' && false ; fi BUILD_TARGETS += build-ipsec-mb build-isal-crypto build-dpdk
ifeq ($(DPDK_CRYPTO_SW_PMD),y)
# Build IPsec_MB library .PHONY: build-ipsec-mb
build-ipsec-mb:
mkdir -p $(I)/lib/ mkdir -p $(I)/lib/
make -C $(AESNIMB_LIB_SOURCE) -j NO_GCM=y make -C $(AESNIMB_LIB_SOURCE) -j NO_GCM=y
cp $(AESNIMB_LIB_SOURCE)/libIPSec_MB.a $(I)/lib/ 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 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 @make $(DPDK_MAKE_ARGS) install
$(B)/.build.ok: $(BUILD_TARGETS)
@touch $@ @touch $@
.PHONY: build .PHONY: build
@ -323,7 +326,7 @@ build-rpm: $(DEV_RPM)
install-rpm: install-rpm:
ifneq ($(INSTALLED_RPM_VER),$(DPDK_VERSION)-$(PKG_SUFFIX)) ifneq ($(INSTALLED_RPM_VER),$(DPDK_VERSION)-$(PKG_SUFFIX))
@make $(DEV_RPM) @$(MAKE) $(DEV_RPM)
sudo rpm -Uih $(DEV_RPM) sudo rpm -Uih $(DEV_RPM)
else else
@echo "==========================================================" @echo "=========================================================="

View File

@ -80,6 +80,23 @@ AC_DEFUN([PLUGIN_DISABLED],
AC_DEFUN([PRINT_VAL], [ AC_MSG_RESULT(AC_HELP_STRING($1,$2)) ]) 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 # configure arguments
############################################################################### ###############################################################################
@ -97,8 +114,6 @@ DISABLE_ARG(papi, [Disable Python API bindings])
DISABLE_ARG(japi, [Disable Java API bindings]) DISABLE_ARG(japi, [Disable Java API bindings])
# --with-X # --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-X
WITHOUT_ARG(libssl, [Disable libssl]) 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_SUBST(APICLI, [-DVPP_API_TEST_BUILTIN=${n_with_apicli}])
AC_DEFINE_UNQUOTED(DPDK_SHARED_LIB, [${n_enable_dpdk_shared}]) 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}]) 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])],) [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], AM_COND_IF([ENABLE_G2],
[ [
PKG_CHECK_MODULES(g2, gtk+-2.0) PKG_CHECK_MODULES(g2, gtk+-2.0)

View File

@ -19,14 +19,19 @@ dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -ldpdk
else else
dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--whole-archive,-l:libdpdk.a,--no-whole-archive dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--whole-archive,-l:libdpdk.a,--no-whole-archive
endif 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 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 dpdk_plugin_la_LDFLAGS += -Wl,--exclude-libs,libisal_crypto.a,-l:libisal_crypto.a
endif endif
dpdk_plugin_la_LDFLAGS += -Wl,-lm,-ldl dpdk_plugin_la_LDFLAGS += -Wl,-lm,-ldl
if WITH_DPDK_MLX5_PMD if WITH_DPDK_MLX5_PMD
dpdk_plugin_la_LDFLAGS += -Wl,-libverbs dpdk_plugin_la_LDFLAGS += -Wl,-libverbs
endif endif
if WITH_DPDK_MLX4_PMD
dpdk_plugin_la_LDFLAGS += -Wl,-libverbs
endif
dpdk_plugin_la_SOURCES = \ dpdk_plugin_la_SOURCES = \
dpdk/main.c \ dpdk/main.c \