# 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}")
_extrapackages=${PACMAN_EXTRAPACKAGES-headers api-headers debug}
for pkg in $_extrapackages;
do
pkgname+=(
"${pkgbase}-${pkg}")
done
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
flex
gettext
kmod
libelf
openssl
pahole
perl
python
rsync
tar
)
options=(!debug !strip !buildflags !makeflags)
_prologue() {
# MAKEFLAGS from makepkg.conf override the ones inherited from kbuild.
# Bypass
this override with a custom variable.
export MAKEFLAGS=
"${KBUILD_MAKEFLAGS}"
# Kbuild works in the output directory, where
this PKGBUILD is located.
cd
"$(dirname "${BASH_SOURCE[0]}
")"
}
build() {
_prologue
${MAKE} KERNELRELEASE=
"${KERNELRELEASE}" KBUILD_BUILD_VERSION=
"${pkgrel}"
}
_package() {
pkgdesc=
"The ${pkgdesc} kernel and modules"
local modulesdir=
"${pkgdir}/usr/lib/modules/${KERNELRELEASE}"
_prologue
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"
local builddir=
"${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
_prologue
if grep -q CONFIG_MODULES=y include/config/
auto.conf; then
echo
"Installing build files..."
"${srctree}/scripts/package/install-extmod-build" "${builddir}"
fi
echo
"Installing System.map and config..."
mkdir -p
"${builddir}"
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=
"${pkgver}")
conflicts=(linux-api-headers)
_prologue
${MAKE} headers_install INSTALL_HDR_PATH=
"${pkgdir}/usr"
}
_package-debug(){
pkgdesc=
"Non-stripped vmlinux file for the ${pkgdesc} kernel"
local debugdir=
"${pkgdir}/usr/src/debug/${pkgbase}"
local builddir=
"${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
_prologue
install -Dt
"${debugdir}" -m644 vmlinux
mkdir -p
"${builddir}"
ln -sr
"${debugdir}/vmlinux" "${builddir}/vmlinux"
}
for _p in
"${pkgname[@]}";
do
eval
"package_$_p() {
$(declare -f
"_package${_p#$pkgbase}")
_package${_p
#$pkgbase}
}
"
done