]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Update to 3.13.2.
[ipfire-3.x.git] / kernel / kernel.nm
1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
5
6 name = kernel
7 version = 3.13.2
8 release = 1
9 thisapp = linux-%{version}
10
11 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12 groups = System/Kernels
13 url = http://www.kernel.org/
14 license = GPLv2
15 summary = The Linux kernel.
16
17 description
18 The kernel package contains the Linux kernel (vmlinuz), the core of any
19 Linux operating system. The kernel handles the basic functions
20 of the operating system: memory allocation, process allocation, device
21 input and output, etc.
22 end
23
24 # Version helper variables.
25 localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26 fullver = %{version}-%{localversion}
27
28 source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/
29 sources = %{thisapp}.tar.xz
30
31 build
32 # icecream cannot be used to compile the kernel.
33 # Because the PaX patch does use GCC plugins to harden the kernel which
34 # are not available on the remote compilers, we need to disable it here.
35 export ICECC=no
36
37 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
38
39 requires
40 asciidoc
41 audit-devel
42 bc
43 binutils >= 2.23.51.0.3-3
44 binutils-devel
45 bison
46 elfutils-devel
47 flex
48 gcc-plugin-devel
49 gettext
50 libunwind-devel
51 ncurses-devel
52 net-tools
53 newt-devel
54 pciutils-devel
55 perl
56 python-devel
57 slang-devel
58 xmlto
59
60 /sbin/depmod
61 %{kernel_logo}
62 end
63
64 # i686 needs librmi for cpupower.
65 if "%{DISTRO_ARCH}" == "i686"
66 requires += liblrmi-devel
67 end
68
69 # A list of kernels to build.
70 kernels =
71
72 # Arguments that are passed to the kernel build command.
73 kernel_build_flags =
74
75 kernel_target = bzImage
76 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
77
78 if "%{DISTRO_ARCH}" == "i686"
79 # Build a default and legacy kernel for the
80 # i686 architecture.
81 build_kernel_default = 1
82 build_kernel_legacy = 1
83
84 kernel_arch = x86
85 end
86
87 if "%{DISTRO_ARCH}" == "x86_64"
88 build_kernel_default = 1
89
90 kernel_arch = x86
91 end
92
93 if "%{DISTRO_ARCH}" == "armv5tel"
94 # ERROR Currently all kernel images are disabled, because they
95 # won't build with the grsecurity patch.
96
97 # Build a kernel for Marvell Kirkwood-based devices.
98 build_kernel_kirkwood = 1
99
100 kernel_arch = arm
101 kernel_target = zImage
102
103 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
104 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
105 end
106
107 if "%{DISTRO_ARCH}" == "armv7hl"
108 # Build the default unified kernel.
109 build_kernel_default = 1
110 build_kernel_lpae = 1
111
112 kernel_arch = arm
113 kernel_target = zImage
114 end
115
116 # mkimage is a requirement to build uImage images.
117 if "%{kernel_target}" == "uImage"
118 requires += u-boot-tools
119 end
120
121 # Build default kernel.
122 if "%{build_kernel_default}" == "1"
123 kernels += default
124 end
125
126 # Build legacy kernel.
127 if "%{build_kernel_legacy}" == "1"
128 kernels += legacy
129 end
130
131 # Build lpae kernel
132 if "%{build_kernel_lpae}" == "1"
133 kernels += lpae
134 end
135
136 # Build ARM kirkwood kernel.
137 if "%{build_kernel_kirkwood}" == "1"
138 kernels += kirkwood
139 end
140
141 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
142 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
143 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
144
145 prepare_cmds
146 rm -f %{DIR_APP}/localversion-grsec
147
148 # Remove -Werror flag to fix ARMv5 build.
149 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
150
151 # Disable the colorize plugin.
152 # It's generally very nice but it clutters our
153 # logfiles.
154 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
155 -i Makefile
156
157 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
158
159 cp -vf %{kernel_logo} \
160 drivers/video/logo/logo_linux_clut224.ppm
161
162 # Get rid of unwanted files resulting from patch fuzz.
163 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
164
165 # Remove unnecessary SCM files.
166 find . -name .gitignore -exec rm -f {} \; >/dev/null
167
168 # This prevents scripts/setlocalversion from mucking with our version numbers.
169 touch .scmversion
170
171 mkdir -pv configs
172
173 cd %{DIR_SOURCE}
174 configure_kernel() {
175 local flavour=${1}
176 local suffix
177 if [ "${flavour}" != "default" ]; then
178 suffix="-${flavour}"
179 fi
180
181 scripts/configure --kernel-dir=%{DIR_APP} \
182 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
183 }
184
185 # Generate configuration files for all kernels we are going to
186 # build.
187 for kernel in %{kernels}; do
188 configure_kernel ${kernel}
189 done
190
191 # Tools
192 # Prevent perf from installing any files in /usr/libexec
193 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
194 end
195
196 build
197 build_kernel() {
198 local flavour=${1}
199 local suffix
200 local localversion="%{localversion}"
201 local fullversion="%{fullver}"
202 if [ "${flavour}" != "default" ]; then
203 suffix="-${flavour}"
204 localversion="${localversion}.${flavour}"
205 fullversion="${fullversion}.${flavour}"
206 fi
207
208 # Label the build.
209 sed -i Makefile \
210 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
211
212 # Clean up the source tree.
213 make mrproper
214
215 # Install configuration file.
216 cp configs/config.${flavour} .config
217 cat .config
218
219 # Run the build.
220 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
221 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
222 %{kernel_build_flags} %{PARALLELISMFLAGS}
223
224 # Compile Flattened Device Tree database
225 case "${DISTRO_ARCH}" in
226 arm*)
227 make ARCH=%{kernel_arch} dtbs
228
229 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
230 for file in arch/arm/boot/dts/*.dtb; do
231 [ -e "${file}" ] || continue
232
233 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
234 rm -f ${file}
235 done
236 ;;
237 esac
238
239 # Install the results.
240 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
241 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
242 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
243 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
244
245 # Create empty initramfs (20M).
246 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
247
248 # Install modules.
249 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
250 KERNELRELEASE=${fullversion} modules_install
251
252 # Install vdso.
253 case "%{DISTRO_ARCH}" in
254 i686)
255 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
256 KERNELRELEASE=${fullversion} vdso_install
257 ;;
258 esac
259
260 # Create an empty settings file for dracut
261 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
262 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
263 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
264
265 # And now the scary looking part.
266 #
267 # Recreate source and build links.
268 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
269 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
270 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
271
272 # Create dirs for extra modules.
273 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
274
275 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
276 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
277 cp Module.symvers System.map \
278 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
279 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
280
281 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
282 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
283 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
284 -exec rm -vf {} \;
285
286 cp -a --parents arch/%{kernel_arch}/include \
287 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
288 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
289
290 # Make sure we can build external modules.
291 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
292 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
293 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
294 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
295 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
296 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
297
298 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
299 xargs chmod u+x
300
301 # Move all development files to /usr/src.
302 mkdir -p %{BUILDROOT}/usr/src/kernels
303 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
304 %{BUILDROOT}/usr/src/kernels/${fullversion}
305 ln -sf ../../../src/kernels/${fullversion} \
306 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
307
308 # Fix permissions.
309 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
310 -exec chmod 644 {} \;
311
312 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
313 }
314
315 for kernel in %{kernels}; do
316 build_kernel ${kernel}
317 done
318
319 # Build tools.
320 # perf
321 %{perf_make} DESTDIR=%{BUILDROOT} all
322
323 # cpupower
324 chmod +x tools/power/cpupower/utils/version-gen.sh
325 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
326
327 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
328 pushd tools/power/cpupower/debug/x86_64
329 make %{MAKETUNING} centrino-decode powernow-k8-decode
330 popd
331 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
332 pushd tools/power/cpupower/debug/i386
333 make %{MAKETUNING} centrino-decode powernow-k8-decode
334 popd
335 fi
336
337 # Should be built for all x86 architectures
338 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
339 # Won't compile on i686
340 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
341 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
342 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
343 # ^
344 pushd tools/power/x86/x86_energy_perf_policy
345 make
346 popd
347
348 # Same as above
349 pushd tools/power/x86/turbostat
350 make
351 popd
352 fi
353
354 pushd tools/thermal/tmon
355 make
356 popd
357 end
358
359 install
360 # When no kernels are configured, we create a default config
361 # which enables us to install at least the header files.
362 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
363
364 # Install the header files
365 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
366 mkdir -pv %{BUILDROOT}/usr/include
367 find dest/include \( -name .install -o -name ..install.cmd \) -delete
368 cp -rv dest/include/* %{BUILDROOT}/usr/include
369
370 # Glibc provides these headers
371 rm -rfv %{BUILDROOT}/usr/include/scsi \
372 %{BUILDROOT}/usr/include/asm*/atomic.h \
373 %{BUILDROOT}/usr/include/asm*/io.h \
374 %{BUILDROOT}/usr/include/asm*/irq.h
375
376 # Remove all firmware files which are distributed by linux-firmware
377 rm -rfv %{BUILDROOT}/lib/firmware
378
379 # Install tools.
380 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
381
382 # cpupower
383 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
384 mandir=%{mandir} CPUFREQ_BENCH=false install
385
386 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
387 pushd tools/power/cpupower/debug/x86_64
388 install -m 755 centrino-decode \
389 %{BUILDROOT}/usr/bin/centrino-decode
390 install -m 755 powernow-k8-decode \
391 %{BUILDROOT}/usr/bin/powernow-k8-decode
392 popd
393 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
394 pushd tools/power/cpupower/debug/i386
395 install -m 755 centrino-decode \
396 %{BUILDROOT}/usr/bin/centrino-decode
397 install -m 755 powernow-k8-decode \
398 %{BUILDROOT}/usr/bin/powernow-k8-decode
399 popd
400 fi
401
402 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
403
404 # This should be built for all x86 architectures
405 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
406 mkdir -pv %{BUILDROOT}%{mandir}/man8
407
408 pushd tools/power/x86/x86_energy_perf_policy
409 make DESTDIR=%{BUILDROOT} install
410 popd
411
412 pushd tools/power/x86/turbostat
413 make DESTDIR=%{BUILDROOT} install
414 popd
415 fi
416
417 # tmon
418 pushd tools/thermal/tmon
419 make INSTALL_ROOT=%{BUILDROOT} install
420 popd
421 end
422 end
423
424 packages
425 template KERNEL
426 kernel_name = kernel
427 kernel_release = %{fullver}
428
429 summary = The Linux kernel %{kernel_release}.
430
431 prerequires
432 /sbin/depmod
433 end
434
435 provides
436 kernel=%{kernel_release}
437 end
438
439 requires
440 dracut
441 grubby
442 linux-firmware
443 end
444
445 files
446 /boot/System.map-%{kernel_release}
447 /boot/dtb-%{kernel_release}
448 /boot/vmlinuz-%{kernel_release}
449 /boot/initramfs-%{kernel_release}.img
450 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
451 /usr/lib/modules/%{kernel_release}
452 end
453
454 _posttrans
455 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
456 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
457 end
458
459 script posttransin
460 %{_posttrans}
461 end
462
463 script posttransup
464 %{_posttrans}
465 end
466
467 script postin
468 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
469 end
470
471 script postup
472 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
473 end
474
475 script preun
476 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
477 end
478 end
479
480 template KERNELDEVEL
481 kernel_release = %{fullver}
482
483 summary = Development files of kernel-%{kernel_release}.
484 description
485 %{summary}
486
487 Install this package in order to compile modules for
488 kernel release %{kernel_release}.
489 end
490
491 provides
492 kernel-devel = %{thisver}
493 end
494
495 filter_requires
496 perl>=[0-9]\:.*
497 end
498
499 files
500 /usr/lib/modules/%{kernel_release}/build
501 /usr/lib/modules/%{kernel_release}/source
502 /usr/src/kernels/%{kernel_release}
503 end
504 end
505
506 if "%{build_kernel_default}" == "1"
507 if "%{DISTRO_ARCH}" == "armv7hl"
508 package kernel
509 template KERNEL
510
511 kernel_name = kernel
512 kernel_release = %{fullver}
513
514 # Replace the Exynos kernel.
515 obsoletes += kernel-exynos < %{kernel_release}
516 conflicts += kernel-exynos < %{kernel_release}
517
518 # Replace the OMAP kernel.
519 obsoletes += kernel-omap < %{kernel_release}
520 conflicts += kernel-omap < %{kernel_release}
521 end
522
523 package kernel-devel
524 template KERNELDEVEL
525
526 kernel_name = kernel
527 kernel_release = %{fullver}
528
529 # Replace the Exynos kernel.
530 obsoletes += kernel-exynos-devel < %{kernel_release}
531 conflicts += kernel-exynos-devel < %{kernel_release}
532
533 # Replace the OMAP kernel.
534 obsoletes += kernel-omap-devel < %{kernel_release}
535 conflicts += kernel-omap-devel < %{kernel_release}
536 end
537
538 else
539 package kernel
540 template KERNEL
541
542 kernel_name = kernel
543 kernel_release = %{fullver}
544 end
545
546 package kernel-devel
547 template KERNELDEVEL
548
549 kernel_name = kernel
550 kernel_release = %{fullver}
551 end
552 end
553 end
554
555 if "%{build_kernel_legacy}" == "1"
556 package kernel-legacy
557 template KERNEL
558
559 kernel_name = kernel-legacy
560 kernel_release = %{fullver}.legacy
561 end
562
563 package kernel-legacy-devel
564 template KERNELDEVEL
565
566 kernel_name = kernel-legacy
567 kernel_release = %{fullver}.legacy
568 end
569 end
570
571 if "%{build_kernel_lpae}" == "1"
572 package kernel-lpae
573 template KERNEL
574
575 kernel_name = kernel-lpae
576 kernel_release = %{fullver}.lpae
577 end
578
579 package kernel-lpae-devel
580 template KERNELDEVEL
581
582 kernel_name = kernel-lpae
583 kernel_release = %{fullver}.lpae
584 end
585 end
586
587 if "%{build_kernel_kirkwood}" == "1"
588 package kernel-kirkwood
589 template KERNEL
590
591 kernel_name = kernel-kirkwood
592 kernel_release = %{fullver}.kirkwood
593 end
594
595 package kernel-kirkwood-devel
596 template KERNELDEVEL
597
598 kernel_name = kernel-kirkwood
599 kernel_release = %{fullver}.kirkwood
600 end
601 end
602
603 package kernel-headers
604 summary = Header files of the kernel release %{fullver}.
605 desciption = %{summary}
606
607 files
608 /usr/include
609 end
610 end
611
612 package kernel-tools
613 summary = Assortment of tools for the Linux kernel.
614 description = %{summary}
615
616 filter_requires
617 perl>=[0-9]\:.*
618 end
619
620 files
621 /
622 !/boot
623 !/usr/include
624 !/usr/lib/modules
625 !/usr/src
626 !/usr/src/debug
627 !/usr/lib/debug
628 end
629 end
630 end