-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
kbuild: add script and target to generate pacman package
pacman is the package manager used by Arch Linux and its derivates. Creating native packages from the kernel tree has multiple advantages: * The package triggers the correct hooks for initramfs generation and bootloader configuration * Uninstallation is complete and also invokes the relevant hooks * New UAPI headers can be installed without any manual bookkeeping The PKGBUILD file is a modified version of the one used for the downstream Arch Linux "linux" package. Extra steps that should not be necessary for a development kernel have been removed and an UAPI header package has been added. Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Reviewed-by: Nathan Chancellor <nathan@kernel.org> Tested-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
- Loading branch information
Thomas Weißschuh
authored and
Masahiro Yamada
committed
Jul 21, 2024
1 parent
3554a45
commit c857853
Showing
5 changed files
with
136 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
# SPDX-License-Identifier: GPL-2.0-only | ||
# Maintainer: Thomas Weißschuh <linux@weissschuh.net> | ||
# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org> | ||
|
||
pkgbase=${PACMAN_PKGBASE:-linux-upstream} | ||
pkgname=("${pkgbase}" "${pkgbase}-api-headers") | ||
if grep -q CONFIG_MODULES=y include/config/auto.conf; then | ||
pkgname+=("${pkgbase}-headers") | ||
fi | ||
pkgver="${KERNELRELEASE//-/_}" | ||
# The PKGBUILD is evaluated multiple times. | ||
# Running scripts/build-version from here would introduce inconsistencies. | ||
pkgrel="${KBUILD_REVISION}" | ||
pkgdesc='Upstream Linux' | ||
url='https://www.kernel.org/' | ||
# Enable flexible cross-compilation | ||
arch=(${CARCH}) | ||
license=(GPL-2.0-only) | ||
makedepends=( | ||
bc | ||
bison | ||
cpio | ||
flex | ||
gettext | ||
kmod | ||
libelf | ||
openssl | ||
pahole | ||
perl | ||
python | ||
rsync | ||
tar | ||
) | ||
options=(!debug !strip !buildflags !makeflags) | ||
|
||
build() { | ||
# MAKEFLAGS from makepkg.conf override the ones inherited from kbuild. | ||
# Bypass this override with a custom variable. | ||
export MAKEFLAGS="${KBUILD_MAKEFLAGS}" | ||
cd "${objtree}" | ||
|
||
${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}" | ||
} | ||
|
||
_package() { | ||
pkgdesc="The ${pkgdesc} kernel and modules" | ||
|
||
export MAKEFLAGS="${KBUILD_MAKEFLAGS}" | ||
cd "${objtree}" | ||
local modulesdir="${pkgdir}/usr/${MODLIB}" | ||
|
||
echo "Installing boot image..." | ||
# systemd expects to find the kernel here to allow hibernation | ||
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344 | ||
install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz" | ||
|
||
# Used by mkinitcpio to name the kernel | ||
echo "${pkgbase}" > "${modulesdir}/pkgbase" | ||
|
||
echo "Installing modules..." | ||
${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \ | ||
DEPMOD=true modules_install | ||
|
||
if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then | ||
echo "Installing dtbs..." | ||
${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install | ||
fi | ||
|
||
# remove build link, will be part of -headers package | ||
rm -f "${modulesdir}/build" | ||
} | ||
|
||
_package-headers() { | ||
pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel" | ||
|
||
export MAKEFLAGS="${KBUILD_MAKEFLAGS}" | ||
cd "${objtree}" | ||
local builddir="${pkgdir}/usr/${MODLIB}/build" | ||
|
||
echo "Installing build files..." | ||
"${srctree}/scripts/package/install-extmod-build" "${builddir}" | ||
|
||
echo "Installing System.map and config..." | ||
cp System.map "${builddir}/System.map" | ||
cp .config "${builddir}/.config" | ||
|
||
echo "Adding symlink..." | ||
mkdir -p "${pkgdir}/usr/src" | ||
ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}" | ||
} | ||
|
||
_package-api-headers() { | ||
pkgdesc="Kernel headers sanitized for use in userspace" | ||
provides=(linux-api-headers) | ||
conflicts=(linux-api-headers) | ||
|
||
export MAKEFLAGS="${KBUILD_MAKEFLAGS}" | ||
cd "${objtree}" | ||
|
||
${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr" | ||
} | ||
|
||
for _p in "${pkgname[@]}"; do | ||
eval "package_$_p() { | ||
$(declare -f "_package${_p#$pkgbase}") | ||
_package${_p#$pkgbase} | ||
}" | ||
done |