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
66 # i686 needs librmi for cpupower.
67 if "%{DISTRO_ARCH}" == "i686"
68 requires += liblrmi-devel
71 # A list of kernels to build.
74 # Arguments that are passed to the kernel build command.
77 kernel_target = bzImage
78 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
80 if "%{DISTRO_ARCH}" == "i686"
81 # Build a default and legacy kernel for the
83 build_kernel_default = 1
84 build_kernel_legacy = 1
89 if "%{DISTRO_ARCH}" == "x86_64"
90 build_kernel_default = 1
95 if "%{DISTRO_ARCH}" == "armv5tel"
96 # Build a kernel for Marvell Kirkwood-based devices.
97 build_kernel_default = 1
100 kernel_target = zImage
102 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
103 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
106 if "%{DISTRO_ARCH}" == "armv7hl"
107 # Build the default unified kernel.
108 build_kernel_default = 1
109 build_kernel_lpae = 1
112 kernel_target = zImage
115 # mkimage is a requirement to build uImage images.
116 if "%{kernel_target}" == "uImage"
117 requires += u-boot-tools
120 # Build default kernel.
121 if "%{build_kernel_default}" == "1"
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
131 if "%{build_kernel_lpae}" == "1"
135 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
136 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
137 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
140 rm -f %{DIR_APP}/localversion-grsec
142 # Remove -Werror flag to fix ARMv5 build.
143 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
145 # Disable the colorize plugin.
146 # It's generally very nice but it clutters our
148 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
151 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
153 cp -vf %{kernel_logo} \
154 drivers/video/logo/logo_linux_clut224.ppm
156 # Get rid of unwanted files resulting from patch fuzz.
157 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
159 # Remove unnecessary SCM files.
160 find . -name .gitignore -exec rm -f {} \; >/dev/null
162 # This prevents scripts/setlocalversion from mucking with our version numbers.
171 if [ "${flavour}" != "default" ]; then
175 scripts/configure --kernel-dir=%{DIR_APP} \
176 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
179 # Generate configuration files for all kernels we are going to
181 for kernel in %{kernels}; do
182 configure_kernel ${kernel}
186 # Prevent perf from installing any files in /usr/libexec
187 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
194 local localversion="%{localversion}"
195 local fullversion="%{fullver}"
196 if [ "${flavour}" != "default" ]; then
198 localversion="${localversion}.${flavour}"
199 fullversion="${fullversion}.${flavour}"
204 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
206 # Clean up the source tree.
209 # Install configuration file.
210 cp configs/config.${flavour} .config
214 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
215 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
216 %{kernel_build_flags} %{PARALLELISMFLAGS}
218 # Compile Flattened Device Tree database
219 case "${DISTRO_ARCH}" in
221 make ARCH=%{kernel_arch} dtbs
223 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
224 for file in arch/arm/boot/dts/*.dtb; do
225 [ -e "${file}" ] || continue
227 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
233 # Install the results.
234 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
235 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
236 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
237 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
239 # Create empty initramfs (20M).
240 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
243 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
244 KERNELRELEASE=${fullversion} modules_install
247 case "%{DISTRO_ARCH}" in
249 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
250 KERNELRELEASE=${fullversion} vdso_install
254 # Create an empty settings file for dracut
255 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
256 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
257 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
259 # And now the scary looking part.
261 # Recreate source and build links.
262 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
263 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
264 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
266 # Create dirs for extra modules.
267 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
269 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
271 cp Module.symvers System.map \
272 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
273 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
275 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
276 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
277 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
280 cp -a --parents arch/%{kernel_arch}/include \
281 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
282 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
284 # Make sure we can build external modules.
285 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
286 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
287 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
288 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
289 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
290 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
292 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
293 xargs --no-run-if-empty chmod u+x
295 # Move all development files to /usr/src.
296 mkdir -p %{BUILDROOT}/usr/src/kernels
297 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
298 %{BUILDROOT}/usr/src/kernels/${fullversion}
299 ln -sf ../../../src/kernels/${fullversion} \
300 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
303 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
304 -exec chmod 644 {} \;
306 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
309 for kernel in %{kernels}; do
310 build_kernel ${kernel}
315 %{perf_make} DESTDIR=%{BUILDROOT} all
318 chmod +x tools/power/cpupower/utils/version-gen.sh
319 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
321 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
322 pushd tools/power/cpupower/debug/x86_64
323 make %{MAKETUNING} centrino-decode powernow-k8-decode
325 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
326 pushd tools/power/cpupower/debug/i386
327 make %{MAKETUNING} centrino-decode powernow-k8-decode
331 # Should be built for all x86 architectures
332 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
333 # Won't compile on i686
334 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
335 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
336 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
338 pushd tools/power/x86/x86_energy_perf_policy
343 pushd tools/power/x86/turbostat
348 pushd tools/thermal/tmon
354 # When no kernels are configured, we create a default config
355 # which enables us to install at least the header files.
356 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
358 # Install the header files
359 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
360 mkdir -pv %{BUILDROOT}/usr/include
361 find dest/include \( -name .install -o -name ..install.cmd \) -delete
362 cp -rv dest/include/* %{BUILDROOT}/usr/include
364 # Glibc provides these headers
365 rm -rfv %{BUILDROOT}/usr/include/scsi \
366 %{BUILDROOT}/usr/include/asm*/atomic.h \
367 %{BUILDROOT}/usr/include/asm*/io.h \
368 %{BUILDROOT}/usr/include/asm*/irq.h
370 # Remove all firmware files which are distributed by linux-firmware
371 rm -rfv %{BUILDROOT}/lib/firmware
374 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
377 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
378 mandir=%{mandir} CPUFREQ_BENCH=false install
380 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
381 pushd tools/power/cpupower/debug/x86_64
382 install -m 755 centrino-decode \
383 %{BUILDROOT}/usr/bin/centrino-decode
384 install -m 755 powernow-k8-decode \
385 %{BUILDROOT}/usr/bin/powernow-k8-decode
387 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
388 pushd tools/power/cpupower/debug/i386
389 install -m 755 centrino-decode \
390 %{BUILDROOT}/usr/bin/centrino-decode
391 install -m 755 powernow-k8-decode \
392 %{BUILDROOT}/usr/bin/powernow-k8-decode
396 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
398 # This should be built for all x86 architectures
399 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
400 mkdir -pv %{BUILDROOT}%{mandir}/man8
402 pushd tools/power/x86/x86_energy_perf_policy
403 make DESTDIR=%{BUILDROOT} install
406 pushd tools/power/x86/turbostat
407 make DESTDIR=%{BUILDROOT} install
412 pushd tools/thermal/tmon
413 make INSTALL_ROOT=%{BUILDROOT} install
421 kernel_release = %{fullver}
423 summary = The Linux kernel %{kernel_release}.
430 kernel=%{kernel_release}
440 /boot/System.map-%{kernel_release}
441 /boot/dtb-%{kernel_release}
442 /boot/vmlinuz-%{kernel_release}
443 /boot/initramfs-%{kernel_release}.img
444 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
445 /usr/lib/modules/%{kernel_release}
449 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
450 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
462 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
466 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
470 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
475 kernel_release = %{fullver}
477 summary = Development files of kernel-%{kernel_release}.
481 Install this package in order to compile modules for
482 kernel release %{kernel_release}.
486 kernel-devel = %{thisver}
494 /usr/lib/modules/%{kernel_release}/build
495 /usr/lib/modules/%{kernel_release}/source
496 /usr/src/kernels/%{kernel_release}
500 if "%{build_kernel_default}" == "1"
501 if "%{DISTRO_ARCH}" == "armv7hl"
506 kernel_release = %{fullver}
508 # Replace the Exynos kernel.
509 obsoletes += kernel-exynos < %{kernel_release}
510 conflicts += kernel-exynos < %{kernel_release}
512 # Replace the OMAP kernel.
513 obsoletes += kernel-omap < %{kernel_release}
514 conflicts += kernel-omap < %{kernel_release}
521 kernel_release = %{fullver}
523 # Replace the Exynos kernel.
524 obsoletes += kernel-exynos-devel < %{kernel_release}
525 conflicts += kernel-exynos-devel < %{kernel_release}
527 # Replace the OMAP kernel.
528 obsoletes += kernel-omap-devel < %{kernel_release}
529 conflicts += kernel-omap-devel < %{kernel_release}
537 kernel_release = %{fullver}
544 kernel_release = %{fullver}
549 if "%{build_kernel_legacy}" == "1"
550 package kernel-legacy
553 kernel_name = kernel-legacy
554 kernel_release = %{fullver}.legacy
557 package kernel-legacy-devel
560 kernel_name = kernel-legacy
561 kernel_release = %{fullver}.legacy
565 if "%{build_kernel_lpae}" == "1"
569 kernel_name = kernel-lpae
570 kernel_release = %{fullver}.lpae
573 package kernel-lpae-devel
576 kernel_name = kernel-lpae
577 kernel_release = %{fullver}.lpae
581 package kernel-headers
582 summary = Header files of the kernel release %{fullver}.
583 desciption = %{summary}
591 summary = Assortment of tools for the Linux kernel.
592 description = %{summary}