Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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/lib/modules/${KERNELRELEASE}"
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/lib/modules/${KERNELRELEASE}/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/lib/modules/${KERNELRELEASE}/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