add: nasm and ipsec-mb into vpp-ext-deps packaging 33/14933/4
authorDamjan Marion <damarion@cisco.com>
Fri, 21 Sep 2018 10:27:45 +0000 (12:27 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Fri, 21 Sep 2018 17:51:25 +0000 (17:51 +0000)
Change-Id: Ie5d85af84ae0d8b15edf5962213ed1b1953bee2f
Signed-off-by: Damjan Marion <damarion@cisco.com>
17 files changed:
build-data/packages/external.mk
build/external/Makefile
build/external/deb/debian/rules
build/external/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch [deleted file]
build/external/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch [deleted file]
build/external/packages.mk [new file with mode: 0644]
build/external/packages/dpdk.mk [new file with mode: 0644]
build/external/packages/ipsec-mb.mk [new file with mode: 0644]
build/external/packages/nasm.mk [new file with mode: 0644]
build/external/patches/README [moved from build/external/README with 55% similarity]
build/external/patches/dpdk_18.05/0001-i40evf-don-t-reset-device_info-data.patch [moved from build/external/dpdk-18.05_patches/0001-i40evf-don-t-reset-device_info-data.patch with 100% similarity]
build/external/patches/dpdk_18.05/0002-ixgbe-link-wait-longer.patch [moved from build/external/dpdk-18.05_patches/0002-ixgbe-link-wait-longer.patch with 100% similarity]
build/external/patches/dpdk_18.08/0001-net-mlx5-support-externally-allocated-mempool.patch [moved from build/external/dpdk-18.08_patches/0001-net-mlx5-support-externally-allocated-mempool.patch with 100% similarity]
build/external/patches/dpdk_18.08/0002-mlx4-support-externally-allocated-mempool.patch [moved from build/external/dpdk-18.08_patches/0002-mlx4-support-externally-allocated-mempool.patch with 100% similarity]
build/external/patches/dpdk_18.08/0003-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch [moved from build/external/dpdk-18.08_patches/0003-ixgbe-wait-longer-for-link-after-fiber-MAC-setup.patch with 100% similarity]
build/external/patches/nasm_2.13.03/0001-Fix-gcc-8-compilation.patch [new file with mode: 0644]
build/external/rpm/vpp-ext-deps.spec

index 07daac0..138feb7 100644 (file)
@@ -20,8 +20,8 @@ else
 endif
 
 DPDK_MAKE_ARGS = -C $(call find_source_fn,$(PACKAGE_SOURCE)) \
 endif
 
 DPDK_MAKE_ARGS = -C $(call find_source_fn,$(PACKAGE_SOURCE)) \
-       DPDK_BUILD_DIR=$(PACKAGE_BUILD_DIR) \
-       DPDK_INSTALL_DIR=$(PACKAGE_INSTALL_DIR) \
+       BUILD_DIR=$(PACKAGE_BUILD_DIR) \
+       INSTALL_DIR=$(PACKAGE_INSTALL_DIR) \
        DPDK_DEBUG=$(DPDK_DEBUG)
 
 DPDK_MLX5_PMD=$(strip $($(PLATFORM)_uses_dpdk_mlx5_pmd))
        DPDK_DEBUG=$(DPDK_DEBUG)
 
 DPDK_MLX5_PMD=$(strip $($(PLATFORM)_uses_dpdk_mlx5_pmd))
index 201cf12..38e8d63 100644 (file)
 # Scripts require non-POSIX parts of bash
 SHELL := /bin/bash
 
 # Scripts require non-POSIX parts of bash
 SHELL := /bin/bash
 
-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 ?= 18.08
+DL_CACHE_DIR = $(HOME)/Downloads
+MAKE ?= make
+MAKE_ARGS ?= -j
+BUILD_DIR        ?= $(CURDIR)/_build
+INSTALL_DIR      ?= $(CURDIR)/_install
 PKG_VERSION ?= $(shell git describe --abbrev=0 | cut -d- -f1 | cut -dv -f2)
 PKG_SUFFIX ?= $(shell git log --oneline $$(git describe --abbrev=0).. . | wc -l)
 PKG_VERSION ?= $(shell git describe --abbrev=0 | cut -d- -f1 | cut -dv -f2)
 PKG_SUFFIX ?= $(shell git log --oneline $$(git describe --abbrev=0).. . | wc -l)
-DPDK_BASE_URL ?= http://fast.dpdk.org/rel
-DPDK_TARBALL := dpdk-$(DPDK_VERSION).tar.xz
-DPDK_TAR_URL := $(DPDK_BASE_URL)/$(DPDK_TARBALL)
-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.03
-NASM_TARBALL := nasm-$(NASM_VER).tar.xz
-NASM_TAR_URL := $(NASM_BASE_URL)/$(NASM_VER)/$(NASM_TARBALL)
-NASM_SOURCE := $(B)/nasm-$(NASM_VER)
-
-ifneq (,$(findstring 18.02,$(DPDK_VERSION)))
-IPSEC_MB_VER ?= 0.48
-else
-IPSEC_MB_VER ?= 0.49
-endif
-
-ifeq ($(MACHINE),$(filter $(MACHINE),x86_64))
-  AESNI ?= y
-$(info Building IPSec-MB $(IPSEC_MB_VER) library)
-else
-  AESNI ?= N
-endif
-
-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-$(IPSEC_MB_VER)
-
-ifneq (,$(findstring clang,$(CC)))
-DPDK_CC=clang
-else ifneq (,$(findstring icc,$(CC)))
-DPDK_CC=icc
-else
-DPDK_CC=gcc
-endif
-
-##############################################################################
-# Intel x86
-##############################################################################
-ifeq ($(MACHINE),$(filter $(MACHINE),x86_64 i686))
-DPDK_TARGET           ?= $(MACHINE)-native-linuxapp-$(DPDK_CC)
-DPDK_MACHINE          ?= nhm
-DPDK_TUNE             ?= core-avx2
-
-##############################################################################
-# ARM64
-##############################################################################
-else ifeq ($(MACHINE),aarch64)
-CROSS :=
-export CROSS
-DPDK_TARGET           ?= arm64-armv8a-linuxapp-$(DPDK_CC)
-DPDK_MACHINE          ?= armv8a
-DPDK_TUNE             ?= generic
-
-CPU_IMP_ARM                     = 0x41
-CPU_IMP_CAVIUM                  = 0x43
-
-CPU_PART_ARM_CORTEX_A53         = 0xd03
-CPU_PART_ARM_CORTEX_A57         = 0xd07
-CPU_PART_ARM_CORTEX_A72         = 0xd08
-CPU_PART_ARM_CORTEX_A73         = 0xd09
-
-CPU_PART_CAVIUM_THUNDERX        = 0x0a1
-CPU_PART_CAVIUM_THUNDERX_81XX   = 0x0a2
-CPU_PART_CAVIUM_THUNDERX_83XX   = 0x0a3
-
-MIDR_IMPLEMENTER=$(shell awk '/implementer/ {print $$4;exit}' /proc/cpuinfo)
-MIDR_PARTNUM=$(shell awk '/part/ {print $$4;exit}' /proc/cpuinfo)
-
-ifeq ($(MIDR_IMPLEMENTER),$(CPU_IMP_ARM))
-##############################################################################
-# Arm Cortex
-##############################################################################
-CPU_PART_ARM_TUNE := $(CPU_PART_ARM_CORTEX_A53)/cortex-a53 \
-                    $(CPU_PART_ARM_CORTEX_A57)/cortex-a57 \
-                    $(CPU_PART_ARM_CORTEX_A72)/cortex-a72 \
-                    $(CPU_PART_ARM_CORTEX_A73)/cortex-a73
-CPU_TUNE = $(notdir $(filter $(MIDR_PARTNUM)/%,$(CPU_PART_ARM_TUNE)))
-ifneq ($(CPU_TUNE),)
-DPDK_TUNE             = $(CPU_TUNE)
-else
-$(warning Unknown Arm CPU)
-endif
-
-else ifeq ($(MIDR_IMPLEMENTER),$(CPU_IMP_CAVIUM))
-##############################################################################
-# Cavium ThunderX
-##############################################################################
-ifneq (,$(findstring $(MIDR_PARTNUM),$(CPU_PART_CAVIUM_THUNDERX) \
-       $(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
-endif
-
-##############################################################################
-# Unknown platform
-##############################################################################
-else
-$(error Unknown platform)
-endif
-
-# /proc/cpuinfo does not exist on platforms without a /proc and on some
-# platforms, notably inside containers, it has no content. In those cases
-# we assume there's 1 processor; we use 2*ncpu for the -j option.
-# 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 grep -c ^processor /proc/cpuinfo), 2)
 
 JOBS := $(if $(shell [ -f /proc/cpuinfo ] && head /proc/cpuinfo),\
        $(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)
-else
-DPDK_EXTRA_CFLAGS := -g -O0
-endif
-
-# -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
-DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
-       T=$(DPDK_TARGET) \
-       RTE_CONFIG_TEMPLATE=../custom-config \
-       EXTRA_CFLAGS="$(DPDK_EXTRA_CFLAGS)" \
-       EXTRA_LDFLAGS="$(DPDK_EXTRA_LDFLAGS)" \
-       CPU_CFLAGS="$(DPDK_CPU_CFLAGS)" \
-       DESTDIR=$(I) \
-        $(DPDK_MAKE_EXTRA_ARGS)
-
-define set
-@if grep -q CONFIG_$1 $@ ; \
-       then sed -i -e 's/.*\(CONFIG_$1=\).*/\1$2/' $@ ; \
-       else echo CONFIG_$1=$2 >> $@ ; \
-fi
-endef
-
-all: build
-
-$(B)/custom-config: $(B)/.patch.ok Makefile
-       @echo --- generating custom config from $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) ---
-       @cpp -undef -ffreestanding -x assembler-with-cpp $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) $@
-       $(call set,RTE_MACHINE,$(DPDK_MACHINE))
-       @# 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_PCI_EXTENDED_TAG,"on")
-       $(call set,RTE_PCI_MAX_READ_REQUEST_SIZE,4096)
-       @# enable debug init for device drivers
-       $(call set,RTE_LIBRTE_I40E_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_IXGBE_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_E1000_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_VIRTIO_DEBUG_INIT,$(DPDK_DEBUG))
-       $(call set,RTE_LIBRTE_VMXNET3_DEBUG_INIT,$(DPDK_DEBUG))
-       $(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,$(AESNI))
-       $(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_CFGFILE,n)
-       $(call set,RTE_LIBRTE_LPM,n)
-       $(call set,RTE_LIBRTE_ACL,n)
-       $(call set,RTE_LIBRTE_POWER,n)
-       $(call set,RTE_LIBRTE_DISTRIBUTOR,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):
-       @if [ -e $(DPDK_DOWNLOAD_DIR)/$(DPDK_TARBALL) ] ; \
-               then cp $(DPDK_DOWNLOAD_DIR)/$(DPDK_TARBALL) $(CURDIR) ; \
-               else curl -o $(CURDIR)/$(DPDK_TARBALL) -LO $(DPDK_TAR_URL) ; \
-       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
-
-DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL)
-ifeq ($(AESNI),y)
-DPDK_DOWNLOADS += $(CURDIR)/$(NASM_TARBALL)
-DPDK_DOWNLOADS += $(CURDIR)/$(AESNIMB_LIB_TARBALL)
-endif
-
-$(B)/.download.ok: $(DPDK_DOWNLOADS)
-       @mkdir -p $(B)
-       @openssl md5 $< | cut -f 2 -d " " - > $(B)/$(DPDK_TARBALL).md5sum
-       @([ "$$(<$(B)/$(DPDK_TARBALL).md5sum)" = "$(DPDK_$(DPDK_VERSION)_TARBALL_MD5_CKSUM)" ] || \
-       ( echo "Bad Checksum! Please remove $< and retry" && \
-               rm $(B)/$(DPDK_TARBALL).md5sum && false ))
-       @touch $@
-
-.PHONY: download
-download: $(B)/.download.ok
-
-$(B)/.extract.ok: $(B)/.download.ok
-       @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
-       @touch $@
-
-.PHONY: extract
-extract: $(B)/.extract.ok
-
-$(B)/.patch.ok: $(B)/.extract.ok
-ifneq ($(wildcard $(CURDIR)/dpdk-$(DPDK_VERSION)_patches/*.patch),)
-       @echo --- patching ---
-       @for f in $(CURDIR)/dpdk-$(DPDK_VERSION)_patches/*.patch ; do \
-               echo Applying patch: $$(basename $$f) ; \
-               patch -p1 -d $(DPDK_SOURCE) < $$f ; \
-       done
-endif
-       @touch $@
-
-.PHONY: patch
-patch: $(B)/.patch.ok
-
-$(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
-       @make $(DPDK_MAKE_ARGS) config
-       @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 SHARED=n \
-         EXTRA_CFLAGS=-fPIC NASM=$(NASM_SOURCE)/nasm
-       cp $(AESNIMB_LIB_SOURCE)/libIPSec_MB.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
-
-# Order matters
-ifeq ($(AESNI),y)
-BUILD_TARGETS += build-nasm
-BUILD_TARGETS += build-ipsec-mb
-endif
-BUILD_TARGETS += build-dpdk
-
-$(B)/.build.ok: $(BUILD_TARGETS)
-       @touch $@
-
-.PHONY: build
-build: $(B)/.build.ok
+B := $(BUILD_DIR)
+I := $(INSTALL_DIR)
 
 
-.PHONY: install
-install: $(B)/.build.ok
+include packages.mk
+include packages/nasm.mk
+include packages/ipsec-mb.mk
+include packages/dpdk.mk
 
 .PHONY: clean
 clean:
 
 .PHONY: clean
 clean:
@@ -433,7 +105,7 @@ $(DEV_RPM): Makefile rpm/vpp-ext-deps.spec
          --define "_release $(PKG_SUFFIX)" \
          $(CURDIR)/rpm/vpp-ext-deps.spec
        mv rpm/RPMS/$(RPM_ARCH)/*.rpm .
          --define "_release $(PKG_SUFFIX)" \
          $(CURDIR)/rpm/vpp-ext-deps.spec
        mv rpm/RPMS/$(RPM_ARCH)/*.rpm .
-       git clean -fdx rpm
+       @git clean -fdx rpm
 
 build-rpm: $(DEV_RPM)
 
 
 build-rpm: $(DEV_RPM)
 
index 6ffefc1..6393f82 100755 (executable)
@@ -1,12 +1,13 @@
 #!/usr/bin/make -f
 DH_VERBOSE = 1
 #!/usr/bin/make -f
 DH_VERBOSE = 1
+DEB_BUILD_OPTIONS = noddebs
 PKG=vpp-ext-deps
 
 VERSION = $(shell dpkg-parsechangelog | sed -nr '/^Version:/s/Version: //p')
 BASE_VER = $(word 1, $(subst -, ,$(VERSION)))
 
 PKG=vpp-ext-deps
 
 VERSION = $(shell dpkg-parsechangelog | sed -nr '/^Version:/s/Version: //p')
 BASE_VER = $(word 1, $(subst -, ,$(VERSION)))
 
-export DPDK_BUILD_DIR=$(CURDIR)/_build
-export DPDK_INSTALL_DIR=$(CURDIR)/debian/tmp/opt/vpp/external/$(shell uname -m)/
+export BUILD_DIR=$(CURDIR)/_build
+export INSTALL_DIR=$(CURDIR)/debian/tmp/opt/vpp/external/$(shell uname -m)/
 
 MAKE_ARGS=-C ..
 
 
 MAKE_ARGS=-C ..
 
diff --git a/build/external/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch b/build/external/dpdk-18.02.1_patches/0001-ixgbe-link-wait-longer.patch
deleted file mode 100644 (file)
index fb71e94..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
-index e7e9256e5..2fb0a072c 100644
---- a/drivers/net/ixgbe/base/ixgbe_common.c
-+++ b/drivers/net/ixgbe/base/ixgbe_common.c
-@@ -5296,7 +5296,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
-                * Section 73.10.2, we may have to wait up to 500ms if KR is
-                * attempted.  82599 uses the same timing for 10g SFI.
-                */
--              for (i = 0; i < 5; i++) {
-+              for (i = 0; i < 10; i++) {
-                       /* Wait for the link partner to also set speed */
-                       msec_delay(100);
diff --git a/build/external/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch b/build/external/dpdk-18.02_patches/0001-assign-QAT-cryptodev-to-correct-NUMA-node.patch
deleted file mode 100644 (file)
index 32d2c78..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From b01857dfdb4e46b8c7d306c608c58ebbabc252ec Mon Sep 17 00:00:00 2001
-From: Lee Roberts <lee.roberts@hpe.com>
-Date: Fri, 9 Mar 2018 10:49:34 -0700
-Subject: [PATCH] assign QAT cryptodev to correct NUMA node
-
-rte_cryptodev_pmd_init_params should use NUMA node of the QAT device
-for its socket_id rather than the socket_id of the initializing process.
-
-Signed-off-by: Lee Roberts <lee.roberts@hpe.com>
----
- drivers/crypto/qat/rte_qat_cryptodev.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c b/drivers/crypto/qat/rte_qat_cryptodev.c
-index bf83740..82641aa 100644
---- a/drivers/crypto/qat/rte_qat_cryptodev.c
-+++ b/drivers/crypto/qat/rte_qat_cryptodev.c
-@@ -130,7 +130,7 @@ static int crypto_qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
- {
-       struct rte_cryptodev_pmd_init_params init_params = {
-               .name = "",
--              .socket_id = rte_socket_id(),
-+              .socket_id = pci_dev->device.numa_node,
-               .private_data_size = sizeof(struct qat_pmd_private),
-               .max_nb_sessions = RTE_QAT_PMD_MAX_NB_SESSIONS
-       };
--- 
-1.9.1
-
diff --git a/build/external/packages.mk b/build/external/packages.mk
new file mode 100644 (file)
index 0000000..4056b2f
--- /dev/null
@@ -0,0 +1,150 @@
+# Copyright (c) 2018 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+define h1
+       @echo "--- $(1)"
+endef
+
+define package
+$1_tarball_strip_dirs ?= 0
+$1_src_dir ?= $(B)/src-$1
+$1_patch_dir ?= $(CURDIR)/patches/$1_$($1_version)
+$1_build_dir ?= $(B)/build-$1
+$1_install_dir ?= $(I)
+$1_config_log ?= $(B)/$1.config.log
+$1_build_log ?= $(B)/$1.build.log
+$1_install_log ?= $(B)/$1.install.log
+
+##############################################################################
+# Download
+##############################################################################
+downloads/$($1_tarball):
+       mkdir -p downloads
+       @if [ -e $(DL_CACHE_DIR)/$($1_tarball) ] ; \
+               then cp $(DL_CACHE_DIR)/$($1_tarball) downloads/ ; \
+       else \
+               echo "Downloading $($1_url)" ; \
+               curl -o downloads/$($1_tarball) -LO $($1_url) ; \
+       fi
+       @rm -f $(B)/.download.ok
+
+$(B)/.$1.download.ok: downloads/$($1_tarball)
+       @mkdir -p $(B)
+       $$(call h1,"validating $1 $($1_version) checksum")
+       @SUM=$$(shell openssl md5 $$< | cut -f 2 -d " " -) ; \
+       ([ "$$$${SUM}" = "$($1_tarball_md5sum)" ] || \
+       ( echo "==========================================================" && \
+         echo "Bad Checksum!" && \
+         echo "Expected:   $($1_tarball_md5sum)" && \
+         echo "Calculated: $$$${SUM}" && \
+         echo "Please remove $$< and retry" && \
+         echo "==========================================================" && \
+         false ))
+       @touch $$@
+
+.PHONY: $1-download
+$1-download: $(B)/.$1.download.ok
+
+##############################################################################
+# Extract
+##############################################################################
+$(B)/.$1.extract.ok: $(B)/.$1.download.ok
+       $$(call h1,"extracting $1 $($1_version)")
+       @mkdir -p $$($1_src_dir)
+       @tar \
+         --directory $$($1_src_dir) \
+         --extract \
+         --strip-components=$$($1_tarball_strip_dirs) \
+         --file downloads/$($1_tarball)
+       @touch $$@
+
+.PHONY: $1-extract
+$1-extract: $(B)/.$1.extract.ok
+
+##############################################################################
+# Patch
+##############################################################################
+$(B)/.$1.patch.ok: $(B)/.$1.extract.ok
+       $$(call h1,"patching $1 $($1_version)")
+ifneq ($$(wildcard $$($1_patch_dir)/*.patch),)
+       @for f in $$($1_patch_dir)/*.patch ; do \
+               echo "Applying patch: $$$$(basename $$$$f)" ; \
+               patch -p1 -d $$($1_src_dir) < $$$$f ; \
+       done
+endif
+       @touch $$@
+
+.PHONY: $1-patch
+$1-patch: $(B)/.$1.patch.ok
+
+##############################################################################
+# Config
+##############################################################################
+
+ifeq ($$(call $1_config_cmds),)
+define $1_config_cmds
+       @cd $$($1_build_dir) && \
+         CFLAGS="$$($1_cflags)" \
+         $$($1_src_dir)/configure \
+           --prefix=$$($1_install_dir) \
+           $$($1_configure_args) > $$($1_config_log)
+endef
+endif
+
+$(B)/.$1.config.ok: $(B)/.$1.patch.ok $(addsuffix -install,$($1_depends))
+       $$(call h1,"configuring $1 $($1_version) - log: $$($1_config_log)")
+       @mkdir -p $$($1_build_dir)
+       $$(call $1_config_cmds)
+       @touch $$@
+
+.PHONY: $1-config
+$1-config: $(B)/.$1.config.ok
+
+##############################################################################
+# Build
+##############################################################################
+
+ifeq ($$(call $1_build_cmds),)
+define $1_build_cmds
+       @$(MAKE) $(MAKE_ARGS) -C $$($1_build_dir) > $$($1_build_log)
+endef
+endif
+
+$(B)/.$1.build.ok: $(B)/.$1.config.ok
+       $$(call h1,"building $1 $($1_version) - log: $$($1_build_log)")
+       $$(call $1_build_cmds)
+       @touch $$@
+
+.PHONY: $1-build
+$1-build: $(B)/.$1.build.ok
+
+##############################################################################
+# Install
+##############################################################################
+
+ifeq ($$(call $1_install_cmds),)
+define $1_install_cmds
+       @$(MAKE) $(MAKE_ARGS) -C $$($1_build_dir) install > $$($1_install_log)
+endef
+endif
+
+$(B)/.$1.install.ok: $(B)/.$1.build.ok
+       $$(call h1,"installing $1 $($1_version) - log: $$($1_install_log)")
+       $$(call $1_install_cmds)
+       @touch $$@
+
+.PHONY: $1-install
+$1-install: $(B)/.$1.install.ok
+
+ALL_TARGETS += $1-install
+endef
diff --git a/build/external/packages/dpdk.mk b/build/external/packages/dpdk.mk
new file mode 100644 (file)
index 0000000..72301e5
--- /dev/null
@@ -0,0 +1,282 @@
+# Copyright (c) 2018 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DPDK_PKTMBUF_HEADROOM        ?= 128
+DPDK_CACHE_LINE_SIZE         ?= 64
+DPDK_DOWNLOAD_DIR            ?= $(DL_CACHE_DIR)
+DPDK_DEBUG                   ?= n
+DPDK_MLX4_PMD                ?= n
+DPDK_MLX5_PMD                ?= n
+DPDK_TAP_PMD                 ?= n
+DPDK_FAILSAFE_PMD            ?= n
+
+DPDK_VERSION                 ?= 18.08
+DPDK_BASE_URL                ?= http://fast.dpdk.org/rel
+DPDK_TARBALL                 := dpdk-$(DPDK_VERSION).tar.xz
+DPDK_TAR_URL                 := $(DPDK_BASE_URL)/$(DPDK_TARBALL)
+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
+
+ifeq ($(MACHINE),$(filter $(MACHINE),x86_64))
+  AESNI ?= y
+  DPDK_BUILD_DEPS := ipsec-mb-install
+else
+  AESNI ?= n
+endif
+
+ifneq (,$(findstring clang,$(CC)))
+DPDK_CC=clang
+else ifneq (,$(findstring icc,$(CC)))
+DPDK_CC=icc
+else
+DPDK_CC=gcc
+endif
+
+##############################################################################
+# Intel x86
+##############################################################################
+ifeq ($(MACHINE),$(filter $(MACHINE),x86_64 i686))
+DPDK_TARGET           ?= $(MACHINE)-native-linuxapp-$(DPDK_CC)
+DPDK_MACHINE          ?= nhm
+DPDK_TUNE             ?= core-avx2
+
+##############################################################################
+# ARM64
+##############################################################################
+else ifeq ($(MACHINE),aarch64)
+CROSS :=
+export CROSS
+DPDK_TARGET           ?= arm64-armv8a-linuxapp-$(DPDK_CC)
+DPDK_MACHINE          ?= armv8a
+DPDK_TUNE             ?= generic
+
+CPU_IMP_ARM                     = 0x41
+CPU_IMP_CAVIUM                  = 0x43
+
+CPU_PART_ARM_CORTEX_A53         = 0xd03
+CPU_PART_ARM_CORTEX_A57         = 0xd07
+CPU_PART_ARM_CORTEX_A72         = 0xd08
+CPU_PART_ARM_CORTEX_A73         = 0xd09
+
+CPU_PART_CAVIUM_THUNDERX        = 0x0a1
+CPU_PART_CAVIUM_THUNDERX_81XX   = 0x0a2
+CPU_PART_CAVIUM_THUNDERX_83XX   = 0x0a3
+
+MIDR_IMPLEMENTER=$(shell awk '/implementer/ {print $$4;exit}' /proc/cpuinfo)
+MIDR_PARTNUM=$(shell awk '/part/ {print $$4;exit}' /proc/cpuinfo)
+
+ifeq ($(MIDR_IMPLEMENTER),$(CPU_IMP_ARM))
+##############################################################################
+# Arm Cortex
+##############################################################################
+CPU_PART_ARM_TUNE := $(CPU_PART_ARM_CORTEX_A53)/cortex-a53 \
+                    $(CPU_PART_ARM_CORTEX_A57)/cortex-a57 \
+                    $(CPU_PART_ARM_CORTEX_A72)/cortex-a72 \
+                    $(CPU_PART_ARM_CORTEX_A73)/cortex-a73
+CPU_TUNE = $(notdir $(filter $(MIDR_PARTNUM)/%,$(CPU_PART_ARM_TUNE)))
+ifneq ($(CPU_TUNE),)
+DPDK_TUNE             = $(CPU_TUNE)
+else
+$(warning Unknown Arm CPU)
+endif
+
+else ifeq ($(MIDR_IMPLEMENTER),$(CPU_IMP_CAVIUM))
+##############################################################################
+# Cavium ThunderX
+##############################################################################
+ifneq (,$(findstring $(MIDR_PARTNUM),$(CPU_PART_CAVIUM_THUNDERX) \
+       $(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
+endif
+
+##############################################################################
+# Unknown platform
+##############################################################################
+else
+$(error Unknown platform)
+endif
+
+# 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)
+else
+DPDK_EXTRA_CFLAGS := -g -O0
+endif
+
+# -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
+
+DPDK_EXTRA_CFLAGS += -L$(I)/lib -I$(I)/include
+
+# assemble DPDK make arguments
+DPDK_MAKE_ARGS := -C $(DPDK_SOURCE) -j $(JOBS) \
+       T=$(DPDK_TARGET) \
+       RTE_CONFIG_TEMPLATE=../custom-config \
+       EXTRA_CFLAGS="$(DPDK_EXTRA_CFLAGS)" \
+       EXTRA_LDFLAGS="$(DPDK_EXTRA_LDFLAGS)" \
+       CPU_CFLAGS="$(DPDK_CPU_CFLAGS)" \
+       DESTDIR=$(I) \
+        $(DPDK_MAKE_EXTRA_ARGS)
+
+define set
+@if grep -q CONFIG_$1 $@ ; \
+       then sed -i -e 's/.*\(CONFIG_$1=\).*/\1$2/' $@ ; \
+       else echo CONFIG_$1=$2 >> $@ ; \
+fi
+endef
+
+all: build
+
+$(B)/custom-config: $(B)/.patch.ok Makefile
+       @echo --- generating custom config from $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) ---
+       @cpp -undef -ffreestanding -x assembler-with-cpp $(DPDK_SOURCE)/config/defconfig_$(DPDK_TARGET) $@
+       $(call set,RTE_MACHINE,$(DPDK_MACHINE))
+       @# 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_PCI_EXTENDED_TAG,"on")
+       $(call set,RTE_PCI_MAX_READ_REQUEST_SIZE,4096)
+       @# enable debug init for device drivers
+       $(call set,RTE_LIBRTE_I40E_DEBUG_INIT,$(DPDK_DEBUG))
+       $(call set,RTE_LIBRTE_IXGBE_DEBUG_INIT,$(DPDK_DEBUG))
+       $(call set,RTE_LIBRTE_E1000_DEBUG_INIT,$(DPDK_DEBUG))
+       $(call set,RTE_LIBRTE_VIRTIO_DEBUG_INIT,$(DPDK_DEBUG))
+       $(call set,RTE_LIBRTE_VMXNET3_DEBUG_INIT,$(DPDK_DEBUG))
+       $(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,$(AESNI))
+       $(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_CFGFILE,n)
+       $(call set,RTE_LIBRTE_LPM,n)
+       $(call set,RTE_LIBRTE_ACL,n)
+       $(call set,RTE_LIBRTE_POWER,n)
+       $(call set,RTE_LIBRTE_DISTRIBUTOR,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):
+       @if [ -e $(DPDK_DOWNLOAD_DIR)/$(DPDK_TARBALL) ] ; \
+               then cp $(DPDK_DOWNLOAD_DIR)/$(DPDK_TARBALL) $(CURDIR) ; \
+               else curl -o $(CURDIR)/$(DPDK_TARBALL) -LO $(DPDK_TAR_URL) ; \
+       fi
+       @rm -f $(B)/.download.ok
+
+DPDK_DOWNLOADS = $(CURDIR)/$(DPDK_TARBALL)
+
+$(B)/.download.ok: $(DPDK_DOWNLOADS)
+       @mkdir -p $(B)
+       @openssl md5 $< | cut -f 2 -d " " - > $(B)/$(DPDK_TARBALL).md5sum
+       @([ "$$(<$(B)/$(DPDK_TARBALL).md5sum)" = "$(DPDK_$(DPDK_VERSION)_TARBALL_MD5_CKSUM)" ] || \
+       ( echo "Bad Checksum! Please remove $< and retry" && \
+               rm $(B)/$(DPDK_TARBALL).md5sum && false ))
+       @touch $@
+
+.PHONY: download
+download: $(B)/.download.ok
+
+$(B)/.extract.ok: $(B)/.download.ok
+       @echo --- extracting $(DPDK_TARBALL) ---
+       @tar --directory $(B) --extract --file $(CURDIR)/$(DPDK_TARBALL)
+       @touch $@
+
+.PHONY: extract
+extract: $(B)/.extract.ok
+
+$(B)/.patch.ok: $(B)/.extract.ok
+ifneq ($(wildcard $(CURDIR)/patches/dpdk_$(DPDK_VERSION)/*.patch),)
+       @echo --- patching ---
+       @for f in $(CURDIR)/patches/dpdk_$(DPDK_VERSION)/*.patch ; do \
+               echo Applying patch: $$(basename $$f) ; \
+               patch -p1 -d $(DPDK_SOURCE) < $$f ; \
+       done
+endif
+       @touch $@
+
+.PHONY: patch
+patch: $(B)/.patch.ok
+
+$(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
+       @make $(DPDK_MAKE_ARGS) config
+       @touch $@
+
+.PHONY: config
+config: $(B)/.config.ok
+
+.PHONY: build-dpdk
+build-dpdk: $(DPDK_BUILD_DEPS)
+       @if [ ! -e $(B)/.config.ok ] ; then echo 'Please run "make config" first' && false ; fi
+       @make $(DPDK_MAKE_ARGS) install
+
+$(B)/.build.ok: build-dpdk
+       @touch $@
+
+.PHONY: build
+build: $(B)/.build.ok
+
+.PHONY: install
+install: $(B)/.build.ok
diff --git a/build/external/packages/ipsec-mb.mk b/build/external/packages/ipsec-mb.mk
new file mode 100644 (file)
index 0000000..42c86e9
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright (c) 2018 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ipsec-mb_version             := 0.49
+ipsec-mb_tarball             := v$(ipsec-mb_version).tar.gz
+ipsec-mb_tarball_md5sum_0.49 := 3a2bee86f25f6c8ed720da5b4b8d4297
+ipsec-mb_tarball_md5sum_0.50 := c847ed77ae34da551237349f1c9db1e9
+ipsec-mb_tarball_md5sum      := $(ipsec-mb_tarball_md5sum_$(ipsec-mb_version))
+ipsec-mb_tarball_strip_dirs  := 1
+ipsec-mb_depends             := nasm
+ipsec-mb_url                 := http://github.com/01org/intel-ipsec-mb/archive/$(ipsec-mb_tarball)
+
+define  ipsec-mb_config_cmds
+       @true
+endef
+
+define  ipsec-mb_build_cmds
+       @true
+endef
+
+define  ipsec-mb_install_cmds
+       @mkdir -p $(ipsec-mb_install_dir)/include
+       @make -C $(ipsec-mb_src_dir) -j \
+         SHARED=n \
+         EXTRA_CFLAGS=-fPIC \
+         NASM=$(ipsec-mb_install_dir)/bin/nasm \
+         PREFIX=$(ipsec-mb_install_dir) \
+         install > $(ipsec-mb_install_log)
+endef
+
+$(eval $(call package,ipsec-mb))
+
+
diff --git a/build/external/packages/nasm.mk b/build/external/packages/nasm.mk
new file mode 100644 (file)
index 0000000..1219b33
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright (c) 2018 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nasm_version            := 2.13.03
+nasm_tarball            := nasm-$(nasm_version).tar.xz
+nasm_tarball_md5sum     := d5ca2ad7121ccbae69dd606b1038532c
+nasm_tarball_strip_dirs := 1
+nasm_url                := http://www.nasm.us/pub/nasm/releasebuilds/$(nasm_version)/$(nasm_tarball)
+nasm_cflags             := -Wno-implicit-fallthrough -std=c11
+
+$(eval $(call package,nasm))
similarity index 55%
rename from build/external/README
rename to build/external/patches/README
index 95154dc..0bead2e 100644 (file)
@@ -6,19 +6,19 @@ accepted upstream and made available in the next DPDK release.
 
 The following is the method used to generate these patches:
 
 
 The following is the method used to generate these patches:
 
-1. Git clone the DPDK to a new directory:
+1. Git clone the package to a new directory:
  # git clone http://dpdk.org/git/dpdk dpdk
 
  # git clone http://dpdk.org/git/dpdk dpdk
 
-2. Create a branch based on the DPDK release you wish to patch.
+2. Create a branch based on the release you wish to patch.
 Note, “git tag” will show you all the release tags. The following example is
 Note, “git tag” will show you all the release tags. The following example is
-for DPDK release tag “v2.2.0” and will create a branch named “two_dot_two”.
- # cd dpdk
+for release tag “v2.2.0” and will create a branch named “two_dot_two”.
+ # cd <root dir>
  # git checkout -b two_dot_two v2.2.0
 
  # git checkout -b two_dot_two v2.2.0
 
-3. Apply all the existing VPP DPDK patches to this new branch.
- # git am <VPP directory>/dpdk/dpdk-2.2.0_patches/*
+3. Apply all the existing patches to this new branch.
+ # git am </path/to/existing/patches/*>
 
 
-4. Make your changes and commit your change to your DPDK repository.
+4. Make your changes and commit your change to your repository.
  # <edit files>
  # git commit -s
 
  # <edit files>
  # git commit -s
 
@@ -26,9 +26,5 @@ for DPDK release tag “v2.2.0” and will create a branch named “two_dot_two
 for your branch (two_dot_two), with your latest commits as the last ones.
  # git format-patch master..two_dot_two
 
 for your branch (two_dot_two), with your latest commits as the last ones.
  # git format-patch master..two_dot_two
 
-6. Copy, add and commit the new patches into the VPP patches directory.
- # cp <new patch files> <VPP directory>/dpdk/dpdk-2.2.0_patches
- # cd <VPP directory>
- # git add dpdk/dpdk-2.2.0_patches/<new patch files>
- # git commit -s
+6. Copy, add and commit the new patches into the patches directory.
 
 
diff --git a/build/external/patches/nasm_2.13.03/0001-Fix-gcc-8-compilation.patch b/build/external/patches/nasm_2.13.03/0001-Fix-gcc-8-compilation.patch
new file mode 100644 (file)
index 0000000..73b59a5
--- /dev/null
@@ -0,0 +1,26 @@
+From aa9324ae33870cd3b9d90251e380a6d704651a60 Mon Sep 17 00:00:00 2001
+From: Damjan Marion <damarion@cisco.com>
+Date: Mon, 17 Sep 2018 09:25:35 +0200
+Subject: [PATCH] Fix gcc-8 compilation
+
+Signed-off-by: Damjan Marion <damarion@cisco.com>
+---
+ include/nasmlib.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/nasmlib.h b/include/nasmlib.h
+index 79e866b..5f07d77 100644
+--- a/include/nasmlib.h
++++ b/include/nasmlib.h
+@@ -191,7 +191,7 @@ int64_t readstrnum(char *str, int length, bool *warn);
+  * seg_init: Initialise the segment-number allocator.
+  * seg_alloc: allocate a hitherto unused segment number.
+  */
+-void pure_func seg_init(void);
++int32_t pure_func seg_init(void);
+ int32_t pure_func seg_alloc(void);
+ /*
+-- 
+2.17.1
+
index c79ae12..e0980ab 100644 (file)
@@ -1,5 +1,5 @@
 %define _install_dir   /opt/vpp/external/%(uname -m)
 %define _install_dir   /opt/vpp/external/%(uname -m)
-%define _make_args     -C ../.. DPDK_BUILD_DIR=%{_topdir}/tmp DPDK_INSTALL_DIR=%{buildroot}/%{_install_dir}
+%define _make_args     -C ../.. BUILD_DIR=%{_topdir}/tmp INSTALL_DIR=%{buildroot}%{_install_dir}
 
 Name:          vpp-ext-deps
 Version:       %{_version}
 
 Name:          vpp-ext-deps
 Version:       %{_version}
@@ -13,6 +13,7 @@ VPP development package with external dependencies
 %install
 make %{_make_args} config
 make %{_make_args} install
 %install
 make %{_make_args} config
 make %{_make_args} install
+export QA_SKIP_BUILD_ROOT=1
 
 %files
 %{_install_dir}
 
 %files
 %{_install_dir}