| # 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 |
| 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 |