|
| 1 | +# SPDX-License-Identifier: GPL-2.0-only |
| 2 | +# Maintainer: Thomas Weißschuh <linux@weissschuh.net> |
| 3 | +# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org> |
| 4 | + |
| 5 | +pkgbase=${PACMAN_PKGBASE:-linux-upstream} |
| 6 | +pkgname=("${pkgbase}" "${pkgbase}-api-headers") |
| 7 | +if grep -q CONFIG_MODULES=y include/config/auto.conf; then |
| 8 | + pkgname+=("${pkgbase}-headers") |
| 9 | +fi |
| 10 | +pkgver="${KERNELRELEASE//-/_}" |
| 11 | +# The PKGBUILD is evaluated multiple times. |
| 12 | +# Running scripts/build-version from here would introduce inconsistencies. |
| 13 | +pkgrel="${KBUILD_REVISION}" |
| 14 | +pkgdesc='Upstream Linux' |
| 15 | +url='https://www.kernel.org/' |
| 16 | +# Enable flexible cross-compilation |
| 17 | +arch=(${CARCH}) |
| 18 | +license=(GPL-2.0-only) |
| 19 | +makedepends=( |
| 20 | + bc |
| 21 | + bison |
| 22 | + cpio |
| 23 | + flex |
| 24 | + gettext |
| 25 | + kmod |
| 26 | + libelf |
| 27 | + openssl |
| 28 | + pahole |
| 29 | + perl |
| 30 | + python |
| 31 | + rsync |
| 32 | + tar |
| 33 | +) |
| 34 | +options=(!debug !strip !buildflags !makeflags) |
| 35 | + |
| 36 | +build() { |
| 37 | + # MAKEFLAGS from makepkg.conf override the ones inherited from kbuild. |
| 38 | + # Bypass this override with a custom variable. |
| 39 | + export MAKEFLAGS="${KBUILD_MAKEFLAGS}" |
| 40 | + cd "${objtree}" |
| 41 | + |
| 42 | + ${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}" |
| 43 | +} |
| 44 | + |
| 45 | +_package() { |
| 46 | + pkgdesc="The ${pkgdesc} kernel and modules" |
| 47 | + |
| 48 | + export MAKEFLAGS="${KBUILD_MAKEFLAGS}" |
| 49 | + cd "${objtree}" |
| 50 | + local modulesdir="${pkgdir}/usr/${MODLIB}" |
| 51 | + |
| 52 | + echo "Installing boot image..." |
| 53 | + # systemd expects to find the kernel here to allow hibernation |
| 54 | + # https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344 |
| 55 | + install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz" |
| 56 | + |
| 57 | + # Used by mkinitcpio to name the kernel |
| 58 | + echo "${pkgbase}" > "${modulesdir}/pkgbase" |
| 59 | + |
| 60 | + echo "Installing modules..." |
| 61 | + ${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \ |
| 62 | + DEPMOD=true modules_install |
| 63 | + |
| 64 | + if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then |
| 65 | + echo "Installing dtbs..." |
| 66 | + ${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install |
| 67 | + fi |
| 68 | + |
| 69 | + # remove build link, will be part of -headers package |
| 70 | + rm -f "${modulesdir}/build" |
| 71 | +} |
| 72 | + |
| 73 | +_package-headers() { |
| 74 | + pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel" |
| 75 | + |
| 76 | + export MAKEFLAGS="${KBUILD_MAKEFLAGS}" |
| 77 | + cd "${objtree}" |
| 78 | + local builddir="${pkgdir}/usr/${MODLIB}/build" |
| 79 | + |
| 80 | + echo "Installing build files..." |
| 81 | + "${srctree}/scripts/package/install-extmod-build" "${builddir}" |
| 82 | + |
| 83 | + echo "Installing System.map and config..." |
| 84 | + cp System.map "${builddir}/System.map" |
| 85 | + cp .config "${builddir}/.config" |
| 86 | + |
| 87 | + echo "Adding symlink..." |
| 88 | + mkdir -p "${pkgdir}/usr/src" |
| 89 | + ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}" |
| 90 | +} |
| 91 | + |
| 92 | +_package-api-headers() { |
| 93 | + pkgdesc="Kernel headers sanitized for use in userspace" |
| 94 | + provides=(linux-api-headers) |
| 95 | + conflicts=(linux-api-headers) |
| 96 | + |
| 97 | + export MAKEFLAGS="${KBUILD_MAKEFLAGS}" |
| 98 | + cd "${objtree}" |
| 99 | + |
| 100 | + ${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr" |
| 101 | +} |
| 102 | + |
| 103 | +for _p in "${pkgname[@]}"; do |
| 104 | + eval "package_$_p() { |
| 105 | + $(declare -f "_package${_p#$pkgbase}") |
| 106 | + _package${_p#$pkgbase} |
| 107 | + }" |
| 108 | +done |
0 commit comments