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