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