xref: /linux/scripts/package/kernel.spec (revision a3a02a52bcfcbcc4a637d4b68bf1bc391c9fad02)
1# _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
2%{!?_arch: %define _arch dummy}
3%{!?make: %define make make}
4%define makeflags %{?_smp_mflags} ARCH=%{ARCH}
5%define __spec_install_post /usr/lib/rpm/brp-compress || :
6%define debug_package %{nil}
7
8Name: kernel
9Summary: The Linux Kernel
10Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
11Release: %{pkg_release}
12License: GPL
13Group: System Environment/Kernel
14Vendor: The Linux Community
15URL: https://www.kernel.org
16Source0: linux.tar.gz
17Source1: config
18Source2: diff.patch
19Provides: kernel-%{KERNELRELEASE}
20BuildRequires: bc binutils bison dwarves
21BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
22BuildRequires: gcc make openssl openssl-devel perl python3 rsync
23
24%description
25The Linux Kernel, the operating system core itself
26
27%package headers
28Summary: Header files for the Linux kernel for use by glibc
29Group: Development/System
30Obsoletes: kernel-headers < %{version}
31Provides: kernel-headers = %{version}
32%description headers
33Kernel-headers includes the C header files that specify the interface
34between the Linux kernel and userspace libraries and programs.  The
35header files define structures and constants that are needed for
36building most standard programs and are also needed for rebuilding the
37glibc package.
38
39%if %{with_devel}
40%package devel
41Summary: Development package for building kernel modules to match the %{version} kernel
42Group: System Environment/Kernel
43AutoReqProv: no
44%description -n kernel-devel
45This package provides kernel headers and makefiles sufficient to build modules
46against the %{version} kernel package.
47%endif
48
49%prep
50%setup -q -n linux
51cp %{SOURCE1} .config
52patch -p1 < %{SOURCE2}
53
54%build
55%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
56
57%install
58mkdir -p %{buildroot}/lib/modules/%{KERNELRELEASE}
59cp $(%{make} %{makeflags} -s image_name) %{buildroot}/lib/modules/%{KERNELRELEASE}/vmlinuz
60# DEPMOD=true makes depmod no-op. We do not package depmod-generated files.
61%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} DEPMOD=true modules_install
62%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
63cp System.map %{buildroot}/lib/modules/%{KERNELRELEASE}
64cp .config %{buildroot}/lib/modules/%{KERNELRELEASE}/config
65if %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='test -d ${srctree}/arch/${SRCARCH}/boot/dts' 2>/dev/null; then
66	%{make} %{makeflags} INSTALL_DTBS_PATH=%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb dtbs_install
67fi
68ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
69%if %{with_devel}
70%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
71%endif
72
73{
74	echo "/lib/modules/%{KERNELRELEASE}"
75
76	for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
77				devname softdep symbols symbols.bin weakdep; do
78		echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
79	done
80
81	for x in System.map config vmlinuz; do
82		echo "%ghost /boot/${x}-%{KERNELRELEASE}"
83	done
84
85	if [ -d "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" ];then
86		find "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" -printf "%%%ghost /boot/dtb-%{KERNELRELEASE}/%%P\n"
87	fi
88
89	echo "%exclude /lib/modules/%{KERNELRELEASE}/build"
90} > %{buildroot}/kernel.list
91
92%clean
93rm -rf %{buildroot}
94
95%post
96if [ -x /usr/bin/kernel-install ]; then
97	/usr/bin/kernel-install add %{KERNELRELEASE} /lib/modules/%{KERNELRELEASE}/vmlinuz
98fi
99for file in vmlinuz System.map config; do
100	if ! cmp --silent "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"; then
101		cp "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"
102	fi
103done
104if [ -d "/lib/modules/%{KERNELRELEASE}/dtb" ] && \
105   ! diff -rq "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}" >/dev/null 2>&1; then
106	rm -rf "/boot/dtb-%{KERNELRELEASE}"
107	cp -r "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}"
108fi
109if [ ! -e "/lib/modules/%{KERNELRELEASE}/modules.dep" ]; then
110	/usr/sbin/depmod %{KERNELRELEASE}
111fi
112
113%preun
114if [ -x /usr/bin/kernel-install ]; then
115kernel-install remove %{KERNELRELEASE}
116fi
117
118%files -f %{buildroot}/kernel.list
119%defattr (-, root, root)
120%exclude /kernel.list
121
122%files headers
123%defattr (-, root, root)
124/usr/include
125
126%if %{with_devel}
127%files devel
128%defattr (-, root, root)
129/usr/src/kernels/%{KERNELRELEASE}
130/lib/modules/%{KERNELRELEASE}/build
131%endif
132