Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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-devel or libdw-devel)
22BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
23BuildRequires: gcc make openssl openssl-devel perl python3 rsync
24
25%description
26The Linux Kernel, the operating system core itself
27
28%package headers
29Summary: Header files for the Linux kernel for use by glibc
30Group: Development/System
31Obsoletes: kernel-headers < %{version}
32Provides: kernel-headers = %{version}
33%description headers
34Kernel-headers includes the C header files that specify the interface
35between the Linux kernel and userspace libraries and programs. The
36header files define structures and constants that are needed for
37building most standard programs and are also needed for rebuilding the
38glibc package.
39
40%if %{with_devel}
41%package devel
42Summary: Development package for building kernel modules to match the %{version} kernel
43Group: System Environment/Kernel
44AutoReqProv: no
45%description -n kernel-devel
46This package provides kernel headers and makefiles sufficient to build modules
47against the %{version} kernel package.
48%endif
49
50%if %{with_debuginfo}
51%package debuginfo
52Summary: Debug information package for the Linux kernel
53%description debuginfo
54This package provides debug information for the kernel image and modules from the
55%{version} package.
56%endif
57
58%prep
59%setup -q -n linux
60cp %{SOURCE1} .config
61patch -p1 < %{SOURCE2}
62
63%build
64%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
65
66%install
67mkdir -p %{buildroot}/lib/modules/%{KERNELRELEASE}
68cp $(%{make} %{makeflags} -s image_name) %{buildroot}/lib/modules/%{KERNELRELEASE}/vmlinuz
69# DEPMOD=true makes depmod no-op. We do not package depmod-generated files.
70%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} INSTALL_MOD_STRIP=1 DEPMOD=true modules_install
71%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
72cp System.map %{buildroot}/lib/modules/%{KERNELRELEASE}
73cp .config %{buildroot}/lib/modules/%{KERNELRELEASE}/config
74if %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='test -d ${srctree}/arch/${SRCARCH}/boot/dts' 2>/dev/null; then
75 %{make} %{makeflags} INSTALL_DTBS_PATH=%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb dtbs_install
76fi
77ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
78%if %{with_devel}
79%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
80%endif
81
82{
83 echo "/lib/modules/%{KERNELRELEASE}"
84
85 for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
86 devname softdep symbols symbols.bin weakdep; do
87 echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
88 done
89
90 for x in System.map config vmlinuz; do
91 echo "%ghost /boot/${x}-%{KERNELRELEASE}"
92 done
93
94 if [ -d "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" ];then
95 find "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" -printf "%%%ghost /boot/dtb-%{KERNELRELEASE}/%%P\n"
96 fi
97
98 echo "%exclude /lib/modules/%{KERNELRELEASE}/build"
99} > %{buildroot}/kernel.list
100
101%if %{with_debuginfo}
102# copying vmlinux directly to the debug directory means it will not get
103# stripped (but its source paths will still be collected + fixed up)
104mkdir -p %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
105cp vmlinux %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
106
107echo /usr/lib/debug/lib/modules/%{KERNELRELEASE}/vmlinux > %{buildroot}/debuginfo.list
108
109while read -r mod; do
110 mod="${mod%.o}.ko"
111 dbg="%{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}/kernel/${mod}"
112 buildid=$("${READELF}" -n "${mod}" | sed -n 's@^.*Build ID: \(..\)\(.*\)@\1/\2@p')
113 link="%{buildroot}/usr/lib/debug/.build-id/${buildid}.debug"
114
115 mkdir -p "${dbg%/*}" "${link%/*}"
116 "${OBJCOPY}" --only-keep-debug "${mod}" "${dbg}"
117 ln -sf --relative "${dbg}" "${link}"
118
119 echo "${dbg#%{buildroot}}" >> %{buildroot}/debuginfo.list
120 echo "${link#%{buildroot}}" >> %{buildroot}/debuginfo.list
121done < modules.order
122%endif
123
124%clean
125rm -rf %{buildroot}
126
127%post
128if [ -x /usr/bin/kernel-install ]; then
129 /usr/bin/kernel-install add %{KERNELRELEASE} /lib/modules/%{KERNELRELEASE}/vmlinuz
130fi
131for file in vmlinuz System.map config; do
132 if ! cmp --silent "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"; then
133 cp "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"
134 fi
135done
136if [ -d "/lib/modules/%{KERNELRELEASE}/dtb" ] && \
137 ! diff -rq "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}" >/dev/null 2>&1; then
138 rm -rf "/boot/dtb-%{KERNELRELEASE}"
139 cp -r "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}"
140fi
141if [ ! -e "/lib/modules/%{KERNELRELEASE}/modules.dep" ]; then
142 /usr/sbin/depmod %{KERNELRELEASE}
143fi
144
145%preun
146if [ -x /usr/bin/kernel-install ]; then
147kernel-install remove %{KERNELRELEASE}
148fi
149
150%files -f %{buildroot}/kernel.list
151%defattr (-, root, root)
152%exclude /kernel.list
153
154%files headers
155%defattr (-, root, root)
156/usr/include
157
158%if %{with_devel}
159%files devel
160%defattr (-, root, root)
161/usr/src/kernels/%{KERNELRELEASE}
162/lib/modules/%{KERNELRELEASE}/build
163%endif
164
165%if %{with_debuginfo}
166%files -f %{buildroot}/debuginfo.list debuginfo
167%defattr (-, root, root)
168%exclude /debuginfo.list
169%endif