]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Update to 3.5.1.
[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.5.1
8 release = 0.2
9 thisapp = linux-%{version}
10
11 maintainer = Michael Tremer <michael.tremer@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 requires
38 asciidoc
39 binutils >= 2.22.52.0.3-2
40 binutils-devel
41 bison
42 elfutils-devel
43 flex
44 gcc-plugin-devel
45 gettext
46 ncurses-devel
47 net-tools
48 perl
49 python-devel
50 xmlto
51
52 /sbin/depmod
53 end
54
55 tools_cpupower_requires
56 newt-devel
57 pciutils-devel
58 slang-devel
59 end
60
61 # A list of kernels to build.
62 kernels =
63
64 # Should we build cpupower?
65 build_cpupower = 1
66
67 # Arguments that are passed to the kernel build command.
68 kernel_build_flags =
69
70 kernel_target = bzImage
71 if "%{DISTRO_ARCH}" == "i686"
72 # Build a default and legacy kernel for the
73 # i686 architecture.
74 build_kernel_default = 1
75 build_kernel_legacy = 1
76
77 kernel_arch = x86
78 kernel_image = arch/%{kernel_arch}/boot/bzImage
79
80 end
81
82 if "%{DISTRO_ARCH}" == "x86_64"
83 build_kernel_default = 1
84
85 kernel_arch = x86
86 kernel_image = arch/%{kernel_arch}/boot/bzImage
87 end
88
89 if "%{DISTRO_ARCH}" == "armv5tel"
90 # ERROR Currently all kernel images are disabled, because they
91 # won't build with the grsecurity patch.
92
93 # Build versatile kernel.
94 build_kernel_versatile = 1
95
96 # Build a kernel for Marvell Kirkwood-based devices.
97 build_kernel_kirkwood = 1
98
99 kernel_arch = arm
100 kernel_image = arch/%{kernel_arch}/boot/zImage
101
102 # ARM does not support cpupower.
103 build_cpupower = 0
104
105 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
106 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
107 end
108
109 if "%{DISTRO_ARCH}" == "armv7hl"
110 # Build a kernel for TI OMAP SoCs.
111 build_kernel_omap = 1
112
113 kernel_arch = arm
114 kernel_image = arch/%{kernel_arch}/boot/zImage
115
116 # ARM does not support cpupower.
117 build_cpupower = 0
118 end
119
120 # Build default kernel.
121 if "%{build_kernel_default}" == "1"
122 kernels += default
123 end
124
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
127 kernels += legacy
128 end
129
130 # Build ARM versatile kernel.
131 if "%{build_kernel_versatile}" == "1"
132 kernels += versatile
133 end
134
135 # Build ARM kirkwood kernel.
136 if "%{build_kernel_kirkwood}" == "1"
137 kernels += kirkwood
138 end
139
140 # Build ARM omap kernel.
141 if "%{build_kernel_omap}" == "1"
142 kernels += omap
143 end
144
145 # Add tools' build requirements if build is requested.
146 if "%{build_cpupower}" == "1"
147 requires += %{tools_cpupower_requires}
148 end
149
150 prepare_cmds
151 rm -f %{DIR_APP}/localversion-grsec
152
153 # Remove -Werror flag to fix ARMv5 build.
154 sed -e "s/-Werror//g" -i grsecurity/Makefile
155
156 # Disable the colorize plugin.
157 # It's generally very nice but it clutters our
158 # logfiles.
159 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
160 -i Makefile
161
162 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
163
164 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
165 drivers/video/logo/logo_linux_clut224.ppm
166
167 # Get rid of unwanted files resulting from patch fuzz.
168 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
169
170 # Remove unnecessary SCM files.
171 find . -name .gitignore -exec rm -f {} \; >/dev/null
172
173 # This prevents scripts/setlocalversion from mucking with our version numbers.
174 touch .scmversion
175
176 mkdir -pv configs
177
178 cd %{DIR_SOURCE}
179 configure_kernel() {
180 local flavour=${1}
181 local suffix
182 if [ "${flavour}" != "default" ]; then
183 suffix="-${flavour}"
184 fi
185
186 scripts/configure --kernel-dir=%{DIR_APP} \
187 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
188 }
189
190 # Generate configuration files for all kernels we are going to
191 # build.
192 for kernel in %{kernels}; do
193 configure_kernel ${kernel}
194 done
195 end
196
197 build
198 build_kernel() {
199 local flavour=${1}
200 local suffix
201 local localversion="%{localversion}"
202 local fullversion="%{fullver}"
203 if [ "${flavour}" != "default" ]; then
204 suffix="-${flavour}"
205 localversion="${localversion}.${flavour}"
206 fullversion="${fullversion}.${flavour}"
207 fi
208
209 # Label the build.
210 sed -i Makefile \
211 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
212
213 # Clean up the source tree.
214 make mrproper
215
216 # Install configuration file.
217 cp configs/config.${flavour} .config
218 cat .config
219
220 # Run the build.
221 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
222 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
223 %{kernel_build_flags} %{PARALLELISMFLAGS}
224
225 # Install the results.
226 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
227 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
228 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
229 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
230
231 # Create empty initramfs (20M).
232 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
233
234 # Install modules.
235 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
236 KERNELRELEASE=${fullversion} modules_install
237
238 # Install vdso.
239 case "%{DISTRO_ARCH}" in
240 i686)
241 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
242 KERNELRELEASE=${fullversion} vdso_install
243 ;;
244 esac
245
246 # Create an empty settings file for dracut
247 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
248 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
249 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
250
251 # And now the scary looking part.
252 #
253 # Recreate source and build links.
254 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
255 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
256 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
257
258 # Create dirs for extra modules.
259 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
260
261 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
262 %{BUILDROOT}/lib/modules/${fullversion}/build
263 cp -v Module.symvers System.map \
264 %{BUILDROOT}/lib/modules/${fullversion}/build
265 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
266
267 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
268 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
269 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
270 -exec rm -vf {} \;
271
272 cp -va --parents arch/%{kernel_arch}/include \
273 %{BUILDROOT}/lib/modules/${fullversion}/build
274 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
275
276 # Make sure we can build external modules.
277 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
278 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
279 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
280 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
281 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
282 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
283
284 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
285 xargs chmod u+x
286
287 # Move all development files to /usr/src.
288 mkdir -pv %{BUILDROOT}/usr/src/kernels
289 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
290 %{BUILDROOT}/usr/src/kernels/${fullversion}
291 ln -svf ../../../usr/src/kernels/${fullversion} \
292 %{BUILDROOT}/lib/modules/${fullversion}/build
293
294 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
295 }
296
297 for kernel in %{kernels}; do
298 build_kernel ${kernel}
299 done
300
301 # Build tools.
302 # cpupower
303 if [ "%{build_cpupower}" = "1" ]; then
304 chmod +x tools/power/cpupower/utils/version-gen.sh
305 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
306
307 cd tools/power/cpupower/debug/i386
308 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
309 cd -
310 fi
311 end
312
313 install
314 # When no kernels are configured, we create a default config
315 # which enables us to install at least the header files.
316 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
317
318 # Install the header files
319 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
320 mkdir -pv %{BUILDROOT}/usr/include
321 find dest/include \( -name .install -o -name ..install.cmd \) -delete
322 cp -rv dest/include/* %{BUILDROOT}/usr/include
323
324 # Glibc provides these headers
325 rm -rfv %{BUILDROOT}/usr/include/scsi \
326 %{BUILDROOT}/usr/include/asm*/atomic.h \
327 %{BUILDROOT}/usr/include/asm*/io.h \
328 %{BUILDROOT}/usr/include/asm*/irq.h
329
330 # Remove all firmware files which are distributed by linux-firmware
331 rm -rfv %{BUILDROOT}/lib/firmware
332
333 # Install tools.
334 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
335 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
336 install install-man
337
338 # cpupower
339 if [ "%{build_cpupower}" = "1" ]; then
340 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
341 mandir=%{mandir} CPUFREQ_BENCH=false install
342 cd tools/power/cpupower/debug/i386
343 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
344 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
345 cd -
346 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
347 fi
348 end
349 end
350
351 packages
352 template KERNEL
353 kernel_name = kernel
354 kernel_release = %{fullver}
355
356 summary = The Linux kernel %{kernel_release}.
357
358 prerequires
359 /sbin/depmod
360 end
361
362 provides
363 kernel=%{kernel_release}
364 end
365
366 requires
367 dracut
368 grubby
369 linux-firmware
370 end
371
372 files
373 /boot/System.map-%{kernel_release}
374 /boot/vmlinuz-%{kernel_release}
375 /boot/initramfs-%{kernel_release}.img
376 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
377 /lib/modules/%{kernel_release}
378 end
379
380 _posttrans
381 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
382 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
383 end
384
385 script posttransin
386 %{_posttrans}
387 end
388
389 script posttransup
390 %{_posttrans}
391 end
392
393 script postin
394 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
395 end
396
397 script postup
398 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
399 end
400
401 script preun
402 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
403 end
404 end
405
406 template KERNELDEVEL
407 kernel_release = %{fullver}
408
409 summary = Development files of kernel-%{kernel_release}.
410 description
411 %{summary}
412
413 Install this package in order to compile modules for
414 kernel release %{kernel_release}.
415 end
416
417 filter_requires
418 perl>=[0-9]\:.*
419 end
420
421 files
422 /lib/modules/%{kernel_release}/build
423 /lib/modules/%{kernel_release}/source
424 /usr/src/kernels/%{kernel_release}
425 end
426 end
427
428 if "%{build_kernel_default}" == "1"
429 package kernel
430 template KERNEL
431
432 kernel_name = kernel
433 kernel_release = %{fullver}
434 end
435
436 package kernel-devel
437 template KERNELDEVEL
438
439 kernel_name = kernel
440 kernel_release = %{fullver}
441 end
442 end
443
444 if "%{build_kernel_legacy}" == "1"
445 package kernel-legacy
446 template KERNEL
447
448 kernel_name = kernel-legacy
449 kernel_release = %{fullver}.legacy
450 end
451
452 package kernel-legacy-devel
453 template KERNELDEVEL
454
455 kernel_name = kernel-legacy
456 kernel_release = %{fullver}.legacy
457 end
458 end
459
460 if "%{build_kernel_versatile}" == "1"
461 package kernel-versatile
462 template KERNEL
463
464 kernel_name = kernel-versatile
465 kernel_release = %{fullver}.versatile
466 end
467
468 package kernel-versatile-devel
469 template KERNELDEVEL
470
471 kernel_name = kernel-versatile
472 kernel_release = %{fullver}.versatile
473 end
474 end
475
476 if "%{build_kernel_kirkwood}" == "1"
477 package kernel-kirkwood
478 template KERNEL
479
480 kernel_name = kernel-kirkwood
481 kernel_release = %{fullver}.kirkwood
482 end
483
484 package kernel-kirkwood-devel
485 template KERNELDEVEL
486
487 kernel_name = kernel-kirkwood
488 kernel_release = %{fullver}.kirkwood
489 end
490 end
491
492 if "%{build_kernel_omap}" == "1"
493 package kernel-omap
494 template KERNEL
495
496 kernel_name = kernel-omap
497 kernel_release = %{fullver}.omap
498 end
499
500 package kernel-omap-devel
501 template KERNELDEVEL
502
503 kernel_name = kernel-omap
504 kernel_release = %{fullver}.omap
505 end
506 end
507
508 package kernel-headers
509 summary = Header files of the kernel release %{fullver}.
510 desciption = %{summary}
511
512 files
513 /usr/include
514 end
515 end
516
517 package kernel-tools
518 summary = Assortment of tools for the Linux kernel.
519 description = %{summary}
520
521 filter_requires
522 perl>=[0-9]\:.*
523 end
524
525 files
526 /
527 !/boot
528 !/lib/modules
529 !/usr/include
530 !/usr/src
531 !/usr/src/debug
532 !/usr/lib/debug
533 end
534 end
535 end