File debian.rules of Package dpdk-21.11
#!/usr/bin/make -f
# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
DPKG_EXPORT_BUILDFLAGS = 1
export DEB_BUILD_MAINT_OPTIONS = hardening=+all optimize=-lto
include /usr/share/dpkg/default.mk
DPDK_ABI := $(shell echo $(DEB_VERSION_UPSTREAM) | cut -d '-' -f1 | cut -d '.' -f1-2 | cut -d '~' -f1)
ifeq (,$(findstring terse,$(DEB_BUILD_OPTIONS)))
export DH_VERBOSE=1
export DH_OPTIONS=-v
endif
export DEB_CFLAGS_MAINT_APPEND = -Werror
# Disable debugging symbols, as they cause each build to cost 1GB of storage space for OBS
export DEB_CFLAGS_STRIP = -g
DEB_BUILD_OPTIONS+= kernel_modules
# People rebuilding this package can overwrite RTE_MACHINE
# via DEB_BUILD_OPTIONS if they like
ifneq (,$(filter rte_machine=%,$(DEB_BUILD_OPTIONS)))
RTE_MACHINE ?= $(patsubst rte_machine=%,%,$(filter rte_machine=%,$(DEB_BUILD_OPTIONS)))
endif
# default to minimal base, without setting this it would build
# -march=native which is a non portable invariant
RTE_MACHINE ?= "default"
# now stable with parallel comilation, so support -j
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
PAR := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
MAKEFLAGS += -j$(PAR)
endif
ifneq (,$(findstring nodoc,$(DEB_BUILD_PROFILES)))
BUILD_DOCS=n
else
ifneq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
BUILD_DOCS=n
# to stop dh_installdoc from running
export DEB_BUILD_PROFILES += nodoc
else
BUILD_DOCS=y
endif
endif
# Allow to pass specific configure flags to meson as a comma separated list
ifneq (,$(filter dpdk_config_options=%,$(DEB_BUILD_OPTIONS)))
# GNU Makefile hack: can't directly escape comma and spaces, so use variables
comma := ,
space :=
space +=
DPDK_CONFIG_OPTIONS ?= $(subst $(comma),$(space),$(patsubst dpdk_config_options=%,%,$(filter dpdk_config_options=%,$(DEB_BUILD_OPTIONS))))
endif
# kernel_modules can be passed via DEB_BUILD_OPTIONS to enable building the
# optional binary kernel modules package. By default it will be built against
# the current kernel, or ksrc can be passed with a path to the target kernel
# sources instead.
ifeq (,$(findstring kernel_modules,$(DEB_BUILD_OPTIONS)))
DPDK_CONFIG_BUILD_KMOD=false
KSRC=""
else
ifneq (,$(filter ksrc=%,$(DEB_BUILD_OPTIONS)))
KSRC := $(patsubst ksrc=%,%,$(filter ksrc=%,$(DEB_BUILD_OPTIONS)))
else
KSRC := /lib/modules/$(shell uname -r)
endif
export KVERS=$(shell LIST=$$(ls /lib/modules/); for dir in $$LIST; do test -d /lib/modules/$$dir/build && echo $$dir; done | sort -n | head -1)
export KSRC=/lib/modules/$(KVERS)/build
KVERS_BINARY := $(shell dpkg-query -W -f='$${Version}\n' linux-headers-$(KVERS))
KVERS_DEPEND := linux-image-$(KVERS) (= $(KVERS_BINARY)) | linux-image-$(KVERS)-signed (= $(KVERS_BINARY)) | linux-image-$(KVERS)-unsigned (= $(KVERS_BINARY))
export MODULE_CFLAGS=-fno-PIE
DPDK_CONFIG_BUILD_KMOD=true
# Since the binary module package is generated at build time depending on the
# local kernel version, we have to append the new package in d/control.
# We cannot use a separate control file since that wouldn't work with
# dpkg-genchanges, and also would require a lot of overrides for debhelpers.
get_built_using ?= $(filter-out (=),$(shell dpkg-query -f='$${source:Package} (=$${source:Version})' -W $1))
debian/control.modules: debian/control.modules.in
@if [ x"$(KVERS)" = x ] ; then \
echo 'No kernel headers version found' >&2; \
exit 1; \
fi
sed -e "s/@KVERS@/$(KVERS)/" -e "s/@KVERS_DEPEND@/$(KVERS_DEPEND)/"< $< > $@
cat $@ >> debian/control
build: debian/control.modules
dh $@ --with python3 --buildsystem=meson
endif
%:
dh $@ --with python3 --buildsystem=meson
override_dh_gencontrol:
dh_gencontrol
# debian/files will not exist until dh_gencontrol has ran at least once,
# so we need to run gencontrol for dpdk-modules after.
ifneq (,$(findstring kernel_modules,$(DEB_BUILD_OPTIONS)))
dh_gencontrol -p dpdk-modules-$(KVERS) -- \
-V'built:using:kernel=$(call get_built_using,linux-headers-$(KVERS))'
endif
override_dh_auto_clean:
rm -rf debian/build debian/tmp debian/dpdk-modules-* \
debian/control.modules
sed -i '/Package: dpdk-modules-/,/`tail -n1 debian/control.modules.in`/d' debian/control
dh_auto_clean
override_dh_auto_configure:
dh_auto_configure -- $(DPDK_CONFIG_OPTIONS) \
--includedir=include/dpdk \
--default-library=shared \
-Dinclude_subdir_arch=../$(DEB_HOST_MULTIARCH)/dpdk \
-Dmachine=$(RTE_MACHINE) \
-Dkernel_dir=$(KSRC) \
-Denable_kmods=$(DPDK_CONFIG_BUILD_KMOD)
override_dh_auto_build-indep:
ifeq (y,$(BUILD_DOCS))
dh_auto_build -- doc
# NINJA DOC INSTALL DOES NOT WORK - .buildinfo present, css missing
rm -f obj-$(DEB_HOST_MULTIARCH)/doc/guides/guides/.buildinfo
endif
# ninja install doc does not work, will rebuild everything,
# only dpdk-doc as arch: all so just skip it
override_dh_auto_install-indep:
override_dh_auto_install-arch:
dh_auto_install
dh_install -p dpdk usr/bin
dh_install -p libdpdk0 usr/lib/$(DEB_HOST_MULTIARCH)/*.so.*
dh_install -p libdpdk0 usr/lib/$(DEB_HOST_MULTIARCH)/*/*/*.so.*
dh_install -p libdpdk-dev usr/lib/$(DEB_HOST_MULTIARCH)/*.so
dh_install -p libdpdk-dev usr/lib/$(DEB_HOST_MULTIARCH)/*/*/*.so
dh_install -p libdpdk-dev usr/lib/$(DEB_HOST_MULTIARCH)/*.a
dh_install -p libdpdk-dev usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig
dh_install -p libdpdk-dev usr/include
ifneq (,$(KVERS))
# Package: dpdk-modules-<kernel version>
dh_install -p dpdk-modules-$(KVERS) lib/modules
endif
override_dh_auto_test:
ifneq (,$(filter i386 amd64 arm64, $(DEB_HOST_ARCH)))
meson test -C obj-$(DEB_HOST_GNU_TYPE) --verbose --suite fast-tests -t 3
endif
override_dh_python3:
# dh_python only looks in /usr/share/package_name but dpdk-doc installs in
# /usr/share/dpdk, so pass /usr to catch all
dh_python3 --shebang=/usr/bin/python3 /usr
override_dh_strip: