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