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