pve-kernel-thunderx/debian/rules
Fabian Mastenbroek 97aa3e3f5b
Use annotations for generating Ubuntu config
This change updates the build script to use the annotations script from
Ubuntu to generate the kernel configuration. Previously, we used the
pre-generated configuration files available in the mainline crack
builds. However, the team has stopped generating these in favor of the
annotations script.
2022-12-17 16:54:30 +00:00

210 lines
9 KiB
Makefile
Executable file

#!/usr/bin/make -f
# -*- makefile -*-
include /usr/share/dpkg/default.mk
# Common variables for all architectures
include debian/rules.d/common.mk
# Pull in some arch specific stuff
include debian/rules.d/arch/${DEB_BUILD_ARCH}.mk
BUILD_DIR ?= ${CURDIR}
KERNEL_SRC := linux
ZFS_SRC := zfs
%:
dh $@ --with quilt
## Debian package metadata
debian/control: debian/templates/control.in
sed -e 's/@KVNAME@/${KVNAME}/g' -e 's/@KVMAJMIN@/${KERNEL_MAJMIN}/g' < debian/templates/control.in > debian/control
debian/SOURCE:
echo "git clone git@github.com:fabianishere/pve-edge-kernel.git \
git checkout ${PKG_GIT_VERSION} \
git submodule update --init --depth=1" > $@
## Debhelper phases
override_dh_quilt_patch:
# Apply crack bundle
git -C ${KERNEL_SRC} fetch ../crack.bundle $$(git -C ${KERNEL_SRC} ls-remote ../crack.bundle | cut -f1)
git -C ${KERNEL_SRC} checkout -f FETCH_HEAD
# Apply patches
cd ${KERNEL_SRC}; \
QUILT_PATCHES=../debian/patches \
QUILT_SERIES=series.linux \
quilt --quiltrc /dev/null --color=always push -a || test $$? = 2
cd ${ZFS_SRC}; \
QUILT_PATCHES=../debian/patches \
QUILT_SERIES=series.zfs \
quilt --quiltrc /dev/null --color=always push -a || test $$? = 2
override_dh_quilt_unpatch:
cd ${KERNEL_SRC}; \
QUILT_PATCHES=../debian/patches \
QUILT_SERIES=series.linux \
quilt --quiltrc /dev/null pop -a || test $$? = 2
cd ${ZFS_SRC}; \
QUILT_PATCHES=../debian/patches \
QUILT_SERIES=series.zfs \
quilt --quiltrc /dev/null pop -a || test $$? = 2
rm -rf ${KERNEL_SRC}/.pc ${ZFS_SRC}/.pc
override_dh_autoreconf:
dh_autoreconf -D ${ZFS_SRC}
override_dh_auto_configure: ${KERNEL_SRC}/.config
override_dh_auto_build:
# Kernel
dh_auto_build -D ${KERNEL_SRC} -- \
CC="${PVE_KERNEL_CC}" \
KCFLAGS="${PVE_KERNEL_CFLAGS}" \
EXTRAVERSION="${EXTRAVERSION}" \
LOCALVERSION="${LOCALVERSION}" \
KBUILD_BUILD_VERSION_TIMESTAMP="${PKG_DISTRIBUTOR} ${DEB_VERSION} (${PKG_DATE_UTC_ISO})"
# ZFS
dh_auto_configure -D ${ZFS_SRC} -- CC="${PVE_ZFS_CC}" --with-config=kernel --with-linux=$(realpath ${KERNEL_SRC}) --with-linux-obj=$(realpath ${KERNEL_SRC})
dh_auto_build -D ${ZFS_SRC}
override_dh_auto_install: debian/SOURCE .install_mark .tools_install_mark .headers_install_mark .usr_headers_install_mark
dh_installdocs -A debian/copyright debian/SOURCE
dh_installchangelogs
dh_installman
dh_strip_nondeterminism
dh_compress
dh_fixperms
override_dh_auto_clean: debian/control
dh_clean
dh_auto_clean -D ${KERNEL_SRC}
dh_auto_clean -D ${ZFS_SRC}
rm -f ${PVE_KERNEL_TEMPLATES} ${PVE_HEADER_TEMPLATES}
rm -f debian/SOURCE debian/*.tmp .*_mark
## Kernel
PVE_KERNEL_TEMPLATES := $(patsubst debian/templates/pve-kernel.%.in, debian/${PVE_KERNEL_PKG}.%, $(wildcard debian/templates/pve-kernel.*.in))
${KERNEL_SRC}/.config:
python3 ${KERNEL_SRC}/debian/scripts/misc/annotations -f ${KERNEL_SRC}/debian.master/config/annotations -a ${DEB_BUILD_ARCH} --export > ${KERNEL_SRC}/debian.master/config/config.ubuntu
${KERNEL_SRC}/scripts/kconfig/merge_config.sh -m \
-O ${KERNEL_SRC} \
${KERNEL_SRC}/debian.master/config/config.ubuntu \
debian/config/config.pve
${MAKE} -C ${KERNEL_SRC} CC=${PVE_KERNEL_CC} olddefconfig
debian/${PVE_KERNEL_PKG}.%: debian/templates/pve-kernel.%.in
sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/templates/pve-kernel.$*.in > debian/${PVE_KERNEL_PKG}.$*
chmod +x debian/${PVE_KERNEL_PKG}.$*
.install_mark: ${PVE_KERNEL_TEMPLATES}
rm -rf debian/${PVE_KERNEL_PKG}
mkdir -p debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}
mkdir debian/${PVE_KERNEL_PKG}/boot
install -m 644 ${KERNEL_SRC}/.config debian/${PVE_KERNEL_PKG}/boot/config-${KVNAME}
install -m 644 ${KERNEL_SRC}/System.map debian/${PVE_KERNEL_PKG}/boot/System.map-${KVNAME}
install -m 644 ${KERNEL_SRC}/${KERNEL_IMAGE_PATH} debian/${PVE_KERNEL_PKG}/boot/${KERNEL_INSTALL_FILE}-${KVNAME}
${MAKE} -C ${KERNEL_SRC} INSTALL_MOD_PATH=${BUILD_DIR}/debian/${PVE_KERNEL_PKG}/ modules_install
# install zfs drivers
install -d -m 0755 debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/avl/zavl.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/nvpair/znvpair.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/unicode/zunicode.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/zcommon/zcommon.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/icp/icp.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/zfs/zfs.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/lua/zlua.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/spl/spl.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
install -m 644 ${ZFS_SRC}/module/zstd/zzstd.ko debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/zfs
# remove firmware
rm -rf debian/${PVE_KERNEL_PKG}/lib/firmware
# strip debug info
find debian/${PVE_KERNEL_PKG}/lib/modules -name \*.ko -print | while read f ; do strip --strip-debug "$$f"; done
# finalize
/sbin/depmod -b debian/${PVE_KERNEL_PKG}/ ${KVNAME}
# Autogenerate blacklist for watchdog devices (see README)
install -m 0755 -d debian/${PVE_KERNEL_PKG}/lib/modprobe.d
ls debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/kernel/drivers/watchdog/ > debian/watchdog-blacklist.tmp
echo ipmi_watchdog.ko >> debian/watchdog-blacklist.tmp
cat debian/watchdog-blacklist.tmp | sed -e 's/^/blacklist /' -e 's/.ko$$//' | sort -u > debian/${PVE_KERNEL_PKG}/lib/modprobe.d/blacklist_${PVE_KERNEL_PKG}.conf
rm -f debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/source
rm -f debian/${PVE_KERNEL_PKG}/lib/modules/${KVNAME}/build
touch $@
## Kernel tools
.tools_compile_mark:
dh_auto_build -D ${KERNEL_SRC}/tools/perf -- prefix=/usr \
HAVE_NO_LIBBFD=1 \
HAVE_CPLUS_DEMANGLE_SUPPORT=1 \
NO_LIBPYTHON=1 \
NO_LIBPERL=1 \
NO_LIBCRYPTO=1 \
PYTHON=python3
echo "checking GPL-2 only perf binary for library linkage with incompatible licenses.."
! ldd ${KERNEL_SRC}/tools/perf/perf | grep -q -E '\blibbfd'
! ldd ${KERNEL_SRC}/tools/perf/perf | grep -q -E '\blibcrypto'
${MAKE} -C ${KERNEL_SRC}/tools/perf man
touch $@
.tools_install_mark: .tools_compile_mark
rm -rf debian/${LINUX_TOOLS_PKG}
mkdir -p debian/${LINUX_TOOLS_PKG}/usr/bin
mkdir -p debian/${LINUX_TOOLS_PKG}/usr/share/man/man1
install -m 755 ${BUILD_DIR}/${KERNEL_SRC}/tools/perf/perf debian/${LINUX_TOOLS_PKG}/usr/bin/perf_$(KERNEL_MAJMIN)
for i in ${BUILD_DIR}/${KERNEL_SRC}/tools/perf/Documentation/*.1; do \
fname="$${i##*/}"; manname="$${fname%.1}"; \
install -m644 "$$i" "debian/${LINUX_TOOLS_PKG}/usr/share/man/man1/$${manname}_$(KERNEL_MAJMIN).1"; \
done
touch $@
## Headers
PVE_HEADER_TEMPLATES := $(patsubst debian/templates/pve-headers.%.in, debian/${PVE_HEADER_PKG}.%, $(wildcard debian/templates/pve-headers.*.in))
debian/${PVE_HEADER_PKG}.%: debian/templates/pve-headers.%.in
sed -e 's/@@KVNAME@@/${KVNAME}/g' < debian/templates/pve-headers.$*.in > debian/${PVE_HEADER_PKG}.$*
chmod +x debian/${PVE_HEADER_PKG}.$*
.headers_install_mark: ${PVE_HEADER_TEMPLATES}
rm -rf debian/${PVE_HEADER_PKG}
mkdir -p debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
install -m 0644 ${KERNEL_SRC}/.config debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
( \
cd ${KERNEL_SRC}; \
find . -path './debian/*' -prune \
-o -path './include/*' -prune \
-o -path './scripts' -prune \
-o -type f \
\( \
-name 'Makefile*' \
-o -name 'Kconfig*' \
-o -name 'Kbuild*' \
-o -name '*.sh' \
-o -name '*.pl' \
\) \
-print; \
find include scripts -type f -o -type l; \
find arch/${KERNEL_BUILD_ARCH} -maxdepth 1 -name Makefile\*; \
find arch/${KERNEL_BUILD_ARCH} -name module.lds -o -name Kbuild.platforms -o -name Platform; \
find $$(find arch/${KERNEL_BUILD_ARCH} -name include -o -name scripts -type d) -type f; \
find arch/${KERNEL_BUILD_ARCH}/include Module.symvers include scripts -type f; \
find tools/ -name 'objtool' -type f \
) | rsync -avq --files-from=- ${KERNEL_SRC} debian/${PVE_HEADER_PKG}/usr/src/linux-headers-${KVNAME}
mkdir -p debian/${PVE_HEADER_PKG}/lib/modules/${KVNAME}
ln -sf /usr/src/linux-headers-${KVNAME} debian/${PVE_HEADER_PKG}/lib/modules/${KVNAME}/build
touch $@
## User-space headers
.usr_headers_install_mark: PKG_DIR = debian/${PVE_USR_HEADER_PKG}
.usr_headers_install_mark: OUT_DIR = ${PKG_DIR}/usr
.usr_headers_install_mark:
rm -rf '${PKG_DIR}'
mkdir -p '${PKG_DIR}'
$(MAKE) -C ${KERNEL_SRC} headers_install ARCH=$(KERNEL_HEADER_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR)
rm -rf $(OUT_DIR)/include/drm $(OUT_DIR)/include/scsi
find $(OUT_DIR)/include \( -name .install -o -name ..install.cmd \) -execdir rm {} +
# Move include/asm to arch-specific directory
mkdir -p $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)
mv $(OUT_DIR)/include/asm $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
test ! -d $(OUT_DIR)/include/arch || \
mv $(OUT_DIR)/include/arch $(OUT_DIR)/include/$(DEB_HOST_MULTIARCH)/
touch $@