| # 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="$(echo "${KERNELRELEASE}" | sed 's/-\(rc[0-9]\+\)/\1/;s/-/_/g')" | |
| # 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" | |
| echo "Installing unstripped vDSO(s)..." | |
| ${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" vdso_install | |
| } | |
| for _p in "${pkgname[@]}"; do | |
| eval "package_$_p() { | |
| $(declare -f "_package${_p#$pkgbase}") | |
| _package${_p#$pkgbase} | |
| }" | |
| done |