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