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