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