]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame_incremental - kernel/kernel.nm
kernel: Update to 3.15.6.
[people/ms/ipfire-3.x.git] / kernel / kernel.nm
... / ...
CommitLineData
1###############################################################################
2# IPFire.org - An Open Source Firewall Solution #
3# Copyright (C) - IPFire Development Team <info@ipfire.org> #
4###############################################################################
5
6name = kernel
7version = 3.15.6
8release = 1
9thisapp = linux-%{version}
10
11maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12groups = System/Kernels
13url = http://www.kernel.org/
14license = GPLv2
15summary = The Linux kernel.
16
17description
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.
22end
23
24# Version helper variables.
25localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26fullver = %{version}-%{localversion}
27
28source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/
29sources = %{thisapp}.tar.xz
30
31build
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 # Build a kernel for Marvell Kirkwood-based devices.
95 build_kernel_default = 1
96
97 kernel_arch = arm
98 kernel_target = zImage
99
100 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
101 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
102 end
103
104 if "%{DISTRO_ARCH}" == "armv7hl"
105 # Build the default unified kernel.
106 build_kernel_default = 1
107 build_kernel_lpae = 1
108
109 kernel_arch = arm
110 kernel_target = zImage
111 end
112
113 # mkimage is a requirement to build uImage images.
114 if "%{kernel_target}" == "uImage"
115 requires += u-boot-tools
116 end
117
118 # Build default kernel.
119 if "%{build_kernel_default}" == "1"
120 kernels += default
121 end
122
123 # Build legacy kernel.
124 if "%{build_kernel_legacy}" == "1"
125 kernels += legacy
126 end
127
128 # Build lpae kernel
129 if "%{build_kernel_lpae}" == "1"
130 kernels += lpae
131 end
132
133 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
134 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
135 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
136
137 prepare_cmds
138 rm -f %{DIR_APP}/localversion-grsec
139
140 # Remove -Werror flag to fix ARMv5 build.
141 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
142
143 # Disable the colorize plugin.
144 # It's generally very nice but it clutters our
145 # logfiles.
146 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
147 -i Makefile
148
149 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
150
151 cp -vf %{kernel_logo} \
152 drivers/video/logo/logo_linux_clut224.ppm
153
154 # Get rid of unwanted files resulting from patch fuzz.
155 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
156
157 # Remove unnecessary SCM files.
158 find . -name .gitignore -exec rm -f {} \; >/dev/null
159
160 # This prevents scripts/setlocalversion from mucking with our version numbers.
161 touch .scmversion
162
163 mkdir -pv configs
164
165 cd %{DIR_SOURCE}
166 configure_kernel() {
167 local flavour=${1}
168 local suffix
169 if [ "${flavour}" != "default" ]; then
170 suffix="-${flavour}"
171 fi
172
173 scripts/configure --kernel-dir=%{DIR_APP} \
174 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
175 }
176
177 # Generate configuration files for all kernels we are going to
178 # build.
179 for kernel in %{kernels}; do
180 configure_kernel ${kernel}
181 done
182
183 # Tools
184 # Prevent perf from installing any files in /usr/libexec
185 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
186 end
187
188 build
189 build_kernel() {
190 local flavour=${1}
191 local suffix
192 local localversion="%{localversion}"
193 local fullversion="%{fullver}"
194 if [ "${flavour}" != "default" ]; then
195 suffix="-${flavour}"
196 localversion="${localversion}.${flavour}"
197 fullversion="${fullversion}.${flavour}"
198 fi
199
200 # Label the build.
201 sed -i Makefile \
202 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
203
204 # Clean up the source tree.
205 make mrproper
206
207 # Install configuration file.
208 cp configs/config.${flavour} .config
209 cat .config
210
211 # Run the build.
212 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
213 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
214 %{kernel_build_flags} %{PARALLELISMFLAGS}
215
216 # Compile Flattened Device Tree database
217 case "${DISTRO_ARCH}" in
218 arm*)
219 make ARCH=%{kernel_arch} dtbs
220
221 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
222 for file in arch/arm/boot/dts/*.dtb; do
223 [ -e "${file}" ] || continue
224
225 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
226 rm -f ${file}
227 done
228 ;;
229 esac
230
231 # Install the results.
232 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
233 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
234 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
235 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
236
237 # Create empty initramfs (20M).
238 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
239
240 # Install modules.
241 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
242 KERNELRELEASE=${fullversion} modules_install
243
244 # Install vdso.
245 case "%{DISTRO_ARCH}" in
246 i686)
247 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
248 KERNELRELEASE=${fullversion} vdso_install
249 ;;
250 esac
251
252 # Create an empty settings file for dracut
253 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
254 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
255 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
256
257 # And now the scary looking part.
258 #
259 # Recreate source and build links.
260 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
261 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
262 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
263
264 # Create dirs for extra modules.
265 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
266
267 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
268 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
269 cp Module.symvers System.map \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
271 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
272
273 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
274 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
275 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
276 -exec rm -vf {} \;
277
278 cp -a --parents arch/%{kernel_arch}/include \
279 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
280 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
281
282 # Make sure we can build external modules.
283 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
284 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
285 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
286 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
287 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
288 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
289
290 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
291 xargs chmod u+x
292
293 # Move all development files to /usr/src.
294 mkdir -p %{BUILDROOT}/usr/src/kernels
295 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
296 %{BUILDROOT}/usr/src/kernels/${fullversion}
297 ln -sf ../../../src/kernels/${fullversion} \
298 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
299
300 # Fix permissions.
301 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
302 -exec chmod 644 {} \;
303
304 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
305 }
306
307 for kernel in %{kernels}; do
308 build_kernel ${kernel}
309 done
310
311 # Build tools.
312 # perf
313 %{perf_make} DESTDIR=%{BUILDROOT} all
314
315 # cpupower
316 chmod +x tools/power/cpupower/utils/version-gen.sh
317 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
318
319 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
320 pushd tools/power/cpupower/debug/x86_64
321 make %{MAKETUNING} centrino-decode powernow-k8-decode
322 popd
323 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
324 pushd tools/power/cpupower/debug/i386
325 make %{MAKETUNING} centrino-decode powernow-k8-decode
326 popd
327 fi
328
329 # Should be built for all x86 architectures
330 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
331 # Won't compile on i686
332 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
333 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
334 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
335 # ^
336 pushd tools/power/x86/x86_energy_perf_policy
337 make
338 popd
339
340 # Same as above
341 pushd tools/power/x86/turbostat
342 make
343 popd
344 fi
345
346 pushd tools/thermal/tmon
347 make
348 popd
349 end
350
351 install
352 # When no kernels are configured, we create a default config
353 # which enables us to install at least the header files.
354 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
355
356 # Install the header files
357 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
358 mkdir -pv %{BUILDROOT}/usr/include
359 find dest/include \( -name .install -o -name ..install.cmd \) -delete
360 cp -rv dest/include/* %{BUILDROOT}/usr/include
361
362 # Glibc provides these headers
363 rm -rfv %{BUILDROOT}/usr/include/scsi \
364 %{BUILDROOT}/usr/include/asm*/atomic.h \
365 %{BUILDROOT}/usr/include/asm*/io.h \
366 %{BUILDROOT}/usr/include/asm*/irq.h
367
368 # Remove all firmware files which are distributed by linux-firmware
369 rm -rfv %{BUILDROOT}/lib/firmware
370
371 # Install tools.
372 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
373
374 # cpupower
375 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
376 mandir=%{mandir} CPUFREQ_BENCH=false install
377
378 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
379 pushd tools/power/cpupower/debug/x86_64
380 install -m 755 centrino-decode \
381 %{BUILDROOT}/usr/bin/centrino-decode
382 install -m 755 powernow-k8-decode \
383 %{BUILDROOT}/usr/bin/powernow-k8-decode
384 popd
385 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
386 pushd tools/power/cpupower/debug/i386
387 install -m 755 centrino-decode \
388 %{BUILDROOT}/usr/bin/centrino-decode
389 install -m 755 powernow-k8-decode \
390 %{BUILDROOT}/usr/bin/powernow-k8-decode
391 popd
392 fi
393
394 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
395
396 # This should be built for all x86 architectures
397 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
398 mkdir -pv %{BUILDROOT}%{mandir}/man8
399
400 pushd tools/power/x86/x86_energy_perf_policy
401 make DESTDIR=%{BUILDROOT} install
402 popd
403
404 pushd tools/power/x86/turbostat
405 make DESTDIR=%{BUILDROOT} install
406 popd
407 fi
408
409 # tmon
410 pushd tools/thermal/tmon
411 make INSTALL_ROOT=%{BUILDROOT} install
412 popd
413 end
414end
415
416packages
417 template KERNEL
418 kernel_name = kernel
419 kernel_release = %{fullver}
420
421 summary = The Linux kernel %{kernel_release}.
422
423 prerequires
424 /sbin/depmod
425 end
426
427 provides
428 kernel=%{kernel_release}
429 end
430
431 requires
432 dracut
433 grubby
434 linux-firmware
435 end
436
437 files
438 /boot/System.map-%{kernel_release}
439 /boot/dtb-%{kernel_release}
440 /boot/vmlinuz-%{kernel_release}
441 /boot/initramfs-%{kernel_release}.img
442 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
443 /usr/lib/modules/%{kernel_release}
444 end
445
446 _posttrans
447 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
448 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
449 end
450
451 script posttransin
452 %{_posttrans}
453 end
454
455 script posttransup
456 %{_posttrans}
457 end
458
459 script postin
460 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
461 end
462
463 script postup
464 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
465 end
466
467 script preun
468 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
469 end
470 end
471
472 template KERNELDEVEL
473 kernel_release = %{fullver}
474
475 summary = Development files of kernel-%{kernel_release}.
476 description
477 %{summary}
478
479 Install this package in order to compile modules for
480 kernel release %{kernel_release}.
481 end
482
483 provides
484 kernel-devel = %{thisver}
485 end
486
487 filter_requires
488 perl>=[0-9]\:.*
489 end
490
491 files
492 /usr/lib/modules/%{kernel_release}/build
493 /usr/lib/modules/%{kernel_release}/source
494 /usr/src/kernels/%{kernel_release}
495 end
496 end
497
498 if "%{build_kernel_default}" == "1"
499 if "%{DISTRO_ARCH}" == "armv7hl"
500 package kernel
501 template KERNEL
502
503 kernel_name = kernel
504 kernel_release = %{fullver}
505
506 # Replace the Exynos kernel.
507 obsoletes += kernel-exynos < %{kernel_release}
508 conflicts += kernel-exynos < %{kernel_release}
509
510 # Replace the OMAP kernel.
511 obsoletes += kernel-omap < %{kernel_release}
512 conflicts += kernel-omap < %{kernel_release}
513 end
514
515 package kernel-devel
516 template KERNELDEVEL
517
518 kernel_name = kernel
519 kernel_release = %{fullver}
520
521 # Replace the Exynos kernel.
522 obsoletes += kernel-exynos-devel < %{kernel_release}
523 conflicts += kernel-exynos-devel < %{kernel_release}
524
525 # Replace the OMAP kernel.
526 obsoletes += kernel-omap-devel < %{kernel_release}
527 conflicts += kernel-omap-devel < %{kernel_release}
528 end
529
530 else
531 package kernel
532 template KERNEL
533
534 kernel_name = kernel
535 kernel_release = %{fullver}
536 end
537
538 package kernel-devel
539 template KERNELDEVEL
540
541 kernel_name = kernel
542 kernel_release = %{fullver}
543 end
544 end
545 end
546
547 if "%{build_kernel_legacy}" == "1"
548 package kernel-legacy
549 template KERNEL
550
551 kernel_name = kernel-legacy
552 kernel_release = %{fullver}.legacy
553 end
554
555 package kernel-legacy-devel
556 template KERNELDEVEL
557
558 kernel_name = kernel-legacy
559 kernel_release = %{fullver}.legacy
560 end
561 end
562
563 if "%{build_kernel_lpae}" == "1"
564 package kernel-lpae
565 template KERNEL
566
567 kernel_name = kernel-lpae
568 kernel_release = %{fullver}.lpae
569 end
570
571 package kernel-lpae-devel
572 template KERNELDEVEL
573
574 kernel_name = kernel-lpae
575 kernel_release = %{fullver}.lpae
576 end
577 end
578
579 package kernel-headers
580 summary = Header files of the kernel release %{fullver}.
581 desciption = %{summary}
582
583 files
584 /usr/include
585 end
586 end
587
588 package kernel-tools
589 summary = Assortment of tools for the Linux kernel.
590 description = %{summary}
591
592 filter_requires
593 perl>=[0-9]\:.*
594 end
595
596 files
597 /
598 !/boot
599 !/usr/include
600 !/usr/lib/modules
601 !/usr/src
602 !/usr/src/debug
603 !/usr/lib/debug
604 end
605 end
606end