]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame - kernel/kernel.nm
Merge remote-tracking branch 'stevee/dosfsutils-update'
[people/ms/ipfire-3.x.git] / kernel / kernel.nm
CommitLineData
166a6c21 1###############################################################################
802ea3af
MT
2# IPFire.org - An Open Source Firewall Solution #
3# Copyright (C) - IPFire Development Team <info@ipfire.org> #
166a6c21
MT
4###############################################################################
5
15a11c5b 6name = kernel
b1cbc577 7version = 3.12.4
0db4b328 8release = 1
15a11c5b 9thisapp = linux-%{version}
166a6c21 10
81bb0557 11maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
802ea3af
MT
12groups = System/Kernels
13url = http://www.kernel.org/
14license = GPLv2
15summary = The Linux kernel.
166a6c21 16
802ea3af 17description
4c928ab7
MT
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
166a6c21 21 input and output, etc.
802ea3af 22end
166a6c21 23
802ea3af 24# Version helper variables.
bcf38aec
MT
25localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26fullver = %{version}-%{localversion}
802ea3af 27
fe014038
MT
28source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/
29sources = %{thisapp}.tar.xz
802ea3af
MT
30
31build
ebeed08a
MT
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
6b6a8ff6
MT
37 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
38
802ea3af 39 requires
662414a4 40 asciidoc
81bb0557 41 audit-devel
7f6f4de5 42 bc
7c69f2c2 43 binutils >= 2.23.51.0.3-3
bcf38aec 44 binutils-devel
c6e2a6c8 45 bison
bcf38aec 46 elfutils-devel
c6e2a6c8 47 flex
fe2de317 48 gcc-plugin-devel
6e9df6a3 49 gettext
81bb0557 50 libunwind-devel
802ea3af 51 ncurses-devel
ebeed08a 52 net-tools
7c69f2c2
MT
53 newt-devel
54 pciutils-devel
802ea3af 55 perl
bcf38aec 56 python-devel
7c69f2c2 57 slang-devel
662414a4 58 xmlto
4c928ab7
MT
59
60 /sbin/depmod
6b6a8ff6 61 %{kernel_logo}
bcf38aec
MT
62 end
63
7c69f2c2
MT
64 # i686 needs librmi for cpupower.
65 if "%{DISTRO_ARCH}" == "i686"
66 requires += liblrmi-devel
13c9d848
MT
67 end
68
bcf38aec 69 # A list of kernels to build.
45088e83 70 kernels =
bcf38aec 71
572b4308
MT
72 # Arguments that are passed to the kernel build command.
73 kernel_build_flags =
74
45088e83 75 kernel_target = bzImage
967da24b
MT
76 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
77
bcf38aec 78 if "%{DISTRO_ARCH}" == "i686"
1c9b6c79 79 # Build a default and legacy kernel for the
45088e83
MT
80 # i686 architecture.
81 build_kernel_default = 1
1c9b6c79 82 build_kernel_legacy = 1
bcf38aec 83
967da24b 84 kernel_arch = x86
45088e83
MT
85 end
86
c112b2e3
MT
87 if "%{DISTRO_ARCH}" == "x86_64"
88 build_kernel_default = 1
89
967da24b 90 kernel_arch = x86
c112b2e3
MT
91 end
92
45088e83 93 if "%{DISTRO_ARCH}" == "armv5tel"
4c928ab7
MT
94 # ERROR Currently all kernel images are disabled, because they
95 # won't build with the grsecurity patch.
96
4c928ab7 97 # Build a kernel for Marvell Kirkwood-based devices.
c6e2a6c8 98 build_kernel_kirkwood = 1
45088e83 99
967da24b
MT
100 kernel_arch = arm
101 kernel_target = zImage
45088e83 102
572b4308
MT
103 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
104 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
45088e83
MT
105 end
106
13c9d848 107 if "%{DISTRO_ARCH}" == "armv7hl"
7f6f4de5
MT
108 # Build the default unified kernel.
109 build_kernel_default = 1
110
967da24b 111 kernel_arch = arm
7f6f4de5 112 kernel_target = zImage
967da24b
MT
113 end
114
115 # mkimage is a requirement to build uImage images.
116 if "%{kernel_target}" == "uImage"
117 requires += u-boot-tools
13c9d848
MT
118 end
119
45088e83
MT
120 # Build default kernel.
121 if "%{build_kernel_default}" == "1"
122 kernels += default
123 end
124
1c9b6c79
MT
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
127 kernels += legacy
45088e83
MT
128 end
129
4c928ab7
MT
130 # Build ARM kirkwood kernel.
131 if "%{build_kernel_kirkwood}" == "1"
132 kernels += kirkwood
133 end
134
802ea3af 135 prepare_cmds
802ea3af
MT
136 rm -f %{DIR_APP}/localversion-grsec
137
5e856224 138 # Remove -Werror flag to fix ARMv5 build.
703bc627 139 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
5e856224
MT
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
802ea3af
MT
147 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
148
6b6a8ff6 149 cp -vf %{kernel_logo} \
802ea3af
MT
150 drivers/video/logo/logo_linux_clut224.ppm
151
bcf38aec
MT
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
ebeed08a
MT
158 # This prevents scripts/setlocalversion from mucking with our version numbers.
159 touch .scmversion
160
bcf38aec 161 mkdir -pv configs
4c928ab7
MT
162
163 cd %{DIR_SOURCE}
bcf38aec
MT
164 configure_kernel() {
165 local flavour=${1}
166 local suffix
167 if [ "${flavour}" != "default" ]; then
168 suffix="-${flavour}"
169 fi
170
4c928ab7
MT
171 scripts/configure --kernel-dir=%{DIR_APP} \
172 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
bcf38aec
MT
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
802ea3af
MT
180 end
181
182 build
bcf38aec
MT
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
802ea3af 193
ebeed08a
MT
194 # Label the build.
195 sed -i Makefile \
196 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
197
bcf38aec
MT
198 # Clean up the source tree.
199 make mrproper
802ea3af 200
bcf38aec
MT
201 # Install configuration file.
202 cp configs/config.${flavour} .config
c6e2a6c8 203 cat .config
802ea3af 204
bcf38aec 205 # Run the build.
ebeed08a 206 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
572b4308
MT
207 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
208 %{kernel_build_flags} %{PARALLELISMFLAGS}
bcf38aec 209
9d4be168
MT
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
bcf38aec 225 # Install the results.
c4ef5c45 226 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
bcf38aec
MT
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.
81bb0557 235 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
bcf38aec 236 KERNELRELEASE=${fullversion} modules_install
c8f122e5
MT
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
802ea3af 245
bcf38aec 246 # Create an empty settings file for dracut
7c69f2c2 247 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
bcf38aec
MT
248 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
249 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
802ea3af 250
bcf38aec
MT
251 # And now the scary looking part.
252 #
253 # Recreate source and build links.
7c69f2c2
MT
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
802ea3af 257
bcf38aec 258 # Create dirs for extra modules.
7c69f2c2 259 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
802ea3af 260
7c69f2c2 261 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
c4ef5c45 262 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 263 cp Module.symvers System.map \
c4ef5c45 264 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 265 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
bcf38aec 266
7c69f2c2
MT
267 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
268 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
c4ef5c45 269 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
bcf38aec
MT
270 -exec rm -vf {} \;
271
7c69f2c2 272 cp -a --parents arch/%{kernel_arch}/include \
c4ef5c45 273 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 274 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
bcf38aec
MT
275
276 # Make sure we can build external modules.
c4ef5c45
MT
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
7c69f2c2 281 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
c4ef5c45
MT
282 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
283
284 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
bcf38aec
MT
285 xargs chmod u+x
286
bcf38aec 287 # Move all development files to /usr/src.
7c69f2c2
MT
288 mkdir -p %{BUILDROOT}/usr/src/kernels
289 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
bcf38aec 290 %{BUILDROOT}/usr/src/kernels/${fullversion}
7c69f2c2 291 ln -sf ../../../src/kernels/${fullversion} \
c4ef5c45 292 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
bcf38aec 293
81bb0557
MT
294 # Fix permissions.
295 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
296 -exec chmod 644 {} \;
297
bcf38aec
MT
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
6e9df6a3
MT
304
305 # Build tools.
306 # cpupower
7c69f2c2
MT
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
45088e83 318 fi
bcf38aec
MT
319 end
320
321 install
4c928ab7
MT
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
802ea3af 326 # Install the header files
c8f122e5 327 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
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
15a11c5b
MT
338 # Remove all firmware files which are distributed by linux-firmware
339 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
340
341 # Install tools.
028e459b 342 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
ebeed08a 343 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
7c69f2c2 344 install install-man install-python_ext
6e9df6a3
MT
345
346 # cpupower
7c69f2c2
MT
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
45088e83 364 fi
7c69f2c2
MT
365
366 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
802ea3af
MT
367 end
368end
369
370packages
bcf38aec 371 template KERNEL
aa3ab846 372 kernel_name = kernel
bcf38aec
MT
373 kernel_release = %{fullver}
374
375 summary = The Linux kernel %{kernel_release}.
376
1c9b6c79 377 prerequires
4c928ab7 378 /sbin/depmod
1c9b6c79
MT
379 end
380
381 provides
382 kernel=%{kernel_release}
383 end
384
802ea3af 385 requires
4c928ab7
MT
386 dracut
387 grubby
802ea3af
MT
388 linux-firmware
389 end
ad1ea534 390
bcf38aec
MT
391 files
392 /boot/System.map-%{kernel_release}
9d4be168 393 /boot/dtb-%{kernel_release}
bcf38aec
MT
394 /boot/vmlinuz-%{kernel_release}
395 /boot/initramfs-%{kernel_release}.img
396 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
c4ef5c45 397 /usr/lib/modules/%{kernel_release}
bcf38aec
MT
398 end
399
aa3ab846 400 _posttrans
c8f9fe35
MT
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}
aa3ab846
MT
403 end
404
ad1ea534 405 script posttransin
aa3ab846
MT
406 %{_posttrans}
407 end
408
409 script posttransup
410 %{_posttrans}
411 end
412
413 script postin
c8f9fe35 414 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
aa3ab846
MT
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}
bcf38aec
MT
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
10756fd5
MT
437 provides
438 kernel-devel = %{thisver}
439 end
440
bcf38aec
MT
441 filter_requires
442 perl>=[0-9]\:.*
ad1ea534
MT
443 end
444
bcf38aec 445 files
c4ef5c45
MT
446 /usr/lib/modules/%{kernel_release}/build
447 /usr/lib/modules/%{kernel_release}/source
bcf38aec 448 /usr/src/kernels/%{kernel_release}
ad1ea534 449 end
802ea3af 450 end
bcf38aec 451
45088e83 452 if "%{build_kernel_default}" == "1"
7f6f4de5
MT
453 if "%{DISTRO_ARCH}" == "armv7hl"
454 package kernel
455 template KERNEL
58dc2060 456
7f6f4de5
MT
457 kernel_name = kernel
458 kernel_release = %{fullver}
bcf38aec 459
0db4b328
MT
460 # Replace the Exynos kernel.
461 obsoletes += kernel-exynos < %{kernel_release}
462 conflicts += kernel-exynos < %{kernel_release}
463
7f6f4de5
MT
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
0db4b328
MT
475 # Replace the Exynos kernel.
476 obsoletes += kernel-exynos-devel < %{kernel_release}
477 conflicts += kernel-exynos-devel < %{kernel_release}
478
7f6f4de5
MT
479 # Replace the OMAP kernel.
480 obsoletes += kernel-omap-devel < %{kernel_release}
481 conflicts += kernel-omap-devel < %{kernel_release}
482 end
58dc2060 483
7f6f4de5
MT
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
45088e83 498 end
bcf38aec 499 end
81bb0557 500
1c9b6c79
MT
501 if "%{build_kernel_legacy}" == "1"
502 package kernel-legacy
45088e83 503 template KERNEL
bcf38aec 504
1c9b6c79
MT
505 kernel_name = kernel-legacy
506 kernel_release = %{fullver}.legacy
45088e83
MT
507 end
508
1c9b6c79 509 package kernel-legacy-devel
45088e83
MT
510 template KERNELDEVEL
511
1c9b6c79
MT
512 kernel_name = kernel-legacy
513 kernel_release = %{fullver}.legacy
45088e83 514 end
bcf38aec
MT
515 end
516
4c928ab7
MT
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
802ea3af 533 package kernel-headers
802ea3af
MT
534 summary = Header files of the kernel release %{fullver}.
535 desciption = %{summary}
c698e4be
MT
536
537 files
538 /usr/include
539 end
802ea3af 540 end
bcf38aec 541
ebeed08a
MT
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
ebeed08a 553 !/usr/include
c4ef5c45 554 !/usr/lib/modules
ebeed08a 555 !/usr/src
fe2de317
MT
556 !/usr/src/debug
557 !/usr/lib/debug
ebeed08a
MT
558 end
559 end
802ea3af 560end