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