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