Kepka, Krzysztof 5f35a185d5 dpdk: Update version to 21.02
Update of DPDK to latest stable release.
As this introduces new build dependency, it also adds install
of pyelftools to the build step. (note however that flush of pip downloads
cache dir is required)
https://doc.dpdk.org/guides-21.02/rel_notes/release_21_02.html

Type: improvement
Signed-off-by: Kepka, Krzysztof <krzysztof.kepka@intel.com>
Change-Id: I7ed2ca965f01c1062f5abc25ea428e8c1a016366
2021-04-01 12:44:35 +00:00

202 lines
5.9 KiB
Makefile

# Copyright (c) 2020 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_USE_LIBBSD ?= n
DPDK_DEBUG ?= n
DPDK_MLX4_PMD ?= n
DPDK_MLX5_PMD ?= n
DPDK_MLX5_COMMON_PMD ?= n
DPDK_TAP_PMD ?= n
DPDK_FAILSAFE_PMD ?= n
DPDK_MACHINE ?= default
DPDK_MLX_IBV_LINK ?= static
dpdk_version ?= 21.02
dpdk_base_url ?= http://fast.dpdk.org/rel
dpdk_tarball := dpdk-$(dpdk_version).tar.xz
dpdk_tarball_md5sum_21.02 := 2c3e4800b04495ad7fa8656a7e1a3ec1
dpdk_tarball_md5sum := $(dpdk_tarball_md5sum_$(dpdk_version))
dpdk_url := $(dpdk_base_url)/$(dpdk_tarball)
dpdk_tarball_strip_dirs := 1
dpdk_depends := rdma-core $(if $(ARCH_X86_64), ipsec-mb)
# Debug or release
DPDK_BUILD_TYPE:=release
ifeq ($(DPDK_DEBUG), y)
DPDK_BUILD_TYPE:=debug
endif
DPDK_DRIVERS_DISABLED := baseband/\*, \
bus/dpaa, \
bus/ifpga, \
compress/isal, \
compress/octeontx, \
compress/zlib, \
crypto/ccp, \
crypto/dpaa_sec, \
crypto/openssl, \
crypto/aesni_mb, \
crypto/aesni_gcm, \
crypto/kasumi, \
crypto/snow3g, \
crypto/zuc, \
event/\*, \
mempool/dpaa, \
net/af_packet, \
net/bnx2x, \
net/bonding, \
net/ipn3ke, \
net/liquidio, \
net/pcap, \
net/pfe, \
net/sfc, \
net/softnic, \
net/thunderx, \
raw/ifpga, \
net/af_xdp
DPDK_LIBS_DISABLED := acl, \
bbdev, \
bitratestats, \
bpf, \
cfgfile, \
distributor, \
efd, \
fib, \
flow_classify, \
graph, \
gro, \
gso, \
jobstats, \
kni, \
latencystats, \
lpm, \
member, \
node, \
pipeline, \
port, \
power, \
rawdev, \
rib, \
table
DPDK_MLX_CONFIG_FLAG :=
# Adjust disabled pmd and libs depending on user provided variables
ifeq ($(DPDK_MLX4_PMD), n)
DPDK_DRIVERS_DISABLED += ,net/mlx4
else
DPDK_MLX_CONFIG_FLAG := -Dibverbs_link=${DPDK_MLX_IBV_LINK}
endif
ifeq ($(DPDK_MLX5_PMD), n)
DPDK_DRIVERS_DISABLED += ,net/mlx5
else
DPDK_MLX_CONFIG_FLAG := -Dibverbs_link=${DPDK_MLX_IBV_LINK}
endif
ifeq ($(DPDK_MLX5_COMMON_PMD), n)
DPDK_DRIVERS_DISABLED += ,common/mlx5
else
DPDK_MLX_CONFIG_FLAG := -Dibverbs_link=${DPDK_MLX_IBV_LINK}
endif
ifeq ($(DPDK_TAP_PMD), n)
DPDK_DRIVERS_DISABLED += ,net/tap
endif
ifeq ($(DPDK_FAILSAFE_PMD), n)
DPDK_DRIVERS_DISABLED += ,net/failsafe
endif
# Sanitize DPDK_DRIVERS_DISABLED and DPDK_LIBS_DISABLED
DPDK_DRIVERS_DISABLED := $(shell echo $(DPDK_DRIVERS_DISABLED) | tr -d '\\\t ')
DPDK_LIBS_DISABLED := $(shell echo $(DPDK_LIBS_DISABLED) | tr -d '\\\t ')
HASH := \#
# post-meson-setup snippet to alter rte_build_config.h
define dpdk_config
if grep -q RTE_$(1) $(dpdk_src_dir)/config/rte_config.h ; then \
sed -i -e 's/$(HASH)define RTE_$(1).*/$(HASH)define RTE_$(1) $(DPDK_$(1))/' \
$(dpdk_src_dir)/config/rte_config.h; \
elif grep -q RTE_$(1) $(dpdk_build_dir)/rte_build_config.h ; then \
sed -i -e 's/$(HASH)define RTE_$(1).*/$(HASH)define RTE_$(1) $(DPDK_$(1))/' \
$(dpdk_build_dir)/rte_build_config.h; \
else \
echo '$(HASH)define RTE_$(1) $(DPDK_$(1))' \
>> $(dpdk_build_dir)/rte_build_config.h ; \
fi
endef
define dpdk_config_def
if [[ "$(DPDK_$(1))" == "y" ]]; then \
if ! grep -q "RTE_$(1)" $(dpdk_build_dir)/rte_build_config.h \
$(dpdk_src_dir)/config/rte_config.h ; then \
echo '$(HASH)define RTE_$(1) 1' \
>> $(dpdk_build_dir)/rte_build_config.h ; \
fi; \
elif [[ "$(DPDK_$(1))" == "n" ]]; then \
sed -i '/$(HASH)define RTE_$(1) .*/d' $(dpdk_build_dir)/rte_build_config.h \
$(dpdk_src_dir)/config/rte_config.h ; \
fi
endef
DPDK_MESON_ARGS = \
--default-library static \
--libdir lib \
--prefix $(dpdk_install_dir) \
-Dtests=false \
"-Ddisable_drivers=$(DPDK_DRIVERS_DISABLED)" \
"-Ddisable_libs=$(DPDK_LIBS_DISABLED)" \
-Db_pie=true \
-Dmachine=$(DPDK_MACHINE) \
--buildtype=$(DPDK_BUILD_TYPE) \
${DPDK_MLX_CONFIG_FLAG}
PIP_DOWNLOAD_DIR = $(CURDIR)/downloads/
define dpdk_config_cmds
cd $(dpdk_build_dir) && \
rm -rf ../dpdk-meson-venv && \
mkdir -p ../dpdk-meson-venv && \
python3 -m venv ../dpdk-meson-venv && \
source ../dpdk-meson-venv/bin/activate && \
(if ! ls $(PIP_DOWNLOAD_DIR)meson* ; then pip3 download -d $(PIP_DOWNLOAD_DIR) -f $(DL_CACHE_DIR) meson==0.54 setuptools wheel pyelftools; fi) && \
pip3 install --no-index --find-links=$(PIP_DOWNLOAD_DIR) meson==0.54 pyelftools && \
PKG_CONFIG_PATH=$(dpdk_install_dir)/lib/pkgconfig meson setup $(dpdk_src_dir) \
$(dpdk_build_dir) \
$(DPDK_MESON_ARGS) \
| tee $(dpdk_config_log) && \
deactivate && \
echo "DPDK post meson configuration" && \
echo "Altering rte_build_config.h" && \
$(call dpdk_config,PKTMBUF_HEADROOM) && \
$(call dpdk_config_def,USE_LIBBSD)
endef
define dpdk_build_cmds
cd $(dpdk_build_dir) && \
source ../dpdk-meson-venv/bin/activate && \
meson compile -C . | tee $(dpdk_build_log) && \
deactivate
endef
define dpdk_install_cmds
cd $(dpdk_build_dir) && \
source ../dpdk-meson-venv/bin/activate && \
meson install && \
cd $(dpdk_install_dir)/lib && \
echo "GROUP ( $$(ls librte*.a ) )" > libdpdk.a && \
rm -rf librte*.so librte*.so.* dpdk/*/librte*.so dpdk/*/librte*.so.* && \
deactivate
endef
$(eval $(call package,dpdk))