xref: /linux-6.15/scripts/package/kernel.spec (revision 5bd6bdd0)
149c803cdSMasahiro Yamada# _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
249c803cdSMasahiro Yamada%{!?_arch: %define _arch dummy}
349c803cdSMasahiro Yamada%{!?make: %define make make}
449c803cdSMasahiro Yamada%define makeflags %{?_smp_mflags} ARCH=%{ARCH}
549c803cdSMasahiro Yamada
649c803cdSMasahiro YamadaName: kernel
749c803cdSMasahiro YamadaSummary: The Linux Kernel
849c803cdSMasahiro YamadaVersion: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
949c803cdSMasahiro YamadaRelease: %{pkg_release}
1049c803cdSMasahiro YamadaLicense: GPL
1149c803cdSMasahiro YamadaGroup: System Environment/Kernel
1249c803cdSMasahiro YamadaVendor: The Linux Community
1349c803cdSMasahiro YamadaURL: https://www.kernel.org
1449c803cdSMasahiro YamadaSource0: linux.tar.gz
1549c803cdSMasahiro YamadaSource1: config
1649c803cdSMasahiro YamadaSource2: diff.patch
1749c803cdSMasahiro YamadaProvides: kernel-%{KERNELRELEASE}
1849c803cdSMasahiro YamadaBuildRequires: bc binutils bison dwarves
19*5bd6bdd0SWangYuliBuildRequires: (elfutils-devel or libdw-devel)
2049c803cdSMasahiro YamadaBuildRequires: (elfutils-libelf-devel or libelf-devel) flex
2149c803cdSMasahiro YamadaBuildRequires: gcc make openssl openssl-devel perl python3 rsync
2249c803cdSMasahiro Yamada
2349c803cdSMasahiro Yamada%description
2449c803cdSMasahiro YamadaThe Linux Kernel, the operating system core itself
2549c803cdSMasahiro Yamada
2649c803cdSMasahiro Yamada%package headers
2749c803cdSMasahiro YamadaSummary: Header files for the Linux kernel for use by glibc
2849c803cdSMasahiro YamadaGroup: Development/System
29e61b190bSRafael AquiniObsoletes: kernel-headers < %{version}
3049c803cdSMasahiro YamadaProvides: kernel-headers = %{version}
3149c803cdSMasahiro Yamada%description headers
3249c803cdSMasahiro YamadaKernel-headers includes the C header files that specify the interface
3349c803cdSMasahiro Yamadabetween the Linux kernel and userspace libraries and programs.  The
3449c803cdSMasahiro Yamadaheader files define structures and constants that are needed for
3549c803cdSMasahiro Yamadabuilding most standard programs and are also needed for rebuilding the
3649c803cdSMasahiro Yamadaglibc package.
3749c803cdSMasahiro Yamada
3849c803cdSMasahiro Yamada%if %{with_devel}
3949c803cdSMasahiro Yamada%package devel
4049c803cdSMasahiro YamadaSummary: Development package for building kernel modules to match the %{version} kernel
4149c803cdSMasahiro YamadaGroup: System Environment/Kernel
4249c803cdSMasahiro YamadaAutoReqProv: no
4349c803cdSMasahiro Yamada%description -n kernel-devel
4449c803cdSMasahiro YamadaThis package provides kernel headers and makefiles sufficient to build modules
4549c803cdSMasahiro Yamadaagainst the %{version} kernel package.
4649c803cdSMasahiro Yamada%endif
4749c803cdSMasahiro Yamada
48a7c699d0SUday Shankar%if %{with_debuginfo}
49a7c699d0SUday Shankar# list of debuginfo-related options taken from distribution kernel.spec
50a7c699d0SUday Shankar# files
51a7c699d0SUday Shankar%undefine _include_minidebuginfo
52a7c699d0SUday Shankar%undefine _find_debuginfo_dwz_opts
53a7c699d0SUday Shankar%undefine _unique_build_ids
54a7c699d0SUday Shankar%undefine _unique_debug_names
55a7c699d0SUday Shankar%undefine _unique_debug_srcs
56a7c699d0SUday Shankar%undefine _debugsource_packages
57a7c699d0SUday Shankar%undefine _debuginfo_subpackages
58a7c699d0SUday Shankar%global _find_debuginfo_opts -r
59a7c699d0SUday Shankar%global _missing_build_ids_terminate_build 1
60a7c699d0SUday Shankar%global _no_recompute_build_ids 1
61a7c699d0SUday Shankar%{debug_package}
62a7c699d0SUday Shankar%endif
63a7c699d0SUday Shankar# some (but not all) versions of rpmbuild emit %%debug_package with
64a7c699d0SUday Shankar# %%install. since we've already emitted it manually, that would cause
65a7c699d0SUday Shankar# a package redefinition error. ensure that doesn't happen
66a7c699d0SUday Shankar%define debug_package %{nil}
67a7c699d0SUday Shankar
68a7c699d0SUday Shankar# later, we make all modules executable so that find-debuginfo.sh strips
69a7c699d0SUday Shankar# them up. but they don't actually need to be executable, so remove the
70a7c699d0SUday Shankar# executable bit, taking care to do it _after_ find-debuginfo.sh has run
71a7c699d0SUday Shankar%define __spec_install_post \
72a7c699d0SUday Shankar	%{?__debug_package:%{__debug_install_post}} \
73a7c699d0SUday Shankar	%{__arch_install_post} \
74a7c699d0SUday Shankar	%{__os_install_post} \
75a7c699d0SUday Shankar	find %{buildroot}/lib/modules/%{KERNELRELEASE} -name "*.ko" -type f \\\
76a7c699d0SUday Shankar		| xargs --no-run-if-empty chmod u-x
77a7c699d0SUday Shankar
7849c803cdSMasahiro Yamada%prep
7949c803cdSMasahiro Yamada%setup -q -n linux
8049c803cdSMasahiro Yamadacp %{SOURCE1} .config
8149c803cdSMasahiro Yamadapatch -p1 < %{SOURCE2}
8249c803cdSMasahiro Yamada
8349c803cdSMasahiro Yamada%build
8449c803cdSMasahiro Yamada%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
8549c803cdSMasahiro Yamada
8649c803cdSMasahiro Yamada%install
87358de8b4SJose Ignacio Tornos Martinezmkdir -p %{buildroot}/lib/modules/%{KERNELRELEASE}
88358de8b4SJose Ignacio Tornos Martinezcp $(%{make} %{makeflags} -s image_name) %{buildroot}/lib/modules/%{KERNELRELEASE}/vmlinuz
898d1001f7SMasahiro Yamada# DEPMOD=true makes depmod no-op. We do not package depmod-generated files.
908d1001f7SMasahiro Yamada%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} DEPMOD=true modules_install
9149c803cdSMasahiro Yamada%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
92358de8b4SJose Ignacio Tornos Martinezcp System.map %{buildroot}/lib/modules/%{KERNELRELEASE}
93358de8b4SJose Ignacio Tornos Martinezcp .config %{buildroot}/lib/modules/%{KERNELRELEASE}/config
94097f1200SJose Ignacio Tornos Martinezif %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='test -d ${srctree}/arch/${SRCARCH}/boot/dts' 2>/dev/null; then
95097f1200SJose Ignacio Tornos Martinez	%{make} %{makeflags} INSTALL_DTBS_PATH=%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb dtbs_install
96097f1200SJose Ignacio Tornos Martinezfi
9749c803cdSMasahiro Yamadaln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
9849c803cdSMasahiro Yamada%if %{with_devel}
9949c803cdSMasahiro Yamada%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
10049c803cdSMasahiro Yamada%endif
10149c803cdSMasahiro Yamada
102615b3a3dSMasahiro Yamada{
1038d1001f7SMasahiro Yamada	echo "/lib/modules/%{KERNELRELEASE}"
104615b3a3dSMasahiro Yamada
105615b3a3dSMasahiro Yamada	for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
106d01c1407SJose Ignacio Tornos Martinez				devname softdep symbols symbols.bin weakdep; do
107615b3a3dSMasahiro Yamada		echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
108615b3a3dSMasahiro Yamada	done
109615b3a3dSMasahiro Yamada
110bca17edbSMasahiro Yamada	for x in System.map config vmlinuz; do
111bca17edbSMasahiro Yamada		echo "%ghost /boot/${x}-%{KERNELRELEASE}"
112bca17edbSMasahiro Yamada	done
113bca17edbSMasahiro Yamada
114097f1200SJose Ignacio Tornos Martinez	if [ -d "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" ];then
115097f1200SJose Ignacio Tornos Martinez		find "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" -printf "%%%ghost /boot/dtb-%{KERNELRELEASE}/%%P\n"
116097f1200SJose Ignacio Tornos Martinez	fi
117097f1200SJose Ignacio Tornos Martinez
118615b3a3dSMasahiro Yamada	echo "%exclude /lib/modules/%{KERNELRELEASE}/build"
119615b3a3dSMasahiro Yamada} > %{buildroot}/kernel.list
120615b3a3dSMasahiro Yamada
121a7c699d0SUday Shankar# make modules executable so that find-debuginfo.sh strips them. this
122a7c699d0SUday Shankar# will be undone later in %%__spec_install_post
123a7c699d0SUday Shankarfind %{buildroot}/lib/modules/%{KERNELRELEASE} -name "*.ko" -type f \
124a7c699d0SUday Shankar	| xargs --no-run-if-empty chmod u+x
125a7c699d0SUday Shankar
126a7c699d0SUday Shankar%if %{with_debuginfo}
127a7c699d0SUday Shankar# copying vmlinux directly to the debug directory means it will not get
128a7c699d0SUday Shankar# stripped (but its source paths will still be collected + fixed up)
129a7c699d0SUday Shankarmkdir -p %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
130a7c699d0SUday Shankarcp vmlinux %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
131a7c699d0SUday Shankar%endif
132a7c699d0SUday Shankar
13349c803cdSMasahiro Yamada%clean
13449c803cdSMasahiro Yamadarm -rf %{buildroot}
135a7c699d0SUday Shankarrm -f debugfiles.list debuglinks.list debugsourcefiles.list debugsources.list \
136a7c699d0SUday Shankar	elfbins.list
13749c803cdSMasahiro Yamada
13849c803cdSMasahiro Yamada%post
139358de8b4SJose Ignacio Tornos Martinezif [ -x /usr/bin/kernel-install ]; then
140358de8b4SJose Ignacio Tornos Martinez	/usr/bin/kernel-install add %{KERNELRELEASE} /lib/modules/%{KERNELRELEASE}/vmlinuz
14149c803cdSMasahiro Yamadafi
142358de8b4SJose Ignacio Tornos Martinezfor file in vmlinuz System.map config; do
143358de8b4SJose Ignacio Tornos Martinez	if ! cmp --silent "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"; then
144358de8b4SJose Ignacio Tornos Martinez		cp "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"
145358de8b4SJose Ignacio Tornos Martinez	fi
146358de8b4SJose Ignacio Tornos Martinezdone
147097f1200SJose Ignacio Tornos Martinezif [ -d "/lib/modules/%{KERNELRELEASE}/dtb" ] && \
148097f1200SJose Ignacio Tornos Martinez   ! diff -rq "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}" >/dev/null 2>&1; then
149097f1200SJose Ignacio Tornos Martinez	rm -rf "/boot/dtb-%{KERNELRELEASE}"
150097f1200SJose Ignacio Tornos Martinez	cp -r "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}"
151097f1200SJose Ignacio Tornos Martinezfi
152615b3a3dSMasahiro Yamadaif [ ! -e "/lib/modules/%{KERNELRELEASE}/modules.dep" ]; then
153615b3a3dSMasahiro Yamada	/usr/sbin/depmod %{KERNELRELEASE}
154615b3a3dSMasahiro Yamadafi
15549c803cdSMasahiro Yamada
15649c803cdSMasahiro Yamada%preun
157fee9b6d1SMasahiro Yamadaif [ -x /usr/bin/kernel-install ]; then
15849c803cdSMasahiro Yamadakernel-install remove %{KERNELRELEASE}
15949c803cdSMasahiro Yamadafi
16049c803cdSMasahiro Yamada
161615b3a3dSMasahiro Yamada%files -f %{buildroot}/kernel.list
16249c803cdSMasahiro Yamada%defattr (-, root, root)
163615b3a3dSMasahiro Yamada%exclude /kernel.list
16449c803cdSMasahiro Yamada
16549c803cdSMasahiro Yamada%files headers
16649c803cdSMasahiro Yamada%defattr (-, root, root)
16749c803cdSMasahiro Yamada/usr/include
16849c803cdSMasahiro Yamada
16949c803cdSMasahiro Yamada%if %{with_devel}
17049c803cdSMasahiro Yamada%files devel
17149c803cdSMasahiro Yamada%defattr (-, root, root)
17249c803cdSMasahiro Yamada/usr/src/kernels/%{KERNELRELEASE}
17349c803cdSMasahiro Yamada/lib/modules/%{KERNELRELEASE}/build
17449c803cdSMasahiro Yamada%endif
175