xref: /linux/scripts/package/PKGBUILD (revision e6b65ee10588a552d04d488ebeac24bba20747a8)
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}
6*e6b65ee1SJose Fernandezpkgname=("${pkgbase}")
7*e6b65ee1SJose Fernandez
8*e6b65ee1SJose Fernandez_extrapackages=${PACMAN_EXTRAPACKAGES-headers api-headers}
9*e6b65ee1SJose Fernandezfor pkg in $_extrapackages; do
10*e6b65ee1SJose Fernandez	pkgname+=("${pkgbase}-${pkg}")
11*e6b65ee1SJose Fernandezdone
12*e6b65ee1SJose 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	cpio
26c8578539SThomas Weißschuh	flex
27c8578539SThomas Weißschuh	gettext
28c8578539SThomas Weißschuh	kmod
29c8578539SThomas Weißschuh	libelf
30c8578539SThomas Weißschuh	openssl
31c8578539SThomas Weißschuh	pahole
32c8578539SThomas Weißschuh	perl
33c8578539SThomas Weißschuh	python
34c8578539SThomas Weißschuh	rsync
35c8578539SThomas Weißschuh	tar
36c8578539SThomas Weißschuh)
37c8578539SThomas Weißschuhoptions=(!debug !strip !buildflags !makeflags)
38c8578539SThomas Weißschuh
39c8578539SThomas Weißschuhbuild() {
40c8578539SThomas Weißschuh	# MAKEFLAGS from makepkg.conf override the ones inherited from kbuild.
41c8578539SThomas Weißschuh	# Bypass this override with a custom variable.
42c8578539SThomas Weißschuh	export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
43c8578539SThomas Weißschuh	cd "${objtree}"
44c8578539SThomas Weißschuh
45c8578539SThomas Weißschuh	${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}"
46c8578539SThomas Weißschuh}
47c8578539SThomas Weißschuh
48c8578539SThomas Weißschuh_package() {
49c8578539SThomas Weißschuh	pkgdesc="The ${pkgdesc} kernel and modules"
50c8578539SThomas Weißschuh
51c8578539SThomas Weißschuh	export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
52c8578539SThomas Weißschuh	cd "${objtree}"
53c8578539SThomas Weißschuh	local modulesdir="${pkgdir}/usr/${MODLIB}"
54c8578539SThomas Weißschuh
55c8578539SThomas Weißschuh	echo "Installing boot image..."
56c8578539SThomas Weißschuh	# systemd expects to find the kernel here to allow hibernation
57c8578539SThomas Weißschuh	# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
58c8578539SThomas Weißschuh	install -Dm644 "$(${MAKE} -s image_name)" "${modulesdir}/vmlinuz"
59c8578539SThomas Weißschuh
60c8578539SThomas Weißschuh	# Used by mkinitcpio to name the kernel
61c8578539SThomas Weißschuh	echo "${pkgbase}" > "${modulesdir}/pkgbase"
62c8578539SThomas Weißschuh
63c8578539SThomas Weißschuh	echo "Installing modules..."
64c8578539SThomas Weißschuh	${MAKE} INSTALL_MOD_PATH="${pkgdir}/usr" INSTALL_MOD_STRIP=1 \
65c8578539SThomas Weißschuh		DEPMOD=true modules_install
66c8578539SThomas Weißschuh
67c8578539SThomas Weißschuh	if [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; then
68c8578539SThomas Weißschuh		echo "Installing dtbs..."
69c8578539SThomas Weißschuh		${MAKE} INSTALL_DTBS_PATH="${modulesdir}/dtb" dtbs_install
70c8578539SThomas Weißschuh	fi
71c8578539SThomas Weißschuh
72c8578539SThomas Weißschuh	# remove build link, will be part of -headers package
73c8578539SThomas Weißschuh	rm -f "${modulesdir}/build"
74c8578539SThomas Weißschuh}
75c8578539SThomas Weißschuh
76c8578539SThomas Weißschuh_package-headers() {
77c8578539SThomas Weißschuh	pkgdesc="Headers and scripts for building modules for the ${pkgdesc} kernel"
78c8578539SThomas Weißschuh
79c8578539SThomas Weißschuh	export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
80c8578539SThomas Weißschuh	cd "${objtree}"
81c8578539SThomas Weißschuh	local builddir="${pkgdir}/usr/${MODLIB}/build"
82c8578539SThomas Weißschuh
83*e6b65ee1SJose Fernandez	if grep -q CONFIG_MODULES=y include/config/auto.conf; then
84c8578539SThomas Weißschuh		echo "Installing build files..."
85c8578539SThomas Weißschuh		"${srctree}/scripts/package/install-extmod-build" "${builddir}"
86*e6b65ee1SJose Fernandez	fi
87c8578539SThomas Weißschuh
88c8578539SThomas Weißschuh	echo "Installing System.map and config..."
89*e6b65ee1SJose Fernandez	mkdir -p "${builddir}"
90c8578539SThomas Weißschuh	cp System.map "${builddir}/System.map"
91c8578539SThomas Weißschuh	cp .config "${builddir}/.config"
92c8578539SThomas Weißschuh
93c8578539SThomas Weißschuh	echo "Adding symlink..."
94c8578539SThomas Weißschuh	mkdir -p "${pkgdir}/usr/src"
95c8578539SThomas Weißschuh	ln -sr "${builddir}" "${pkgdir}/usr/src/${pkgbase}"
96c8578539SThomas Weißschuh}
97c8578539SThomas Weißschuh
98c8578539SThomas Weißschuh_package-api-headers() {
99c8578539SThomas Weißschuh	pkgdesc="Kernel headers sanitized for use in userspace"
100c8578539SThomas Weißschuh	provides=(linux-api-headers)
101c8578539SThomas Weißschuh	conflicts=(linux-api-headers)
102c8578539SThomas Weißschuh
103c8578539SThomas Weißschuh	export MAKEFLAGS="${KBUILD_MAKEFLAGS}"
104c8578539SThomas Weißschuh	cd "${objtree}"
105c8578539SThomas Weißschuh
106c8578539SThomas Weißschuh	${MAKE} headers_install INSTALL_HDR_PATH="${pkgdir}/usr"
107c8578539SThomas Weißschuh}
108c8578539SThomas Weißschuh
109c8578539SThomas Weißschuhfor _p in "${pkgname[@]}"; do
110c8578539SThomas Weißschuh	eval "package_$_p() {
111c8578539SThomas Weißschuh		$(declare -f "_package${_p#$pkgbase}")
112c8578539SThomas Weißschuh		_package${_p#$pkgbase}
113c8578539SThomas Weißschuh	}"
114c8578539SThomas Weißschuhdone
115