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}" == "aarch64"
96 # Disable for now because it won't compile
97 build_kernel_default = 0
100 kernel_target = Image.gz
103 if "%{DISTRO_ARCH}" == "armv5tel"
104 # Build a kernel for Marvell Kirkwood-based devices.
105 build_kernel_default = 1
108 kernel_target = zImage
110 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
111 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
114 if "%{DISTRO_ARCH}" == "armv7hl"
115 # Build the default unified kernel.
116 build_kernel_default = 1
117 build_kernel_lpae = 1
120 kernel_target = zImage
123 # mkimage is a requirement to build uImage images.
124 if "%{kernel_target}" == "uImage"
125 requires += u-boot-tools
128 # Build default kernel.
129 if "%{build_kernel_default}" == "1"
133 # Build legacy kernel.
134 if "%{build_kernel_legacy}" == "1"
139 if "%{build_kernel_lpae}" == "1"
143 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
144 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
145 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
148 rm -f %{DIR_APP}/localversion-grsec
150 # Remove -Werror flag to fix ARMv5 build.
151 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
153 # Disable the colorize plugin.
154 # It's generally very nice but it clutters our
156 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
159 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
161 cp -vf %{kernel_logo} \
162 drivers/video/logo/logo_linux_clut224.ppm
164 # Get rid of unwanted files resulting from patch fuzz.
165 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
167 # Remove unnecessary SCM files.
168 find . -name .gitignore -exec rm -f {} \; >/dev/null
170 # This prevents scripts/setlocalversion from mucking with our version numbers.
179 if [ "${flavour}" != "default" ]; then
183 scripts/configure --kernel-dir=%{DIR_APP} \
184 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
187 # Generate configuration files for all kernels we are going to
189 for kernel in %{kernels}; do
190 configure_kernel ${kernel}
194 # Prevent perf from installing any files in /usr/libexec
195 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
202 local localversion="%{localversion}"
203 local fullversion="%{fullver}"
204 if [ "${flavour}" != "default" ]; then
206 localversion="${localversion}.${flavour}"
207 fullversion="${fullversion}.${flavour}"
212 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
214 # Clean up the source tree.
217 # Install configuration file.
218 cp configs/config.${flavour} .config
222 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
223 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
224 %{kernel_build_flags} %{PARALLELISMFLAGS}
226 # Compile Flattened Device Tree database
227 case "${DISTRO_ARCH}" in
229 make ARCH=%{kernel_arch} dtbs
231 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
232 for file in arch/arm/boot/dts/*.dtb; do
233 [ -e "${file}" ] || continue
235 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
241 # Install the results.
242 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
243 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
244 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
245 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
247 # Create empty initramfs (20M).
248 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
251 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
252 KERNELRELEASE=${fullversion} modules_install
255 case "%{DISTRO_ARCH}" in
257 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
258 KERNELRELEASE=${fullversion} vdso_install
262 # Create an empty settings file for dracut
263 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
264 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
265 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
267 # And now the scary looking part.
269 # Recreate source and build links.
270 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
271 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
272 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
274 # Create dirs for extra modules.
275 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
277 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
278 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
279 cp Module.symvers System.map \
280 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
281 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
283 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
284 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
285 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
288 cp -a --parents arch/%{kernel_arch}/include \
289 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
290 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
292 # Make sure we can build external modules.
293 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
294 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
295 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
296 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
297 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
298 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
300 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
301 xargs --no-run-if-empty chmod u+x
303 # Move all development files to /usr/src.
304 mkdir -p %{BUILDROOT}/usr/src/kernels
305 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
306 %{BUILDROOT}/usr/src/kernels/${fullversion}
307 ln -sf ../../../src/kernels/${fullversion} \
308 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
311 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
312 -exec chmod 644 {} \;
314 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
317 for kernel in %{kernels}; do
318 build_kernel ${kernel}
323 %{perf_make} DESTDIR=%{BUILDROOT} all
326 chmod +x tools/power/cpupower/utils/version-gen.sh
327 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
329 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
330 pushd tools/power/cpupower/debug/x86_64
331 make %{MAKETUNING} centrino-decode powernow-k8-decode
333 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
334 pushd tools/power/cpupower/debug/i386
335 make %{MAKETUNING} centrino-decode powernow-k8-decode
339 # Should be built for all x86 architectures
340 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
341 # Won't compile on i686
342 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
343 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
344 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
346 pushd tools/power/x86/x86_energy_perf_policy
351 pushd tools/power/x86/turbostat
356 pushd tools/thermal/tmon
362 # When no kernels are configured, we create a default config
363 # which enables us to install at least the header files.
364 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
366 # Install the header files
367 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
368 mkdir -pv %{BUILDROOT}/usr/include
369 find dest/include \( -name .install -o -name ..install.cmd \) -delete
370 cp -rv dest/include/* %{BUILDROOT}/usr/include
372 # Glibc provides these headers
373 rm -rfv %{BUILDROOT}/usr/include/scsi \
374 %{BUILDROOT}/usr/include/asm*/atomic.h \
375 %{BUILDROOT}/usr/include/asm*/io.h \
376 %{BUILDROOT}/usr/include/asm*/irq.h
378 # Remove all firmware files which are distributed by linux-firmware
379 rm -rfv %{BUILDROOT}/lib/firmware
382 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
385 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
386 mandir=%{mandir} CPUFREQ_BENCH=false install
388 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
389 pushd tools/power/cpupower/debug/x86_64
390 install -m 755 centrino-decode \
391 %{BUILDROOT}/usr/bin/centrino-decode
392 install -m 755 powernow-k8-decode \
393 %{BUILDROOT}/usr/bin/powernow-k8-decode
395 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
396 pushd tools/power/cpupower/debug/i386
397 install -m 755 centrino-decode \
398 %{BUILDROOT}/usr/bin/centrino-decode
399 install -m 755 powernow-k8-decode \
400 %{BUILDROOT}/usr/bin/powernow-k8-decode
404 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
406 # This should be built for all x86 architectures
407 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
408 mkdir -pv %{BUILDROOT}%{mandir}/man8
410 pushd tools/power/x86/x86_energy_perf_policy
411 make DESTDIR=%{BUILDROOT} install
414 pushd tools/power/x86/turbostat
415 make DESTDIR=%{BUILDROOT} install
420 pushd tools/thermal/tmon
421 make INSTALL_ROOT=%{BUILDROOT} install
429 kernel_release = %{fullver}
431 summary = The Linux kernel %{kernel_release}.
438 kernel=%{kernel_release}
448 /boot/System.map-%{kernel_release}
449 /boot/dtb-%{kernel_release}
450 /boot/vmlinuz-%{kernel_release}
451 /boot/initramfs-%{kernel_release}.img
452 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
453 /usr/lib/modules/%{kernel_release}
457 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
458 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
470 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
474 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
478 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
483 kernel_release = %{fullver}
485 summary = Development files of kernel-%{kernel_release}.
489 Install this package in order to compile modules for
490 kernel release %{kernel_release}.
494 kernel-devel = %{thisver}
502 /usr/lib/modules/%{kernel_release}/build
503 /usr/lib/modules/%{kernel_release}/source
504 /usr/src/kernels/%{kernel_release}
508 if "%{build_kernel_default}" == "1"
509 if "%{DISTRO_ARCH}" == "armv7hl"
514 kernel_release = %{fullver}
516 # Replace the Exynos kernel.
517 obsoletes += kernel-exynos < %{kernel_release}
518 conflicts += kernel-exynos < %{kernel_release}
520 # Replace the OMAP kernel.
521 obsoletes += kernel-omap < %{kernel_release}
522 conflicts += kernel-omap < %{kernel_release}
529 kernel_release = %{fullver}
531 # Replace the Exynos kernel.
532 obsoletes += kernel-exynos-devel < %{kernel_release}
533 conflicts += kernel-exynos-devel < %{kernel_release}
535 # Replace the OMAP kernel.
536 obsoletes += kernel-omap-devel < %{kernel_release}
537 conflicts += kernel-omap-devel < %{kernel_release}
545 kernel_release = %{fullver}
552 kernel_release = %{fullver}
557 if "%{build_kernel_legacy}" == "1"
558 package kernel-legacy
561 kernel_name = kernel-legacy
562 kernel_release = %{fullver}.legacy
565 package kernel-legacy-devel
568 kernel_name = kernel-legacy
569 kernel_release = %{fullver}.legacy
573 if "%{build_kernel_lpae}" == "1"
577 kernel_name = kernel-lpae
578 kernel_release = %{fullver}.lpae
581 package kernel-lpae-devel
584 kernel_name = kernel-lpae
585 kernel_release = %{fullver}.lpae
589 package kernel-headers
590 summary = Header files of the kernel release %{fullver}.
591 desciption = %{summary}
599 summary = Assortment of tools for the Linux kernel.
600 description = %{summary}