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