xref: /linux/scripts/package/PKGBUILD (revision 4f9786035f9e519db41375818e1d0b5f20da2f10)
1c8578539SThomas Weißschuh# SPDX-License-Identifier: GPL-2.0-only
2c8578539SThomas Weißschuh# Maintainer: Thomas Weißschuh <linux@weissschuh.net>
3c8578539SThomas Weißschuh# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
4c8578539SThomas Weißschuh
5c8578539SThomas Weißschuhpkgbase=${PACMAN_PKGBASE:-linux-upstream}
6e6b65ee1SJose Fernandezpkgname=("${pkgbase}")
7e6b65ee1SJose Fernandez
84929f5b9SJose Fernandez_extrapackages=${PACMAN_EXTRAPACKAGES-headers api-headers debug}
9e6b65ee1SJose Fernandezfor pkg in $_extrapackages; do
10e6b65ee1SJose Fernandez	pkgname+=("${pkgbase}-${pkg}")
11e6b65ee1SJose Fernandezdone
12e6b65ee1SJose Fernandez
13c8578539SThomas Weißschuhpkgver="${KERNELRELEASE//-/_}"
14c8578539SThomas Weißschuh# The PKGBUILD is evaluated multiple times.
15c8578539SThomas Weißschuh# Running scripts/build-version from here would introduce inconsistencies.
16c8578539SThomas Weißschuhpkgrel="${KBUILD_REVISION}"
17c8578539SThomas Weißschuhpkgdesc='Upstream Linux'
18c8578539SThomas Weißschuhurl='https://www.kernel.org/'
19c8578539SThomas Weißschuh# Enable flexible cross-compilation
20c8578539SThomas Weißschuharch=(${CARCH})
21c8578539SThomas Weißschuhlicense=(GPL-2.0-only)
22c8578539SThomas Weißschuhmakedepends=(
23c8578539SThomas Weißschuh	bc
24c8578539SThomas Weißschuh	bison
25c8578539SThomas Weißschuh	flex
26c8578539SThomas Weißschuh	gettext
27c8578539SThomas Weißschuh	kmod
28c8578539SThomas Weißschuh	libelf
29c8578539SThomas Weißschuh	openssl
30c8578539SThomas Weißschuh	pahole
31c8578539SThomas Weißschuh	perl
32c8578539SThomas Weißschuh	python
33c8578539SThomas Weißschuh	rsync
34c8578539SThomas Weißschuh	tar
35c8578539SThomas Weißschuh)
36c8578539SThomas Weißschuhoptions=(!debug !strip !buildflags !makeflags)
37c8578539SThomas Weißschuh
38b6223c2dSMasahiro Yamada_prologue() {
39c8578539SThomas Weißschuh	# MAKEFLAGS from makepkg.conf override the ones inherited from kbuild.
40c8578539SThomas Weißschuh	# Bypass this override with a custom variable.
41c8578539SThomas Weißschuh	export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
425b000f3cSMasahiro Yamada
435b000f3cSMasahiro Yamada	# Kbuild works in the output directory, where this PKGBUILD is located.
445b000f3cSMasahiro Yamada	cd "$(dirname "${BASH_SOURCE[0]}")"
45b6223c2dSMasahiro Yamada}
46b6223c2dSMasahiro Yamada
47b6223c2dSMasahiro Yamadabuild() {
48b6223c2dSMasahiro Yamada	_prologue
49c8578539SThomas Weißschuh
50c8578539SThomas Weißschuh	${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}"
51c8578539SThomas Weißschuh}
52c8578539SThomas Weißschuh
53c8578539SThomas Weißschuh_package() {
54c8578539SThomas Weißschuh	pkgdesc="The ${pkgdesc} kernel and modules"
55c8578539SThomas Weißschuh
56*8bdd53e0SMasahiro Yamada	local modulesdir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}"
57c8578539SThomas Weißschuh
58b6223c2dSMasahiro Yamada	_prologue
59b6223c2dSMasahiro Yamada
60c8578539SThomas Weißschuh	echo "Installing boot image..."
61c8578539SThomas Weißschuh	# systemd expects to find the kernel here to allow hibernation
62c8578539SThomas Weißschuh	# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
63c8578539SThomas Weißschuh	install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz"
64c8578539SThomas Weißschuh
65c8578539SThomas Weißschuh	# Used by mkinitcpio to name the kernel
66c8578539SThomas Weißschuh	echo "${pkgbase}" > "${modulesdir}/pkgbase"
67c8578539SThomas Weißschuh
68c8578539SThomas Weißschuh	echo "Installing modules..."
69c8578539SThomas Weißschuh	${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \
70c8578539SThomas Weißschuh		DEPMOD=true modules_install
71c8578539SThomas Weißschuh
72c8578539SThomas Weißschuh	if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then
73c8578539SThomas Weißschuh		echo "Installing dtbs..."
74c8578539SThomas Weißschuh		${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install
75c8578539SThomas Weißschuh	fi
76c8578539SThomas Weißschuh
77c8578539SThomas Weißschuh	# remove build link, will be part of -headers package
78c8578539SThomas Weißschuh	rm -f "${modulesdir}/build"
79c8578539SThomas Weißschuh}
80c8578539SThomas Weißschuh
81c8578539SThomas Weißschuh_package-headers() {
82c8578539SThomas Weißschuh	pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel"
83c8578539SThomas Weißschuh
84*8bdd53e0SMasahiro Yamada	local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
85c8578539SThomas Weißschuh
86b6223c2dSMasahiro Yamada	_prologue
87b6223c2dSMasahiro Yamada
88e6b65ee1SJose Fernandez	if grep -q CONFIG_MODULES=y include/config/auto.conf; then
89c8578539SThomas Weißschuh		echo "Installing build files..."
90c8578539SThomas Weißschuh		"${srctree}/scripts/package/install-extmod-build" "${builddir}"
91e6b65ee1SJose Fernandez	fi
92c8578539SThomas Weißschuh
93c8578539SThomas Weißschuh	echo "Installing System.map and config..."
94e6b65ee1SJose Fernandez	mkdir -p "${builddir}"
95c8578539SThomas Weißschuh	cp System.map "${builddir}/System.map"
96c8578539SThomas Weißschuh	cp .config "${builddir}/.config"
97c8578539SThomas Weißschuh
98c8578539SThomas Weißschuh	echo "Adding symlink..."
99c8578539SThomas Weißschuh	mkdir -p "${pkgdir}/usr/src"
100c8578539SThomas Weißschuh	ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}"
101c8578539SThomas Weißschuh}
102c8578539SThomas Weißschuh
103c8578539SThomas Weißschuh_package-api-headers() {
104c8578539SThomas Weißschuh	pkgdesc="Kernel headers sanitized for use in userspace"
10538544305SThomas Weißschuh	provides=(linux-api-headers="${pkgver}")
106c8578539SThomas Weißschuh	conflicts=(linux-api-headers)
107c8578539SThomas Weißschuh
108b6223c2dSMasahiro Yamada	_prologue
109c8578539SThomas Weißschuh
110c8578539SThomas Weißschuh	${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr"
111c8578539SThomas Weißschuh}
112c8578539SThomas Weißschuh
1134929f5b9SJose Fernandez_package-debug(){
1144929f5b9SJose Fernandez	pkgdesc="Non-stripped vmlinux file for the ${pkgdesc} kernel"
1154929f5b9SJose Fernandez
1164929f5b9SJose Fernandez	local debugdir="${pkgdir}/usr/src/debug/${pkgbase}"
117*8bdd53e0SMasahiro Yamada	local builddir="${pkgdir}/usr/lib/modules/${KERNELRELEASE}/build"
1184929f5b9SJose Fernandez
1194929f5b9SJose Fernandez	_prologue
1204929f5b9SJose Fernandez
1214929f5b9SJose Fernandez	install -Dt "${debugdir}" -m644 vmlinux
1224929f5b9SJose Fernandez	mkdir -p "${builddir}"
1234929f5b9SJose Fernandez	ln -sr "${debugdir}/vmlinux" "${builddir}/vmlinux"
1244929f5b9SJose Fernandez}
1254929f5b9SJose Fernandez
126c8578539SThomas Weißschuhfor _p in "${pkgname[@]}"; do
127c8578539SThomas Weißschuh	eval "package_$_p() {
128c8578539SThomas Weißschuh		$(declare -f "_package${_p#$pkgbase}")
129c8578539SThomas Weißschuh		_package${_p#$pkgbase}
130c8578539SThomas Weißschuh	}"
131c8578539SThomas Weißschuhdone
132