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