]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blob - kernel/kernel.nm
Merge remote-tracking branch 'tebert/diffutils'
[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 = 1
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 # Install the results.
223 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
224 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
225 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
226 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
227
228 # Create empty initramfs (20M).
229 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
230
231 # Install modules.
232 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
233 KERNELRELEASE=${fullversion} modules_install
234
235 # Install vdso.
236 case "%{DISTRO_ARCH}" in
237 i686)
238 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
239 KERNELRELEASE=${fullversion} vdso_install
240 ;;
241 esac
242
243 # Create an empty settings file for dracut
244 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
245 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
246 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
247
248 # And now the scary looking part.
249 #
250 # Recreate source and build links.
251 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
252 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
253 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
254
255 # Create dirs for extra modules.
256 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
257
258 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
259 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
260 cp Module.symvers System.map \
261 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
262 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
263
264 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
265 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
266 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
267 -exec rm -vf {} \;
268
269 cp -a --parents arch/%{kernel_arch}/include \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
271 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
272
273 # Make sure we can build external modules.
274 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
275 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
276 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
277 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
278 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
279 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
280
281 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
282 xargs chmod u+x
283
284 # Move all development files to /usr/src.
285 mkdir -p %{BUILDROOT}/usr/src/kernels
286 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
287 %{BUILDROOT}/usr/src/kernels/${fullversion}
288 ln -sf ../../../src/kernels/${fullversion} \
289 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
290
291 # Fix permissions.
292 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
293 -exec chmod 644 {} \;
294
295 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
296 }
297
298 for kernel in %{kernels}; do
299 build_kernel ${kernel}
300 done
301
302 # Build tools.
303 # cpupower
304 chmod +x tools/power/cpupower/utils/version-gen.sh
305 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
306
307 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
308 pushd tools/power/cpupower/debug/x86_64
309 make %{MAKETUNING}
310 popd
311 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
312 pushd tools/power/cpupower/debug/i386
313 make %{MAKETUNING}
314 popd
315 fi
316 end
317
318 install
319 # When no kernels are configured, we create a default config
320 # which enables us to install at least the header files.
321 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
322
323 # Install the header files
324 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
325 mkdir -pv %{BUILDROOT}/usr/include
326 find dest/include \( -name .install -o -name ..install.cmd \) -delete
327 cp -rv dest/include/* %{BUILDROOT}/usr/include
328
329 # Glibc provides these headers
330 rm -rfv %{BUILDROOT}/usr/include/scsi \
331 %{BUILDROOT}/usr/include/asm*/atomic.h \
332 %{BUILDROOT}/usr/include/asm*/io.h \
333 %{BUILDROOT}/usr/include/asm*/irq.h
334
335 # Remove all firmware files which are distributed by linux-firmware
336 rm -rfv %{BUILDROOT}/lib/firmware
337
338 # Install tools.
339 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
340 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
341 install install-man install-python_ext
342
343 # cpupower
344 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
345 mandir=%{mandir} CPUFREQ_BENCH=false install
346
347 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
348 pushd tools/power/cpupower/debug/x86_64
349 install -m 755 centrino-decode \
350 %{BUILDROOT}/usr/bin/centrino-decode
351 install -m 755 powernow-k8-decode \
352 %{BUILDROOT}/usr/bin/powernow-k8-decode
353 popd
354 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
355 pushd tools/power/cpupower/debug/i386
356 install -m 755 centrino-decode \
357 %{BUILDROOT}/usr/bin/centrino-decode
358 install -m 755 powernow-k8-decode \
359 %{BUILDROOT}/usr/bin/powernow-k8-decode
360 popd
361 fi
362
363 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
364 end
365 end
366
367 packages
368 template KERNEL
369 kernel_name = kernel
370 kernel_release = %{fullver}
371
372 summary = The Linux kernel %{kernel_release}.
373
374 prerequires
375 /sbin/depmod
376 end
377
378 provides
379 kernel=%{kernel_release}
380 end
381
382 requires
383 dracut
384 grubby
385 linux-firmware
386 end
387
388 files
389 /boot/System.map-%{kernel_release}
390 /boot/vmlinuz-%{kernel_release}
391 /boot/initramfs-%{kernel_release}.img
392 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
393 /usr/lib/modules/%{kernel_release}
394 end
395
396 _posttrans
397 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
398 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
399 end
400
401 script posttransin
402 %{_posttrans}
403 end
404
405 script posttransup
406 %{_posttrans}
407 end
408
409 script postin
410 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
411 end
412
413 script postup
414 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
415 end
416
417 script preun
418 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
419 end
420 end
421
422 template KERNELDEVEL
423 kernel_release = %{fullver}
424
425 summary = Development files of kernel-%{kernel_release}.
426 description
427 %{summary}
428
429 Install this package in order to compile modules for
430 kernel release %{kernel_release}.
431 end
432
433 filter_requires
434 perl>=[0-9]\:.*
435 end
436
437 files
438 /usr/lib/modules/%{kernel_release}/build
439 /usr/lib/modules/%{kernel_release}/source
440 /usr/src/kernels/%{kernel_release}
441 end
442 end
443
444 if "%{build_kernel_default}" == "1"
445 package kernel
446 template KERNEL
447
448 kernel_name = kernel
449 kernel_release = %{fullver}
450 end
451
452 package kernel-devel
453 template KERNELDEVEL
454
455 kernel_name = kernel
456 kernel_release = %{fullver}
457 end
458 end
459
460 if "%{build_kernel_exynos}" == "1"
461 package kernel-exynos
462 template KERNEL
463
464 kernel_name = kernel-exynos
465 kernel_release = %{fullver}.exynos
466 end
467
468 package kernel-exynos-devel
469 template KERNELDEVEL
470
471 kernel_name = kernel-exynos
472 kernel_release = %{fullver}.exynos
473 end
474 end
475
476 if "%{build_kernel_legacy}" == "1"
477 package kernel-legacy
478 template KERNEL
479
480 kernel_name = kernel-legacy
481 kernel_release = %{fullver}.legacy
482 end
483
484 package kernel-legacy-devel
485 template KERNELDEVEL
486
487 kernel_name = kernel-legacy
488 kernel_release = %{fullver}.legacy
489 end
490 end
491
492 if "%{build_kernel_kirkwood}" == "1"
493 package kernel-kirkwood
494 template KERNEL
495
496 kernel_name = kernel-kirkwood
497 kernel_release = %{fullver}.kirkwood
498 end
499
500 package kernel-kirkwood-devel
501 template KERNELDEVEL
502
503 kernel_name = kernel-kirkwood
504 kernel_release = %{fullver}.kirkwood
505 end
506 end
507
508 if "%{build_kernel_omap}" == "1"
509 package kernel-omap
510 template KERNEL
511
512 kernel_name = kernel-omap
513 kernel_release = %{fullver}.omap
514 end
515
516 package kernel-omap-devel
517 template KERNELDEVEL
518
519 kernel_name = kernel-omap
520 kernel_release = %{fullver}.omap
521 end
522 end
523
524 package kernel-headers
525 summary = Header files of the kernel release %{fullver}.
526 desciption = %{summary}
527
528 files
529 /usr/include
530 end
531 end
532
533 package kernel-tools
534 summary = Assortment of tools for the Linux kernel.
535 description = %{summary}
536
537 filter_requires
538 perl>=[0-9]\:.*
539 end
540
541 files
542 /
543 !/boot
544 !/usr/include
545 !/usr/lib/modules
546 !/usr/src
547 !/usr/src/debug
548 !/usr/lib/debug
549 end
550 end
551 end