]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
Merge remote-tracking branch 'stevee/dracut-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.18.2
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}" == "armv5tel"
96 # Build a kernel for Marvell Kirkwood-based devices.
97 build_kernel_default = 1
98
99 kernel_arch = arm
100 kernel_target = zImage
101
102 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
103 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
104 end
105
106 if "%{DISTRO_ARCH}" == "armv7hl"
107 # Build the default unified kernel.
108 build_kernel_default = 1
109 build_kernel_lpae = 1
110
111 kernel_arch = arm
112 kernel_target = zImage
113 end
114
115 # mkimage is a requirement to build uImage images.
116 if "%{kernel_target}" == "uImage"
117 requires += u-boot-tools
118 end
119
120 # Build default kernel.
121 if "%{build_kernel_default}" == "1"
122 kernels += default
123 end
124
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
127 kernels += legacy
128 end
129
130 # Build lpae kernel
131 if "%{build_kernel_lpae}" == "1"
132 kernels += lpae
133 end
134
135 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
136 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
137 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
138
139 prepare_cmds
140 rm -f %{DIR_APP}/localversion-grsec
141
142 # Remove -Werror flag to fix ARMv5 build.
143 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
144
145 # Disable the colorize plugin.
146 # It's generally very nice but it clutters our
147 # logfiles.
148 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
149 -i Makefile
150
151 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
152
153 cp -vf %{kernel_logo} \
154 drivers/video/logo/logo_linux_clut224.ppm
155
156 # Get rid of unwanted files resulting from patch fuzz.
157 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
158
159 # Remove unnecessary SCM files.
160 find . -name .gitignore -exec rm -f {} \; >/dev/null
161
162 # This prevents scripts/setlocalversion from mucking with our version numbers.
163 touch .scmversion
164
165 mkdir -pv configs
166
167 cd %{DIR_SOURCE}
168 configure_kernel() {
169 local flavour=${1}
170 local suffix
171 if [ "${flavour}" != "default" ]; then
172 suffix="-${flavour}"
173 fi
174
175 scripts/configure --kernel-dir=%{DIR_APP} \
176 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
177 }
178
179 # Generate configuration files for all kernels we are going to
180 # build.
181 for kernel in %{kernels}; do
182 configure_kernel ${kernel}
183 done
184
185 # Tools
186 # Prevent perf from installing any files in /usr/libexec
187 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
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 --no-run-if-empty 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 # perf
315 %{perf_make} DESTDIR=%{BUILDROOT} all
316
317 # cpupower
318 chmod +x tools/power/cpupower/utils/version-gen.sh
319 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
320
321 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
322 pushd tools/power/cpupower/debug/x86_64
323 make %{MAKETUNING} centrino-decode powernow-k8-decode
324 popd
325 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
326 pushd tools/power/cpupower/debug/i386
327 make %{MAKETUNING} centrino-decode powernow-k8-decode
328 popd
329 fi
330
331 # Should be built for all x86 architectures
332 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
333 # Won't compile on i686
334 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
335 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
336 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
337 # ^
338 pushd tools/power/x86/x86_energy_perf_policy
339 make
340 popd
341
342 # Same as above
343 pushd tools/power/x86/turbostat
344 make
345 popd
346 fi
347
348 pushd tools/thermal/tmon
349 make
350 popd
351 end
352
353 install
354 # When no kernels are configured, we create a default config
355 # which enables us to install at least the header files.
356 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
357
358 # Install the header files
359 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
360 mkdir -pv %{BUILDROOT}/usr/include
361 find dest/include \( -name .install -o -name ..install.cmd \) -delete
362 cp -rv dest/include/* %{BUILDROOT}/usr/include
363
364 # Glibc provides these headers
365 rm -rfv %{BUILDROOT}/usr/include/scsi \
366 %{BUILDROOT}/usr/include/asm*/atomic.h \
367 %{BUILDROOT}/usr/include/asm*/io.h \
368 %{BUILDROOT}/usr/include/asm*/irq.h
369
370 # Remove all firmware files which are distributed by linux-firmware
371 rm -rfv %{BUILDROOT}/lib/firmware
372
373 # Install tools.
374 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
375
376 # cpupower
377 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
378 mandir=%{mandir} CPUFREQ_BENCH=false install
379
380 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
381 pushd tools/power/cpupower/debug/x86_64
382 install -m 755 centrino-decode \
383 %{BUILDROOT}/usr/bin/centrino-decode
384 install -m 755 powernow-k8-decode \
385 %{BUILDROOT}/usr/bin/powernow-k8-decode
386 popd
387 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
388 pushd tools/power/cpupower/debug/i386
389 install -m 755 centrino-decode \
390 %{BUILDROOT}/usr/bin/centrino-decode
391 install -m 755 powernow-k8-decode \
392 %{BUILDROOT}/usr/bin/powernow-k8-decode
393 popd
394 fi
395
396 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
397
398 # This should be built for all x86 architectures
399 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
400 mkdir -pv %{BUILDROOT}%{mandir}/man8
401
402 pushd tools/power/x86/x86_energy_perf_policy
403 make DESTDIR=%{BUILDROOT} install
404 popd
405
406 pushd tools/power/x86/turbostat
407 make DESTDIR=%{BUILDROOT} install
408 popd
409 fi
410
411 # tmon
412 pushd tools/thermal/tmon
413 make INSTALL_ROOT=%{BUILDROOT} install
414 popd
415 end
416 end
417
418 packages
419 template KERNEL
420 kernel_name = kernel
421 kernel_release = %{fullver}
422
423 summary = The Linux kernel %{kernel_release}.
424
425 prerequires
426 /sbin/depmod
427 end
428
429 provides
430 kernel=%{kernel_release}
431 end
432
433 requires
434 dracut
435 grubby
436 linux-firmware
437 end
438
439 files
440 /boot/System.map-%{kernel_release}
441 /boot/dtb-%{kernel_release}
442 /boot/vmlinuz-%{kernel_release}
443 /boot/initramfs-%{kernel_release}.img
444 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
445 /usr/lib/modules/%{kernel_release}
446 end
447
448 _posttrans
449 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
450 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
451 end
452
453 script posttransin
454 %{_posttrans}
455 end
456
457 script posttransup
458 %{_posttrans}
459 end
460
461 script postin
462 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
463 end
464
465 script postup
466 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
467 end
468
469 script preun
470 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
471 end
472 end
473
474 template KERNELDEVEL
475 kernel_release = %{fullver}
476
477 summary = Development files of kernel-%{kernel_release}.
478 description
479 %{summary}
480
481 Install this package in order to compile modules for
482 kernel release %{kernel_release}.
483 end
484
485 provides
486 kernel-devel = %{thisver}
487 end
488
489 filter_requires
490 perl>=[0-9]\:.*
491 end
492
493 files
494 /usr/lib/modules/%{kernel_release}/build
495 /usr/lib/modules/%{kernel_release}/source
496 /usr/src/kernels/%{kernel_release}
497 end
498 end
499
500 if "%{build_kernel_default}" == "1"
501 if "%{DISTRO_ARCH}" == "armv7hl"
502 package kernel
503 template KERNEL
504
505 kernel_name = kernel
506 kernel_release = %{fullver}
507
508 # Replace the Exynos kernel.
509 obsoletes += kernel-exynos < %{kernel_release}
510 conflicts += kernel-exynos < %{kernel_release}
511
512 # Replace the OMAP kernel.
513 obsoletes += kernel-omap < %{kernel_release}
514 conflicts += kernel-omap < %{kernel_release}
515 end
516
517 package kernel-devel
518 template KERNELDEVEL
519
520 kernel_name = kernel
521 kernel_release = %{fullver}
522
523 # Replace the Exynos kernel.
524 obsoletes += kernel-exynos-devel < %{kernel_release}
525 conflicts += kernel-exynos-devel < %{kernel_release}
526
527 # Replace the OMAP kernel.
528 obsoletes += kernel-omap-devel < %{kernel_release}
529 conflicts += kernel-omap-devel < %{kernel_release}
530 end
531
532 else
533 package kernel
534 template KERNEL
535
536 kernel_name = kernel
537 kernel_release = %{fullver}
538 end
539
540 package kernel-devel
541 template KERNELDEVEL
542
543 kernel_name = kernel
544 kernel_release = %{fullver}
545 end
546 end
547 end
548
549 if "%{build_kernel_legacy}" == "1"
550 package kernel-legacy
551 template KERNEL
552
553 kernel_name = kernel-legacy
554 kernel_release = %{fullver}.legacy
555 end
556
557 package kernel-legacy-devel
558 template KERNELDEVEL
559
560 kernel_name = kernel-legacy
561 kernel_release = %{fullver}.legacy
562 end
563 end
564
565 if "%{build_kernel_lpae}" == "1"
566 package kernel-lpae
567 template KERNEL
568
569 kernel_name = kernel-lpae
570 kernel_release = %{fullver}.lpae
571 end
572
573 package kernel-lpae-devel
574 template KERNELDEVEL
575
576 kernel_name = kernel-lpae
577 kernel_release = %{fullver}.lpae
578 end
579 end
580
581 package kernel-headers
582 summary = Header files of the kernel release %{fullver}.
583 desciption = %{summary}
584
585 files
586 /usr/include
587 end
588 end
589
590 package kernel-tools
591 summary = Assortment of tools for the Linux kernel.
592 description = %{summary}
593
594 filter_requires
595 perl>=[0-9]\:.*
596 end
597
598 files
599 /
600 !/boot
601 !/usr/include
602 !/usr/lib/modules
603 !/usr/src
604 !/usr/src/debug
605 !/usr/lib/debug
606 end
607 end
608 end