# SPDX-License-Identifier: GPL-2.0-only # Maintainer: Thomas Weißschuh # Contributor: Jan Alexander Steffens (heftig) 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 cpio 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/${MODLIB}" _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/${MODLIB}/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) 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/${MODLIB}/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