xref: /linux/scripts/package/PKGBUILD (revision 2a6b6c9a226279b4f6668450ddb21ae655558087)
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}" "${pkgbase}-api-headers")
7if grep -q CONFIG_MODULES=y include/config/auto.conf; then
8	pkgname+=("${pkgbase}-headers")
9fi
10pkgver="${KERNELRELEASE//-/_}"
11# The PKGBUILD is evaluated multiple times.
12# Running scripts/build-version from here would introduce inconsistencies.
13pkgrel="${KBUILD_REVISION}"
14pkgdesc='Upstream Linux'
15url='https://www.kernel.org/'
16# Enable flexible cross-compilation
17arch=(${CARCH})
18license=(GPL-2.0-only)
19makedepends=(
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)
34options=(!debug !strip !buildflags !makeflags)
35
36build() {
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
103for _p in "${pkgname[@]}"; do
104	eval "package_$_p() {
105		$(declare -f "_package${_p#$pkgbase}")
106		_package${_p#$pkgbase}
107	}"
108done
109