blob: ef84383d55a7fd26da8daed6128c92c86151933a [file] [log] [blame]
# 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_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_version ?= 20.08
dpdk_base_url ?= http://fast.dpdk.org/rel
dpdk_tarball := dpdk-$(dpdk_version).tar.xz
dpdk_tarball_md5sum_20.08 := 64badd32cd6bc0761befc8f2402c2148
dpdk_tarball_md5sum := $(dpdk_tarball_md5sum_$(dpdk_version))
dpdk_url := $(dpdk_base_url)/$(dpdk_tarball)
dpdk_tarball_strip_dirs := 1
# 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/\*, \
crypto/ccp, \
crypto/dpaa_sec, \
crypto/openssl, \
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
# Adjust disabled pmd and libs depending on user provided variables
ifeq ($(DPDK_MLX4_PMD), n)
DPDK_DRIVERS_DISABLED += ,net/mlx4
endif
ifeq ($(DPDK_MLX5_PMD), n)
DPDK_DRIVERS_DISABLED += ,net/mlx5
endif
ifeq ($(DPDK_MLX5_COMMON_PMD), n)
DPDK_DRIVERS_DISABLED += ,common/mlx5
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
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)
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 && \
pip3 install meson==0.54 && \
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)
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 && \
rm -rf $(dpdk_build_dir)/../dpdk-meson-venv
endef
$(eval $(call package,dpdk))