]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Update to version 3.18.7
[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.18.7
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 >= 4.9
49 gcc-plugin-devel
50 gettext
51 libunwind-devel
52 ncurses-devel
53 net-tools
54 newt-devel
55 pciutils-devel
56 perl
57 python-devel
58 slang-devel
59 xmlto
60 xz
61
62 /sbin/depmod
63 %{kernel_logo}
64 end
65
66 # i686 needs librmi for cpupower.
67 if "%{DISTRO_ARCH}" == "i686"
68 requires += liblrmi-devel
69 end
70
71 # A list of kernels to build.
72 kernels =
73
74 # Arguments that are passed to the kernel build command.
75 kernel_build_flags =
76
77 kernel_target = bzImage
78 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
79
80 if "%{DISTRO_ARCH}" == "i686"
81 # Build a default and legacy kernel for the
82 # i686 architecture.
83 build_kernel_default = 1
84 build_kernel_legacy = 1
85
86 kernel_arch = x86
87 end
88
89 if "%{DISTRO_ARCH}" == "x86_64"
90 build_kernel_default = 1
91
92 kernel_arch = x86
93 end
94
95 if "%{DISTRO_ARCH}" == "aarch64"
96 # Disable for now because it won't compile
97 build_kernel_default = 0
98
99 kernel_arch = arm64
100 kernel_target = Image.gz
101 end
102
103 if "%{DISTRO_ARCH}" == "armv5tel"
104 # Build a kernel for Marvell Kirkwood-based devices.
105 build_kernel_default = 1
106
107 kernel_arch = arm
108 kernel_target = zImage
109
110 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
111 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
112 end
113
114 if "%{DISTRO_ARCH}" == "armv7hl"
115 # Build the default unified kernel.
116 build_kernel_default = 1
117 build_kernel_lpae = 1
118
119 kernel_arch = arm
120 kernel_target = zImage
121 end
122
123 # mkimage is a requirement to build uImage images.
124 if "%{kernel_target}" == "uImage"
125 requires += u-boot-tools
126 end
127
128 # Build default kernel.
129 if "%{build_kernel_default}" == "1"
130 kernels += default
131 end
132
133 # Build legacy kernel.
134 if "%{build_kernel_legacy}" == "1"
135 kernels += legacy
136 end
137
138 # Build lpae kernel
139 if "%{build_kernel_lpae}" == "1"
140 kernels += lpae
141 end
142
143 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
144 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
145 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
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
193 # Tools
194 # Prevent perf from installing any files in /usr/libexec
195 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
196 end
197
198 build
199 build_kernel() {
200 local flavour=${1}
201 local suffix
202 local localversion="%{localversion}"
203 local fullversion="%{fullver}"
204 if [ "${flavour}" != "default" ]; then
205 suffix="-${flavour}"
206 localversion="${localversion}.${flavour}"
207 fullversion="${fullversion}.${flavour}"
208 fi
209
210 # Label the build.
211 sed -i Makefile \
212 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
213
214 # Clean up the source tree.
215 make mrproper
216
217 # Install configuration file.
218 cp configs/config.${flavour} .config
219 cat .config
220
221 # Run the build.
222 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
223 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
224 %{kernel_build_flags} %{PARALLELISMFLAGS}
225
226 # Compile Flattened Device Tree database
227 case "${DISTRO_ARCH}" in
228 aarch64|arm*)
229 make ARCH=%{kernel_arch} dtbs
230
231 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
232 for file in arch/arm/boot/dts/*.dtb; do
233 [ -e "${file}" ] || continue
234
235 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
236 rm -f ${file}
237 done
238 ;;
239 esac
240
241 # Install the results.
242 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
243 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
244 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
245 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
246
247 # Create empty initramfs (20M).
248 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
249
250 # Install modules.
251 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
252 KERNELRELEASE=${fullversion} modules_install
253
254 # Install vdso.
255 case "%{DISTRO_ARCH}" in
256 i686)
257 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
258 KERNELRELEASE=${fullversion} vdso_install
259 ;;
260 esac
261
262 # Create an empty settings file for dracut
263 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
264 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
265 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
266
267 # And now the scary looking part.
268 #
269 # Recreate source and build links.
270 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
271 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
272 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
273
274 # Create dirs for extra modules.
275 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
276
277 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
278 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
279 cp Module.symvers System.map \
280 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
281 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
282
283 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
284 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
285 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
286 -exec rm -vf {} \;
287
288 cp -a --parents arch/%{kernel_arch}/include \
289 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
290 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
291
292 # Make sure we can build external modules.
293 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
294 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
295 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
296 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
297 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
298 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
299
300 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
301 xargs --no-run-if-empty chmod u+x
302
303 # Move all development files to /usr/src.
304 mkdir -p %{BUILDROOT}/usr/src/kernels
305 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
306 %{BUILDROOT}/usr/src/kernels/${fullversion}
307 ln -sf ../../../src/kernels/${fullversion} \
308 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
309
310 # Fix permissions.
311 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
312 -exec chmod 644 {} \;
313
314 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
315 }
316
317 for kernel in %{kernels}; do
318 build_kernel ${kernel}
319 done
320
321 # Build tools.
322 # perf
323 %{perf_make} DESTDIR=%{BUILDROOT} all
324
325 # cpupower
326 chmod +x tools/power/cpupower/utils/version-gen.sh
327 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
328
329 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
330 pushd tools/power/cpupower/debug/x86_64
331 make %{MAKETUNING} centrino-decode powernow-k8-decode
332 popd
333 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
334 pushd tools/power/cpupower/debug/i386
335 make %{MAKETUNING} centrino-decode powernow-k8-decode
336 popd
337 fi
338
339 # Should be built for all x86 architectures
340 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
341 # Won't compile on i686
342 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
343 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
344 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
345 # ^
346 pushd tools/power/x86/x86_energy_perf_policy
347 make
348 popd
349
350 # Same as above
351 pushd tools/power/x86/turbostat
352 make
353 popd
354 fi
355
356 pushd tools/thermal/tmon
357 make
358 popd
359 end
360
361 install
362 # When no kernels are configured, we create a default config
363 # which enables us to install at least the header files.
364 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
365
366 # Install the header files
367 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
368 mkdir -pv %{BUILDROOT}/usr/include
369 find dest/include \( -name .install -o -name ..install.cmd \) -delete
370 cp -rv dest/include/* %{BUILDROOT}/usr/include
371
372 # Glibc provides these headers
373 rm -rfv %{BUILDROOT}/usr/include/scsi \
374 %{BUILDROOT}/usr/include/asm*/atomic.h \
375 %{BUILDROOT}/usr/include/asm*/io.h \
376 %{BUILDROOT}/usr/include/asm*/irq.h
377
378 # Remove all firmware files which are distributed by linux-firmware
379 rm -rfv %{BUILDROOT}/lib/firmware
380
381 # Install tools.
382 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
383
384 # cpupower
385 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
386 mandir=%{mandir} CPUFREQ_BENCH=false install
387
388 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
389 pushd tools/power/cpupower/debug/x86_64
390 install -m 755 centrino-decode \
391 %{BUILDROOT}/usr/bin/centrino-decode
392 install -m 755 powernow-k8-decode \
393 %{BUILDROOT}/usr/bin/powernow-k8-decode
394 popd
395 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
396 pushd tools/power/cpupower/debug/i386
397 install -m 755 centrino-decode \
398 %{BUILDROOT}/usr/bin/centrino-decode
399 install -m 755 powernow-k8-decode \
400 %{BUILDROOT}/usr/bin/powernow-k8-decode
401 popd
402 fi
403
404 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
405
406 # This should be built for all x86 architectures
407 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
408 mkdir -pv %{BUILDROOT}%{mandir}/man8
409
410 pushd tools/power/x86/x86_energy_perf_policy
411 make DESTDIR=%{BUILDROOT} install
412 popd
413
414 pushd tools/power/x86/turbostat
415 make DESTDIR=%{BUILDROOT} install
416 popd
417 fi
418
419 # tmon
420 pushd tools/thermal/tmon
421 make INSTALL_ROOT=%{BUILDROOT} install
422 popd
423 end
424 end
425
426 packages
427 template KERNEL
428 kernel_name = kernel
429 kernel_release = %{fullver}
430
431 summary = The Linux kernel %{kernel_release}.
432
433 prerequires
434 /sbin/depmod
435 end
436
437 provides
438 kernel=%{kernel_release}
439 end
440
441 requires
442 dracut
443 grubby
444 linux-firmware
445 end
446
447 files
448 /boot/System.map-%{kernel_release}
449 /boot/dtb-%{kernel_release}
450 /boot/vmlinuz-%{kernel_release}
451 /boot/initramfs-%{kernel_release}.img
452 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
453 /usr/lib/modules/%{kernel_release}
454 end
455
456 _posttrans
457 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
458 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
459 end
460
461 script posttransin
462 %{_posttrans}
463 end
464
465 script posttransup
466 %{_posttrans}
467 end
468
469 script postin
470 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
471 end
472
473 script postup
474 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
475 end
476
477 script preun
478 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
479 end
480 end
481
482 template KERNELDEVEL
483 kernel_release = %{fullver}
484
485 summary = Development files of kernel-%{kernel_release}.
486 description
487 %{summary}
488
489 Install this package in order to compile modules for
490 kernel release %{kernel_release}.
491 end
492
493 provides
494 kernel-devel = %{thisver}
495 end
496
497 filter_requires
498 perl>=[0-9]\:.*
499 end
500
501 files
502 /usr/lib/modules/%{kernel_release}/build
503 /usr/lib/modules/%{kernel_release}/source
504 /usr/src/kernels/%{kernel_release}
505 end
506 end
507
508 if "%{build_kernel_default}" == "1"
509 if "%{DISTRO_ARCH}" == "armv7hl"
510 package kernel
511 template KERNEL
512
513 kernel_name = kernel
514 kernel_release = %{fullver}
515
516 # Replace the Exynos kernel.
517 obsoletes += kernel-exynos < %{kernel_release}
518 conflicts += kernel-exynos < %{kernel_release}
519
520 # Replace the OMAP kernel.
521 obsoletes += kernel-omap < %{kernel_release}
522 conflicts += kernel-omap < %{kernel_release}
523 end
524
525 package kernel-devel
526 template KERNELDEVEL
527
528 kernel_name = kernel
529 kernel_release = %{fullver}
530
531 # Replace the Exynos kernel.
532 obsoletes += kernel-exynos-devel < %{kernel_release}
533 conflicts += kernel-exynos-devel < %{kernel_release}
534
535 # Replace the OMAP kernel.
536 obsoletes += kernel-omap-devel < %{kernel_release}
537 conflicts += kernel-omap-devel < %{kernel_release}
538 end
539
540 else
541 package kernel
542 template KERNEL
543
544 kernel_name = kernel
545 kernel_release = %{fullver}
546 end
547
548 package kernel-devel
549 template KERNELDEVEL
550
551 kernel_name = kernel
552 kernel_release = %{fullver}
553 end
554 end
555 end
556
557 if "%{build_kernel_legacy}" == "1"
558 package kernel-legacy
559 template KERNEL
560
561 kernel_name = kernel-legacy
562 kernel_release = %{fullver}.legacy
563 end
564
565 package kernel-legacy-devel
566 template KERNELDEVEL
567
568 kernel_name = kernel-legacy
569 kernel_release = %{fullver}.legacy
570 end
571 end
572
573 if "%{build_kernel_lpae}" == "1"
574 package kernel-lpae
575 template KERNEL
576
577 kernel_name = kernel-lpae
578 kernel_release = %{fullver}.lpae
579 end
580
581 package kernel-lpae-devel
582 template KERNELDEVEL
583
584 kernel_name = kernel-lpae
585 kernel_release = %{fullver}.lpae
586 end
587 end
588
589 package kernel-headers
590 summary = Header files of the kernel release %{fullver}.
591 desciption = %{summary}
592
593 files
594 /usr/include
595 end
596 end
597
598 package kernel-tools
599 summary = Assortment of tools for the Linux kernel.
600 description = %{summary}
601
602 filter_requires
603 perl>=[0-9]\:.*
604 end
605
606 files
607 /
608 !/boot
609 !/usr/include
610 !/usr/lib/modules
611 !/usr/src
612 !/usr/src/debug
613 !/usr/lib/debug
614 end
615 end
616 end