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