at v6.19 169 lines 5.8 kB view raw
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