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