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