1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
9 thisapp = linux-%{version}
11 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12 groups = System/Kernels
13 url = http://www.kernel.org/
15 summary = The Linux kernel.
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.
24 # Version helper variables.
25 localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26 fullver = %{version}-%{localversion}
28 source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/
29 sources = %{thisapp}.tar.xz
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.
37 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
43 binutils >= 2.23.51.0.3-3
64 # i686 needs librmi for cpupower.
65 if "%{DISTRO_ARCH}" == "i686"
66 requires += liblrmi-devel
69 # A list of kernels to build.
72 # Arguments that are passed to the kernel build command.
75 kernel_target = bzImage
76 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
78 if "%{DISTRO_ARCH}" == "i686"
79 # Build a default and legacy kernel for the
81 build_kernel_default = 1
82 build_kernel_legacy = 1
87 if "%{DISTRO_ARCH}" == "x86_64"
88 build_kernel_default = 1
93 if "%{DISTRO_ARCH}" == "armv5tel"
94 # ERROR Currently all kernel images are disabled, because they
95 # won't build with the grsecurity patch.
97 # Build a kernel for Marvell Kirkwood-based devices.
98 build_kernel_kirkwood = 1
101 kernel_target = zImage
103 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
104 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
107 if "%{DISTRO_ARCH}" == "armv7hl"
108 # Build the default unified kernel.
109 build_kernel_default = 1
110 build_kernel_lpae = 1
113 kernel_target = zImage
116 # mkimage is a requirement to build uImage images.
117 if "%{kernel_target}" == "uImage"
118 requires += u-boot-tools
121 # Build default kernel.
122 if "%{build_kernel_default}" == "1"
126 # Build legacy kernel.
127 if "%{build_kernel_legacy}" == "1"
132 if "%{build_kernel_lpae}" == "1"
136 # Build ARM kirkwood kernel.
137 if "%{build_kernel_kirkwood}" == "1"
141 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
142 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
143 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
146 rm -f %{DIR_APP}/localversion-grsec
148 # Remove -Werror flag to fix ARMv5 build.
149 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
151 # Disable the colorize plugin.
152 # It's generally very nice but it clutters our
154 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
157 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
159 cp -vf %{kernel_logo} \
160 drivers/video/logo/logo_linux_clut224.ppm
162 # Get rid of unwanted files resulting from patch fuzz.
163 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
165 # Remove unnecessary SCM files.
166 find . -name .gitignore -exec rm -f {} \; >/dev/null
168 # This prevents scripts/setlocalversion from mucking with our version numbers.
177 if [ "${flavour}" != "default" ]; then
181 scripts/configure --kernel-dir=%{DIR_APP} \
182 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
185 # Generate configuration files for all kernels we are going to
187 for kernel in %{kernels}; do
188 configure_kernel ${kernel}
192 # Prevent perf from installing any files in /usr/libexec
193 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
200 local localversion="%{localversion}"
201 local fullversion="%{fullver}"
202 if [ "${flavour}" != "default" ]; then
204 localversion="${localversion}.${flavour}"
205 fullversion="${fullversion}.${flavour}"
210 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
212 # Clean up the source tree.
215 # Install configuration file.
216 cp configs/config.${flavour} .config
220 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
221 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
222 %{kernel_build_flags} %{PARALLELISMFLAGS}
224 # Compile Flattened Device Tree database
225 case "${DISTRO_ARCH}" in
227 make ARCH=%{kernel_arch} dtbs
229 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
230 for file in arch/arm/boot/dts/*.dtb; do
231 [ -e "${file}" ] || continue
233 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
239 # Install the results.
240 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
241 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
242 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
243 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
245 # Create empty initramfs (20M).
246 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
249 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
250 KERNELRELEASE=${fullversion} modules_install
253 case "%{DISTRO_ARCH}" in
255 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
256 KERNELRELEASE=${fullversion} vdso_install
260 # Create an empty settings file for dracut
261 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
262 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
263 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
265 # And now the scary looking part.
267 # Recreate source and build links.
268 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
269 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
270 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
272 # Create dirs for extra modules.
273 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
275 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
276 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
277 cp Module.symvers System.map \
278 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
279 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
281 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
282 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
283 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
286 cp -a --parents arch/%{kernel_arch}/include \
287 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
288 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
290 # Make sure we can build external modules.
291 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
292 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
293 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
294 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
295 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
296 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
298 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
301 # Move all development files to /usr/src.
302 mkdir -p %{BUILDROOT}/usr/src/kernels
303 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
304 %{BUILDROOT}/usr/src/kernels/${fullversion}
305 ln -sf ../../../src/kernels/${fullversion} \
306 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
309 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
310 -exec chmod 644 {} \;
312 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
315 for kernel in %{kernels}; do
316 build_kernel ${kernel}
321 %{perf_make} DESTDIR=%{BUILDROOT} all
324 chmod +x tools/power/cpupower/utils/version-gen.sh
325 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
327 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
328 pushd tools/power/cpupower/debug/x86_64
329 make %{MAKETUNING} centrino-decode powernow-k8-decode
331 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
332 pushd tools/power/cpupower/debug/i386
333 make %{MAKETUNING} centrino-decode powernow-k8-decode
337 # Should be built for all x86 architectures
338 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
339 # Won't compile on i686
340 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
341 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
342 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
344 pushd tools/power/x86/x86_energy_perf_policy
349 pushd tools/power/x86/turbostat
354 pushd tools/thermal/tmon
360 # When no kernels are configured, we create a default config
361 # which enables us to install at least the header files.
362 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
364 # Install the header files
365 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
366 mkdir -pv %{BUILDROOT}/usr/include
367 find dest/include \( -name .install -o -name ..install.cmd \) -delete
368 cp -rv dest/include/* %{BUILDROOT}/usr/include
370 # Glibc provides these headers
371 rm -rfv %{BUILDROOT}/usr/include/scsi \
372 %{BUILDROOT}/usr/include/asm*/atomic.h \
373 %{BUILDROOT}/usr/include/asm*/io.h \
374 %{BUILDROOT}/usr/include/asm*/irq.h
376 # Remove all firmware files which are distributed by linux-firmware
377 rm -rfv %{BUILDROOT}/lib/firmware
380 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
383 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
384 mandir=%{mandir} CPUFREQ_BENCH=false install
386 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
387 pushd tools/power/cpupower/debug/x86_64
388 install -m 755 centrino-decode \
389 %{BUILDROOT}/usr/bin/centrino-decode
390 install -m 755 powernow-k8-decode \
391 %{BUILDROOT}/usr/bin/powernow-k8-decode
393 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
394 pushd tools/power/cpupower/debug/i386
395 install -m 755 centrino-decode \
396 %{BUILDROOT}/usr/bin/centrino-decode
397 install -m 755 powernow-k8-decode \
398 %{BUILDROOT}/usr/bin/powernow-k8-decode
402 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
404 # This should be built for all x86 architectures
405 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
406 mkdir -pv %{BUILDROOT}%{mandir}/man8
408 pushd tools/power/x86/x86_energy_perf_policy
409 make DESTDIR=%{BUILDROOT} install
412 pushd tools/power/x86/turbostat
413 make DESTDIR=%{BUILDROOT} install
418 pushd tools/thermal/tmon
419 make INSTALL_ROOT=%{BUILDROOT} install
427 kernel_release = %{fullver}
429 summary = The Linux kernel %{kernel_release}.
436 kernel=%{kernel_release}
446 /boot/System.map-%{kernel_release}
447 /boot/dtb-%{kernel_release}
448 /boot/vmlinuz-%{kernel_release}
449 /boot/initramfs-%{kernel_release}.img
450 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
451 /usr/lib/modules/%{kernel_release}
455 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
456 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
468 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
472 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
476 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
481 kernel_release = %{fullver}
483 summary = Development files of kernel-%{kernel_release}.
487 Install this package in order to compile modules for
488 kernel release %{kernel_release}.
492 kernel-devel = %{thisver}
500 /usr/lib/modules/%{kernel_release}/build
501 /usr/lib/modules/%{kernel_release}/source
502 /usr/src/kernels/%{kernel_release}
506 if "%{build_kernel_default}" == "1"
507 if "%{DISTRO_ARCH}" == "armv7hl"
512 kernel_release = %{fullver}
514 # Replace the Exynos kernel.
515 obsoletes += kernel-exynos < %{kernel_release}
516 conflicts += kernel-exynos < %{kernel_release}
518 # Replace the OMAP kernel.
519 obsoletes += kernel-omap < %{kernel_release}
520 conflicts += kernel-omap < %{kernel_release}
527 kernel_release = %{fullver}
529 # Replace the Exynos kernel.
530 obsoletes += kernel-exynos-devel < %{kernel_release}
531 conflicts += kernel-exynos-devel < %{kernel_release}
533 # Replace the OMAP kernel.
534 obsoletes += kernel-omap-devel < %{kernel_release}
535 conflicts += kernel-omap-devel < %{kernel_release}
543 kernel_release = %{fullver}
550 kernel_release = %{fullver}
555 if "%{build_kernel_legacy}" == "1"
556 package kernel-legacy
559 kernel_name = kernel-legacy
560 kernel_release = %{fullver}.legacy
563 package kernel-legacy-devel
566 kernel_name = kernel-legacy
567 kernel_release = %{fullver}.legacy
571 if "%{build_kernel_lpae}" == "1"
575 kernel_name = kernel-lpae
576 kernel_release = %{fullver}.lpae
579 package kernel-lpae-devel
582 kernel_name = kernel-lpae
583 kernel_release = %{fullver}.lpae
587 if "%{build_kernel_kirkwood}" == "1"
588 package kernel-kirkwood
591 kernel_name = kernel-kirkwood
592 kernel_release = %{fullver}.kirkwood
595 package kernel-kirkwood-devel
598 kernel_name = kernel-kirkwood
599 kernel_release = %{fullver}.kirkwood
603 package kernel-headers
604 summary = Header files of the kernel release %{fullver}.
605 desciption = %{summary}
613 summary = Assortment of tools for the Linux kernel.
614 description = %{summary}