1 Summary: The Linux kernel (the core of the Linux operating system)
3 %define tar_version 3.10.2
4 %define make_target bzImage
5 %define KVERREL %{version}-%{release}
6 %define hdrarch %_target_cpu
7 %define all_x86 i386 i586 i686 %{ix86} x86_64
8 %define _default_patch_fuzz 0
11 %define image_install_path boot
13 %define kernel_image arch/x86/boot/bzImage
17 %define image_install_path boot
18 %define hdrarch x86_64
19 %define kernel_image arch/x86/boot/bzImage
23 ExclusiveArch: %{all_x86} x86_64
26 # Packages that need to be installed before the kernel is, because the %post
29 %define kernel_prereq /usr/sbin/killall5
32 # This macro does requires, provides, conflicts, obsoletes for a kernel package.
33 # %%kernel_reqprovconf <subpackage>
34 # It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes
35 # macros defined above.
37 %define kernel_reqprovconf \
38 Provides: kernel = %{version}-%{release}\
39 Provides: kernel-uname-r = %{KVERREL}%{?1:-%{1}}\
40 #Requires(pre): %{kernel_prereq}\
41 %{?1:%{expand:%%{?kernel_%{1}_conflicts:Conflicts: %%{kernel_%{1}_conflicts}}}}\
42 %{?1:%{expand:%%{?kernel_%{1}_provides:Provides: %%{kernel_%{1}_provides}}}}\
43 # We can't let RPM do the dependencies automatic because it'll then pick up\
44 # a correct but undesirable perl dependency from the module headers which\
45 # isn't required for the kernel proper to function\
50 Name: kernel-adaptation-pc
54 URL: http://www.kernel.org/
61 # List the packages used during the kernel build
63 BuildRequires: kmod-compat
65 BuildRequires: bash >= 2.03
66 BuildRequires: findutils
67 BuildRequires: make >= 3.78
68 BuildRequires: libelf-devel
69 BuildRequires: binutils-devel
70 Requires(post): /usr/sbin/depmod
71 Requires(post): /usr/bin/dracut
72 Requires(post): /usr/bin/kmod
74 Source0: ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-%{tar_version}.tar.bz2
75 Source10: COPYING.modules
78 Source101: config.x86_64
79 Source1001: kernel-adaptation-pc.manifest
80 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
84 # This macro creates a kernel-<subpackage>-devel package.
85 # %%kernel_devel_package <subpackage> <pretty-name>
87 %define kernel_devel_package() \
88 %package -n kernel-%{?1:%{1}-}devel\
89 Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\
91 Provides: kernel%{?1:-%{1}}-devel = %{version}-%{release}\
92 Provides: kernel-devel = %{version}-%{release}%{?1:-%{1}}\
93 Provides: kernel-devel = %{version}-%{release}%{?1:-%{1}}\
94 Provides: kernel-devel-uname-r = %{KVERREL}%{?1:-%{1}}\
95 Requires: kernel%{?1:-%{1}} = %{version}-%{release}\
98 Requires(pre): /usr/bin/find\
99 %description -n kernel%{?1:-%{1}}-devel\
100 This package provides kernel headers and makefiles sufficient to build modules\
101 against the %{?2:%{2} }kernel package.\
105 # This macro creates a kernel-<subpackage> and its -devel too.
106 # %%define variant_summary The Linux kernel compiled for <configuration>
107 # %%kernel_variant_package [-n <pretty-name>] <subpackage>
109 %define kernel_variant_package(n:) \
110 %package -n kernel-%1\
111 Summary: %{variant_summary}\
112 Group: System/Kernel\
117 %define variant_summary Kernel for PC compatible systems
118 %kernel_devel_package adaptation-pc
119 %description -n kernel-adaptation-pc
120 This package contains the kernel optimized for PC compatible systems platforms
124 %setup -q -n linux-%{tar_version}
126 chmod +x scripts/checkpatch.pl
127 cp %{SOURCE10} Documentation/
131 # We want to run the config checks of all configurations for all architectures always.
132 # That way, developers immediately found out if they forget to enable not-their-native
133 # architecture. It's cheap to run anyway.
137 cp %{SOURCE101} .config
140 cp %{SOURCE100} .config
144 make ARCH=$Arch listnewconfig &> /tmp/configs
145 export conf=`cat /tmp/configs | grep CONFIG | wc -l`
147 if [ $conf -gt 0 ]; then
148 make ARCH=$Arch listnewconfig
151 make ARCH=$Arch oldconfig > /dev/null
152 echo "# $Arch" > configs/%{name}.config
153 cat .config >> configs/%{name}.config
156 # get rid of unwanted files resulting from patch fuzz
157 # (not that we can have any)
159 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
169 eu-strip --remove-comment -o "$2" "$1"
177 InstallName=${5:-vmlinuz}
179 # Pick the right config file for the kernel we're building
180 Config=kernel${Flavour:+-${Flavour}}.config
181 DevelDir=/usr/src/kernels/%{KVERREL}${Flavour:+-${Flavour}}
183 # When the bootable image is just the ELF kernel, strip it.
184 # We already copy the unstripped file into the debuginfo package.
185 if [ "$KernelImage" = vmlinux ]; then
186 CopyKernel=cp_vmlinux
191 KernelVer=%{version}-%{release}${Flavour:+-${Flavour}}
192 ExtraVer=%{?rctag}-%{release}${Flavour:+-${Flavour}}
199 if [ "$Arch" = "$TargetArch" ]; then
200 echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}... ${KernelVer}
201 echo USING ARCH=$Arch
203 # make sure EXTRAVERSION says what we want it to say
204 perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = ${ExtraVer}/" Makefile
206 # and now to start the build process
209 cp configs/$Config .config
211 make -s ARCH=$Arch oldconfig > /dev/null
212 make -s CONFIG_DEBUG_SECTION_MISMATCH=y ARCH=$Arch %{?_smp_mflags} $MakeTarget %{?sparse_mflags}
213 make -s CONFIG_DEBUG_SECTION_MISMATCH=y ARCH=$Arch %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
215 # Start installing the results
216 mkdir -p %{buildroot}/%{image_install_path}
217 install -m 644 .config %{buildroot}/boot/config-$KernelVer
218 install -m 644 System.map %{buildroot}/boot/System.map-$KernelVer
219 touch %{buildroot}/boot/initramfs-$KernelVer.img
220 if [ -f arch/$Arch/boot/zImage.stub ]; then
221 cp arch/$Arch/boot/zImage.stub %{buildroot}/%{image_install_path}/zImage.stub-$KernelVer || :
223 $CopyKernel $KernelImage \
224 %{buildroot}/%{image_install_path}/$InstallName-$KernelVer
225 chmod 755 %{buildroot}/%{image_install_path}/$InstallName-$KernelVer
226 ln -sf $InstallName-$KernelVer \
227 %{buildroot}/%{image_install_path}/vmlinuz
229 mkdir -p %{buildroot}/usr/lib/modules/$KernelVer
230 make -s ARCH=$Arch INSTALL_MOD_PATH=%{buildroot}/usr modules_install KERNELRELEASE=$KernelVer
231 # And save the headers/makefiles etc for building modules against
233 # This all looks scary, but the end result is supposed to be:
234 # * all arch relevant include/ files
235 # * all Makefile/Kconfig files
236 # * all script/ files
238 rm -f %{buildroot}/usr/lib/modules/$KernelVer/build
239 rm -f %{buildroot}/usr/lib/modules/$KernelVer/source
240 mkdir -p %{buildroot}/usr/lib/modules/$KernelVer/build
241 (cd %{buildroot}/usr/lib/modules/$KernelVer ; ln -s build source)
242 # dirs for additional modules per module-init-tools, kbuild/modules.txt
243 # first copy everything
244 cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` %{buildroot}/usr/lib/modules/$KernelVer/build
245 cp Module.symvers %{buildroot}/usr/lib/modules/$KernelVer/build
246 cp System.map %{buildroot}/usr/lib/modules/$KernelVer/build
247 if [ -s Module.markers ]; then
248 cp Module.markers %{buildroot}/usr/lib/modules/$KernelVer/build
250 # then drop all but the needed Makefiles/Kconfig files
251 rm -rf %{buildroot}/usr/lib/modules/$KernelVer/build/Documentation
252 rm -rf %{buildroot}/usr/lib/modules/$KernelVer/build/scripts
253 rm -rf %{buildroot}/usr/lib/modules/$KernelVer/build/include
254 cp .config %{buildroot}/usr/lib/modules/$KernelVer/build
255 cp -a scripts %{buildroot}/usr/lib/modules/$KernelVer/build
256 if [ -d arch/%{_arch}/scripts ]; then
257 cp -a arch/%{_arch}/scripts %{buildroot}/usr/lib/modules/$KernelVer/build/arch/%{_arch} || :
259 if [ -f arch/%{_arch}/*lds ]; then
260 cp -a arch/%{_arch}/*lds %{buildroot}/usr/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
262 rm -f %{buildroot}/usr/lib/modules/$KernelVer/build/scripts/*.o
263 rm -f %{buildroot}/usr/lib/modules/$KernelVer/build/scripts/*/*.o
264 cp -a --parents arch/x86/include %{buildroot}/usr/lib/modules/$KernelVer/build
265 mkdir -p %{buildroot}/usr/lib/modules/$KernelVer/build/include
267 cp -a acpi asm-generic config crypto drm generated keys linux math-emu media net pcmcia rdma rxrpc scsi sound video trace %{buildroot}/usr/lib/modules/$KernelVer/build/include
269 # Make sure the Makefile and version.h have a matching timestamp so that
270 # external modules can be built
271 touch -r %{buildroot}/usr/lib/modules/$KernelVer/build/Makefile %{buildroot}/usr/lib/modules/$KernelVer/build/include/linux/version.h
272 touch -r %{buildroot}/usr/lib/modules/$KernelVer/build/.config %{buildroot}/usr/lib/modules/$KernelVer/build/include/linux/autoconf.h
273 # Copy .config to include/config/auto.conf so "make prepare" is unnecessary.
274 cp %{buildroot}/usr/lib/modules/$KernelVer/build/.config %{buildroot}/usr/lib/modules/$KernelVer/build/include/config/auto.conf
278 # save the vmlinux file for kernel debugging into the kernel-*-devel rpm
281 cp vmlinux %{buildroot}/usr/lib/modules/$KernelVer
283 find %{buildroot}/usr/lib/modules/$KernelVer -name "*.ko" -type f >modnames
285 # mark modules executable so that strip-to-file can strip them
286 xargs --no-run-if-empty chmod u+x < modnames
288 # Generate a list of modules for block and networking.
290 fgrep /drivers/ modnames | xargs --no-run-if-empty nm -upA |
291 sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef
293 collect_modules_list()
295 sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef |
296 LC_ALL=C sort -u > %{buildroot}/usr/lib/modules/$KernelVer/modules.$1
299 collect_modules_list networking \
300 'register_netdev|ieee80211_register_hw|usbnet_probe'
301 collect_modules_list block \
302 'ata_scsi_ioctl|scsi_add_host|blk_init_queue|register_mtd_blktrans'
304 # remove files that will be auto generated by depmod at rpm -i time
305 for i in alias ccwmap dep ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols usbmap
307 rm -f %{buildroot}/usr/lib/modules/$KernelVer/modules.$i
310 # Move the devel headers out of the root file system
311 mkdir -p %{buildroot}/usr/src/kernels
312 mv %{buildroot}/usr/lib/modules/$KernelVer/build %{buildroot}/$DevelDir
313 ln -sf $DevelDir %{buildroot}/usr/lib/modules/$KernelVer/build
321 # prepare directories
323 mkdir -p %{buildroot}/boot
327 BuildKernel %make_target %kernel_image x86_64 adaptation-pc
329 BuildKernel %make_target %kernel_image x86 adaptation-pc
336 %define install %{?_enable_debug_packages:%{?buildsubdir:%{debug_package}}}\
342 rm -rf %{buildroot}/usr/lib/firmware
357 # This macro defines a %%post script for a kernel*-devel package.
358 # %%kernel_devel_post <subpackage>
360 %define kernel_devel_post() \
361 %{expand:%%post -n kernel-%{?1:%{1}-}devel}\
362 if [ -x /usr/sbin/hardlink ]\
364 (cd /usr/src/kernels/%{KVERREL}%{?1:-%{1}} &&\
365 /usr/bin/find . -type f | while read f; do\
366 hardlink -c /usr/src/kernels/*/$f $f\
371 # This macro defines a %%posttrans script for a kernel package.
372 # %%kernel_variant_posttrans [-v <subpackage>] [-s <s> -r <r>] <mkinitrd-args>
373 # More text can follow to go at the end of this variant's %%post.
375 %define kernel_variant_posttrans(s:r:v:) \
376 %{expand:%%posttrans -n kernel-%{?-v*}}\
380 # This macro defines a %%post script for a kernel package and its devel package.
381 # %%kernel_variant_post [-v <subpackage>] [-s <s> -r <r>] <mkinitrd-args>
382 # More text can follow to go at the end of this variant's %%post.
384 %define kernel_variant_post(s:r:v:) \
385 %{expand:%%kernel_devel_post %{?-v*}}\
386 %{expand:%%kernel_variant_posttrans %{?-v*}}\
387 %{expand:%%post -n kernel-%{?-v*}}\
388 /sbin/depmod -a %{KVERREL}-%{?-v*}\
389 /usr/bin/dracut /boot/initramfs-%{KVERREL}-%{?-v*}.img %{KVERREL}-%{?-v*}\
393 # This macro defines a %%preun script for a kernel package.
394 # %%kernel_variant_preun <subpackage>
396 %define kernel_variant_preun() \
397 %{expand:%%preun -n kernel-%{?1}}\
403 %kernel_variant_preun adaptation-pc
404 %kernel_variant_post -v adaptation-pc
416 # This macro defines the %%files sections for a kernel package
417 # and its devel packages.
418 # %%kernel_variant_files [-k vmlinux] [-a <extra-files-glob>] [-e <extra-nonbinary>] <condition> <subpackage>
420 %define kernel_variant_files(a:e:k:) \
422 %{expand:%%files -n kernel%{?2:-%{2}}}\
423 %defattr(-,root,root)\
424 /%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?2:-%{2}}\
426 /boot/System.map-%{KVERREL}%{?2:-%{2}}\
427 #/boot/symvers-%{KVERREL}%{?2:-%{2}}.gz\
428 /boot/config-%{KVERREL}%{?2:-%{2}}\
430 %dir /usr/lib/modules/%{KVERREL}%{?2:-%{2}}\
431 /usr/lib/modules/%{KVERREL}%{?2:-%{2}}/kernel\
432 /usr/lib/modules/%{KVERREL}%{?2:-%{2}}/build\
433 /usr/lib/modules/%{KVERREL}%{?2:-%{2}}/source\
434 /usr/lib/modules/%{KVERREL}%{?2:-%{2}}/modules.*\
435 %ghost /boot/initramfs-%{KVERREL}%{?2:-%{2}}.img\
437 %{expand:%%files -n kernel-%{?2:%{2}-}devel}\
438 %defattr(-,root,root)\
439 %verify(not mtime) /usr/src/kernels/%{KVERREL}%{?2:-%{2}}\
440 /usr/lib/modules/%{KVERREL}%{?2:-%{2}}/vmlinux \
445 %kernel_variant_files %all_x86 adaptation-pc