]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blob - kernel/kernel.nm
Merge branch 'master' of ssh://git.ipfire.org/pub/git/ipfire-3.x
[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.8.2
8 release = 0.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 binutils >= 2.23.51.0.3-3
43 binutils-devel
44 bison
45 elfutils-devel
46 flex
47 gcc-plugin-devel
48 gettext
49 libunwind-devel
50 ncurses-devel
51 net-tools
52 newt-devel
53 pciutils-devel
54 perl
55 python-devel
56 slang-devel
57 xmlto
58
59 /sbin/depmod
60 %{kernel_logo}
61 end
62
63 # i686 needs librmi for cpupower.
64 if "%{DISTRO_ARCH}" == "i686"
65 requires += liblrmi-devel
66 end
67
68 # A list of kernels to build.
69 kernels =
70
71 # Arguments that are passed to the kernel build command.
72 kernel_build_flags =
73
74 kernel_target = bzImage
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 kernel_image = arch/%{kernel_arch}/boot/bzImage
83
84 end
85
86 if "%{DISTRO_ARCH}" == "x86_64"
87 build_kernel_default = 1
88
89 kernel_arch = x86
90 kernel_image = arch/%{kernel_arch}/boot/bzImage
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_image = arch/%{kernel_arch}/boot/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 a kernel for Samsung's Exynos SoCs.
109 build_kernel_exynos = 1
110
111 # Build a kernel for TI OMAP SoCs.
112 build_kernel_omap = 1
113
114 kernel_arch = arm
115 kernel_image = arch/%{kernel_arch}/boot/zImage
116 end
117
118 # Build default kernel.
119 if "%{build_kernel_default}" == "1"
120 kernels += default
121 end
122
123 # Build exynos kernel.
124 if "%{build_kernel_exynos}" == "1"
125 kernels += exynos
126 end
127
128 # Build legacy kernel.
129 if "%{build_kernel_legacy}" == "1"
130 kernels += legacy
131 end
132
133 # Build ARM kirkwood kernel.
134 if "%{build_kernel_kirkwood}" == "1"
135 kernels += kirkwood
136 end
137
138 # Build ARM omap kernel.
139 if "%{build_kernel_omap}" == "1"
140 kernels += omap
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 # Install the results.
219 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
220 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
221 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
222 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
223
224 # Create empty initramfs (20M).
225 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
226
227 # Install modules.
228 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
229 KERNELRELEASE=${fullversion} modules_install
230
231 # Install vdso.
232 case "%{DISTRO_ARCH}" in
233 i686)
234 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
235 KERNELRELEASE=${fullversion} vdso_install
236 ;;
237 esac
238
239 # Create an empty settings file for dracut
240 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
241 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
242 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
243
244 # And now the scary looking part.
245 #
246 # Recreate source and build links.
247 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
248 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
249 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
250
251 # Create dirs for extra modules.
252 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
253
254 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
255 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
256 cp Module.symvers System.map \
257 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
258 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
259
260 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
261 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
262 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
263 -exec rm -vf {} \;
264
265 cp -a --parents arch/%{kernel_arch}/include \
266 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
267 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
268
269 # Make sure we can build external modules.
270 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
271 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
272 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
273 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
274 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
275 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
276
277 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
278 xargs chmod u+x
279
280 # Move all development files to /usr/src.
281 mkdir -p %{BUILDROOT}/usr/src/kernels
282 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
283 %{BUILDROOT}/usr/src/kernels/${fullversion}
284 ln -sf ../../../src/kernels/${fullversion} \
285 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
286
287 # Fix permissions.
288 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
289 -exec chmod 644 {} \;
290
291 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
292 }
293
294 for kernel in %{kernels}; do
295 build_kernel ${kernel}
296 done
297
298 # Build tools.
299 # cpupower
300 chmod +x tools/power/cpupower/utils/version-gen.sh
301 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
302
303 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
304 pushd tools/power/cpupower/debug/x86_64
305 make %{MAKETUNING}
306 popd
307 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
308 pushd tools/power/cpupower/debug/i386
309 make %{MAKETUNING}
310 popd
311 fi
312 end
313
314 install
315 # When no kernels are configured, we create a default config
316 # which enables us to install at least the header files.
317 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
318
319 # Install the header files
320 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
321 mkdir -pv %{BUILDROOT}/usr/include
322 find dest/include \( -name .install -o -name ..install.cmd \) -delete
323 cp -rv dest/include/* %{BUILDROOT}/usr/include
324
325 # Glibc provides these headers
326 rm -rfv %{BUILDROOT}/usr/include/scsi \
327 %{BUILDROOT}/usr/include/asm*/atomic.h \
328 %{BUILDROOT}/usr/include/asm*/io.h \
329 %{BUILDROOT}/usr/include/asm*/irq.h
330
331 # Remove all firmware files which are distributed by linux-firmware
332 rm -rfv %{BUILDROOT}/lib/firmware
333
334 # Install tools.
335 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
336 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
337 install install-man install-python_ext
338
339 # cpupower
340 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
341 mandir=%{mandir} CPUFREQ_BENCH=false install
342
343 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
344 pushd tools/power/cpupower/debug/x86_64
345 install -m 755 centrino-decode \
346 %{BUILDROOT}/usr/bin/centrino-decode
347 install -m 755 powernow-k8-decode \
348 %{BUILDROOT}/usr/bin/powernow-k8-decode
349 popd
350 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
351 pushd tools/power/cpupower/debug/i386
352 install -m 755 centrino-decode \
353 %{BUILDROOT}/usr/bin/centrino-decode
354 install -m 755 powernow-k8-decode \
355 %{BUILDROOT}/usr/bin/powernow-k8-decode
356 popd
357 fi
358
359 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
360 end
361 end
362
363 packages
364 template KERNEL
365 kernel_name = kernel
366 kernel_release = %{fullver}
367
368 summary = The Linux kernel %{kernel_release}.
369
370 prerequires
371 /sbin/depmod
372 end
373
374 provides
375 kernel=%{kernel_release}
376 end
377
378 requires
379 dracut
380 grubby
381 linux-firmware
382 end
383
384 files
385 /boot/System.map-%{kernel_release}
386 /boot/vmlinuz-%{kernel_release}
387 /boot/initramfs-%{kernel_release}.img
388 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
389 /usr/lib/modules/%{kernel_release}
390 end
391
392 _posttrans
393 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
394 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
395 end
396
397 script posttransin
398 %{_posttrans}
399 end
400
401 script posttransup
402 %{_posttrans}
403 end
404
405 script postin
406 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
407 end
408
409 script postup
410 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
411 end
412
413 script preun
414 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
415 end
416 end
417
418 template KERNELDEVEL
419 kernel_release = %{fullver}
420
421 summary = Development files of kernel-%{kernel_release}.
422 description
423 %{summary}
424
425 Install this package in order to compile modules for
426 kernel release %{kernel_release}.
427 end
428
429 filter_requires
430 perl>=[0-9]\:.*
431 end
432
433 files
434 /usr/lib/modules/%{kernel_release}/build
435 /usr/lib/modules/%{kernel_release}/source
436 /usr/src/kernels/%{kernel_release}
437 end
438 end
439
440 if "%{build_kernel_default}" == "1"
441 package kernel
442 template KERNEL
443
444 kernel_name = kernel
445 kernel_release = %{fullver}
446 end
447
448 package kernel-devel
449 template KERNELDEVEL
450
451 kernel_name = kernel
452 kernel_release = %{fullver}
453 end
454 end
455
456 if "%{build_kernel_exynos}" == "1"
457 package kernel-exynos
458 template KERNEL
459
460 kernel_name = kernel-exynos
461 kernel_release = %{fullver}.exynos
462 end
463
464 package kernel-exynos-devel
465 template KERNELDEVEL
466
467 kernel_name = kernel-exynos
468 kernel_release = %{fullver}.exynos
469 end
470 end
471
472 if "%{build_kernel_legacy}" == "1"
473 package kernel-legacy
474 template KERNEL
475
476 kernel_name = kernel-legacy
477 kernel_release = %{fullver}.legacy
478 end
479
480 package kernel-legacy-devel
481 template KERNELDEVEL
482
483 kernel_name = kernel-legacy
484 kernel_release = %{fullver}.legacy
485 end
486 end
487
488 if "%{build_kernel_kirkwood}" == "1"
489 package kernel-kirkwood
490 template KERNEL
491
492 kernel_name = kernel-kirkwood
493 kernel_release = %{fullver}.kirkwood
494 end
495
496 package kernel-kirkwood-devel
497 template KERNELDEVEL
498
499 kernel_name = kernel-kirkwood
500 kernel_release = %{fullver}.kirkwood
501 end
502 end
503
504 if "%{build_kernel_omap}" == "1"
505 package kernel-omap
506 template KERNEL
507
508 kernel_name = kernel-omap
509 kernel_release = %{fullver}.omap
510 end
511
512 package kernel-omap-devel
513 template KERNELDEVEL
514
515 kernel_name = kernel-omap
516 kernel_release = %{fullver}.omap
517 end
518 end
519
520 package kernel-headers
521 summary = Header files of the kernel release %{fullver}.
522 desciption = %{summary}
523
524 files
525 /usr/include
526 end
527 end
528
529 package kernel-tools
530 summary = Assortment of tools for the Linux kernel.
531 description = %{summary}
532
533 filter_requires
534 perl>=[0-9]\:.*
535 end
536
537 files
538 /
539 !/boot
540 !/usr/include
541 !/usr/lib/modules
542 !/usr/src
543 !/usr/src/debug
544 !/usr/lib/debug
545 end
546 end
547 end