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