1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
#!/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,-pie
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
# 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
# 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)/build
endif
KVERS := $(shell perl debian/kernel-version $(KSRC))
export KVERS
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))
build:
@if [ x"$(KVERS)" = x ] ; then \
echo 'No version in $(KSRC)/include/linux/version.h' >&2; \
exit 1; \
fi
sh debian/prep-modules $(KSRC)
cat debian/control.modules >> debian/control
dh $@ --with python3,dkms,systemd --buildsystem=meson
endif
%:
dh $@ --with python3,dkms,systemd --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 libdpdk-dev and libdpdk-dbgsym after.
# The list of libraries and PMDs is everchanging, so generate the dependency
# list for libdpdk-dev to avoid having to maintain it manually.
# Same for the recommends list for dpdk, were we want the PMDs and the mempools.
dh_gencontrol -p libdpdk-dev -- -V"librte:Depends=`grep -E 'librte-*' ./debian/files | grep -v dbgsym | tr '_' ' ' | awk '{ print $$1,"(=",$$2 ")" }' | paste -sd ',' - | sed -e 's/,/, /g'`"
dh_gencontrol -p dpdk -- -V"librte:Recommends=`grep -E 'librte-(pmd|mempool).*' ./debian/files | grep -v dbgsym | tr '_' ' ' | awk '{ print $$1,"(=",$$2 ")" }' | paste -sd ',' - | sed -e 's/,/, /g'`"
ifneq (,$(findstring kernel_modules,$(DEB_BUILD_OPTIONS)))
dh_gencontrol -p dpdk-modules-$(KVERS) -- \
-v`cat debian/VERSION` \
-V'built:using:kernel=$(call get_built_using,linux-headers-$(KVERS))'
endif
ifneq (,$(findstring dbgsym_meta,$(DEB_BUILD_OPTIONS)))
./debian/dh-dbgsym-metapkg libdpdk$(DPDK_ABI)-dbgsym
endif
# dbgsym_meta can be passed via DEB_BUILD_OPTIONS to enable building the
# optional dbgsym meta package libdpdk<ABI>-dbgsym.
# This is not built by default as it would go in main but depend on
# packages in the debian-debug archive.
# Debian Developers and FTP masters strongly discourage this.
# We provide this optional flag as a convenience for rebuilders.
ifneq (,$(findstring dbgsym_meta,$(DEB_BUILD_OPTIONS)))
override_dh_builddeb:
dh_builddeb
dh_builddeb -plibdpdk$(DPDK_ABI)-dbgsym
endif
override_dh_auto_clean:
rm -rf debian/build debian/tmp debian/dpdk-modules-* \
debian/control.modules debian/VERSION
sed -i '/Package: dpdk-modules-/,/`tail -n1 debian/control.modules.in`/d' debian/control
rm -f debian/dpdk-igb-uio-dkms.dkms debian/dpdk-rte-kni-dkms.dkms
rm -f debian/dpdk-dev.preinst
dh_auto_clean
override_dh_auto_configure:
dh_auto_configure -- \
--includedir=include/dpdk \
-Dper_library_versions=false \
-Dinclude_subdir_arch=../$(DEB_HOST_MULTIARCH)/dpdk \
-Dmachine=corei7 \
-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
# generate the preinst to deal with the symlink -> directory transition smoothly
sed "s/@@RTE_TARGET@@/$(RTE_TARGET)/g" debian/dpdk-dev.preinst.in > debian/dpdk-dev.preinst
# have the DKMS build include the correct per-arch directory
sed "s/@@DEB_HOST_MULTIARCH@@/$(DEB_HOST_MULTIARCH)/g" debian/dpdk-igb-uio-dkms.dkms.in > debian/dpdk-igb-uio-dkms.dkms
sed "s/@@DEB_HOST_MULTIARCH@@/$(DEB_HOST_MULTIARCH)/g" debian/dpdk-rte-kni-dkms.dkms.in > debian/dpdk-rte-kni-dkms.dkms
# Package(s): libdpdk-<NAME><VER> (bare runtime libs and PMDs)
for lib in $$(ls -1 debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/*.so.*); do \
LN=$$(basename $${lib} | sed -e 's/\.so\.[0-9\.]*$$//' | tr '_' '-'); \
if echo $${LN} | grep -q ".*[0-9]$$"; then \
PKG=$${LN}-$(DPDK_ABI); \
else \
PKG=$${LN}$(DPDK_ABI); \
fi; \
LIBF="$$(basename $${lib})"; \
dh_install -p $${PKG} usr/lib/$(DEB_HOST_MULTIARCH)/$${LIBF}; \
if [ -f debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/*/*/$${LIBF} ]; then \
dh_install -p $${PKG} usr/lib/$(DEB_HOST_MULTIARCH)/*/*/$${LIBF}; \
fi; \
done
# Package: dpdk-igb-uio-dkms
dh_install -p dpdk-igb-uio-dkms kernel/linux/igb_uio/* \
usr/src/dpdk-igb-uio-$(DEB_VERSION_UPSTREAM)
# Package: dpdk-rte-kni-dkms
dh_install -p dpdk-rte-kni-dkms kernel/linux/kni/* \
usr/src/dpdk-rte-kni-$(DEB_VERSION_UPSTREAM)
ifneq (,$(KVERS))
# Package: dpdk-modules-<kernel version>
dh_install -p dpdk-modules-$(KVERS) lib/modules
endif
override_dh_dkms:
dh_dkms -V $(DEB_VERSION_UPSTREAM)
override_dh_installinit:
dh_installinit --no-start --no-stop-on-upgrade
override_dh_systemd_start:
dh_systemd_start --no-start --no-stop-on-upgrade
override_dh_auto_test:
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_missing:
dh_missing --fail-missing
|