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
65 # i686 needs librmi for cpupower.
66 if "%{DISTRO_ARCH}" == "i686"
67 requires += liblrmi-devel
70 # A list of kernels to build.
73 # Arguments that are passed to the kernel build command.
76 kernel_target = bzImage
77 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
79 if "%{DISTRO_ARCH}" == "i686"
80 # Build a default and legacy kernel for the
82 build_kernel_default = 1
83 build_kernel_legacy = 1
88 if "%{DISTRO_ARCH}" == "x86_64"
89 build_kernel_default = 1
94 if "%{DISTRO_ARCH}" == "armv5tel"
95 # Build a kernel for Marvell Kirkwood-based devices.
96 build_kernel_default = 1
99 kernel_target = zImage
101 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
102 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
105 if "%{DISTRO_ARCH}" == "armv7hl"
106 # Build the default unified kernel.
107 build_kernel_default = 1
108 build_kernel_lpae = 1
111 kernel_target = zImage
114 # mkimage is a requirement to build uImage images.
115 if "%{kernel_target}" == "uImage"
116 requires += u-boot-tools
119 # Build default kernel.
120 if "%{build_kernel_default}" == "1"
124 # Build legacy kernel.
125 if "%{build_kernel_legacy}" == "1"
130 if "%{build_kernel_lpae}" == "1"
134 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
135 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
136 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
139 rm -f %{DIR_APP}/localversion-grsec
141 # Remove -Werror flag to fix ARMv5 build.
142 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
144 # Disable the colorize plugin.
145 # It's generally very nice but it clutters our
147 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
150 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
152 cp -vf %{kernel_logo} \
153 drivers/video/logo/logo_linux_clut224.ppm
155 # Get rid of unwanted files resulting from patch fuzz.
156 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
158 # Remove unnecessary SCM files.
159 find . -name .gitignore -exec rm -f {} \; >/dev/null
161 # This prevents scripts/setlocalversion from mucking with our version numbers.
170 if [ "${flavour}" != "default" ]; then
174 scripts/configure --kernel-dir=%{DIR_APP} \
175 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
178 # Generate configuration files for all kernels we are going to
180 for kernel in %{kernels}; do
181 configure_kernel ${kernel}
185 # Prevent perf from installing any files in /usr/libexec
186 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
193 local localversion="%{localversion}"
194 local fullversion="%{fullver}"
195 if [ "${flavour}" != "default" ]; then
197 localversion="${localversion}.${flavour}"
198 fullversion="${fullversion}.${flavour}"
203 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
205 # Clean up the source tree.
208 # Install configuration file.
209 cp configs/config.${flavour} .config
213 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
214 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
215 %{kernel_build_flags} %{PARALLELISMFLAGS}
217 # Compile Flattened Device Tree database
218 case "${DISTRO_ARCH}" in
220 make ARCH=%{kernel_arch} dtbs
222 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
223 for file in arch/arm/boot/dts/*.dtb; do
224 [ -e "${file}" ] || continue
226 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
232 # Install the results.
233 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
234 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
235 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
236 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
238 # Create empty initramfs (20M).
239 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
242 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
243 KERNELRELEASE=${fullversion} modules_install
246 case "%{DISTRO_ARCH}" in
248 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
249 KERNELRELEASE=${fullversion} vdso_install
253 # Create an empty settings file for dracut
254 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
255 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
256 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
258 # And now the scary looking part.
260 # Recreate source and build links.
261 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
262 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
263 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
265 # Create dirs for extra modules.
266 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
268 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
269 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
270 cp Module.symvers System.map \
271 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
272 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
274 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
275 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
276 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
279 cp -a --parents arch/%{kernel_arch}/include \
280 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
281 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
283 # Make sure we can build external modules.
284 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
285 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
286 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
287 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
288 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
289 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
291 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
294 # Move all development files to /usr/src.
295 mkdir -p %{BUILDROOT}/usr/src/kernels
296 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
297 %{BUILDROOT}/usr/src/kernels/${fullversion}
298 ln -sf ../../../src/kernels/${fullversion} \
299 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
302 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
303 -exec chmod 644 {} \;
305 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
308 for kernel in %{kernels}; do
309 build_kernel ${kernel}
314 %{perf_make} DESTDIR=%{BUILDROOT} all
317 chmod +x tools/power/cpupower/utils/version-gen.sh
318 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
320 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
321 pushd tools/power/cpupower/debug/x86_64
322 make %{MAKETUNING} centrino-decode powernow-k8-decode
324 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
325 pushd tools/power/cpupower/debug/i386
326 make %{MAKETUNING} centrino-decode powernow-k8-decode
330 # Should be built for all x86 architectures
331 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
332 # Won't compile on i686
333 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
334 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
335 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
337 pushd tools/power/x86/x86_energy_perf_policy
342 pushd tools/power/x86/turbostat
347 pushd tools/thermal/tmon
353 # When no kernels are configured, we create a default config
354 # which enables us to install at least the header files.
355 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
357 # Install the header files
358 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
359 mkdir -pv %{BUILDROOT}/usr/include
360 find dest/include \( -name .install -o -name ..install.cmd \) -delete
361 cp -rv dest/include/* %{BUILDROOT}/usr/include
363 # Glibc provides these headers
364 rm -rfv %{BUILDROOT}/usr/include/scsi \
365 %{BUILDROOT}/usr/include/asm*/atomic.h \
366 %{BUILDROOT}/usr/include/asm*/io.h \
367 %{BUILDROOT}/usr/include/asm*/irq.h
369 # Remove all firmware files which are distributed by linux-firmware
370 rm -rfv %{BUILDROOT}/lib/firmware
373 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
376 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
377 mandir=%{mandir} CPUFREQ_BENCH=false install
379 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
380 pushd tools/power/cpupower/debug/x86_64
381 install -m 755 centrino-decode \
382 %{BUILDROOT}/usr/bin/centrino-decode
383 install -m 755 powernow-k8-decode \
384 %{BUILDROOT}/usr/bin/powernow-k8-decode
386 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
387 pushd tools/power/cpupower/debug/i386
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
395 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
397 # This should be built for all x86 architectures
398 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
399 mkdir -pv %{BUILDROOT}%{mandir}/man8
401 pushd tools/power/x86/x86_energy_perf_policy
402 make DESTDIR=%{BUILDROOT} install
405 pushd tools/power/x86/turbostat
406 make DESTDIR=%{BUILDROOT} install
411 pushd tools/thermal/tmon
412 make INSTALL_ROOT=%{BUILDROOT} install
420 kernel_release = %{fullver}
422 summary = The Linux kernel %{kernel_release}.
429 kernel=%{kernel_release}
439 /boot/System.map-%{kernel_release}
440 /boot/dtb-%{kernel_release}
441 /boot/vmlinuz-%{kernel_release}
442 /boot/initramfs-%{kernel_release}.img
443 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
444 /usr/lib/modules/%{kernel_release}
448 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
449 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
461 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
465 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
469 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
474 kernel_release = %{fullver}
476 summary = Development files of kernel-%{kernel_release}.
480 Install this package in order to compile modules for
481 kernel release %{kernel_release}.
485 kernel-devel = %{thisver}
493 /usr/lib/modules/%{kernel_release}/build
494 /usr/lib/modules/%{kernel_release}/source
495 /usr/src/kernels/%{kernel_release}
499 if "%{build_kernel_default}" == "1"
500 if "%{DISTRO_ARCH}" == "armv7hl"
505 kernel_release = %{fullver}
507 # Replace the Exynos kernel.
508 obsoletes += kernel-exynos < %{kernel_release}
509 conflicts += kernel-exynos < %{kernel_release}
511 # Replace the OMAP kernel.
512 obsoletes += kernel-omap < %{kernel_release}
513 conflicts += kernel-omap < %{kernel_release}
520 kernel_release = %{fullver}
522 # Replace the Exynos kernel.
523 obsoletes += kernel-exynos-devel < %{kernel_release}
524 conflicts += kernel-exynos-devel < %{kernel_release}
526 # Replace the OMAP kernel.
527 obsoletes += kernel-omap-devel < %{kernel_release}
528 conflicts += kernel-omap-devel < %{kernel_release}
536 kernel_release = %{fullver}
543 kernel_release = %{fullver}
548 if "%{build_kernel_legacy}" == "1"
549 package kernel-legacy
552 kernel_name = kernel-legacy
553 kernel_release = %{fullver}.legacy
556 package kernel-legacy-devel
559 kernel_name = kernel-legacy
560 kernel_release = %{fullver}.legacy
564 if "%{build_kernel_lpae}" == "1"
568 kernel_name = kernel-lpae
569 kernel_release = %{fullver}.lpae
572 package kernel-lpae-devel
575 kernel_name = kernel-lpae
576 kernel_release = %{fullver}.lpae
580 package kernel-headers
581 summary = Header files of the kernel release %{fullver}.
582 desciption = %{summary}
590 summary = Assortment of tools for the Linux kernel.
591 description = %{summary}