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/v4.x/
29 sources = %{thisapp}.tar.xz
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
38 binutils >= 2.23.51.0.3-3
61 # i686 needs librmi for cpupower.
62 if "%{DISTRO_ARCH}" == "i686"
63 requires += liblrmi-devel
66 # A list of kernels to build.
69 # Arguments that are passed to the kernel build command.
72 kernel_target = bzImage
73 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
75 if "%{DISTRO_ARCH}" == "i686"
76 # Build a default and legacy kernel for the
78 build_kernel_default = 1
79 build_kernel_legacy = 1
84 if "%{DISTRO_ARCH}" == "x86_64"
85 build_kernel_default = 1
90 if "%{DISTRO_ARCH}" == "aarch64"
91 # Disable for now because it won't compile
92 build_kernel_default = 0
95 kernel_target = Image.gz
98 if "%{DISTRO_ARCH}" == "armv5tel"
99 # Build a kernel for Marvell Kirkwood-based devices.
100 build_kernel_default = 1
103 kernel_target = zImage
105 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
106 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
109 if "%{DISTRO_ARCH}" == "armv7hl"
110 # Build the default unified kernel.
111 build_kernel_default = 1
112 build_kernel_lpae = 1
115 kernel_target = zImage
118 # mkimage is a requirement to build uImage images.
119 if "%{kernel_target}" == "uImage"
120 requires += u-boot-tools
123 # Build default kernel.
124 if "%{build_kernel_default}" == "1"
128 # Build legacy kernel.
129 if "%{build_kernel_legacy}" == "1"
134 if "%{build_kernel_lpae}" == "1"
138 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
139 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
140 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
143 rm -f %{DIR_APP}/localversion-grsec
145 # Remove -Werror flag to fix ARMv5 build.
146 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
148 # Disable the colorize plugin.
149 # It's generally very nice but it clutters our
151 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
154 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
156 cp -vf %{kernel_logo} \
157 drivers/video/logo/logo_linux_clut224.ppm
159 # Get rid of unwanted files resulting from patch fuzz.
160 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
162 # Remove unnecessary SCM files.
163 find . -name .gitignore -exec rm -f {} \; >/dev/null
165 # This prevents scripts/setlocalversion from mucking with our version numbers.
174 if [ "${flavour}" != "default" ]; then
178 scripts/configure --kernel-dir=%{DIR_APP} \
179 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
182 # Generate configuration files for all kernels we are going to
184 for kernel in %{kernels}; do
185 configure_kernel ${kernel}
189 # Prevent perf from installing any files in /usr/libexec
190 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
197 local localversion="%{localversion}"
198 local fullversion="%{fullver}"
199 if [ "${flavour}" != "default" ]; then
201 localversion="${localversion}.${flavour}"
202 fullversion="${fullversion}.${flavour}"
207 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
209 # Clean up the source tree.
212 # Install configuration file.
213 cp configs/config.${flavour} .config
217 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
218 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
219 %{kernel_build_flags} %{PARALLELISMFLAGS}
221 # Compile Flattened Device Tree database
222 case "${DISTRO_ARCH}" in
224 make ARCH=%{kernel_arch} dtbs
226 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
227 for file in arch/arm/boot/dts/*.dtb; do
228 [ -e "${file}" ] || continue
230 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
236 # Install the results.
237 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
238 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
239 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
240 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
242 # Create empty initramfs (20M).
243 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
246 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
247 KERNELRELEASE=${fullversion} modules_install
250 case "%{DISTRO_ARCH}" in
252 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
253 KERNELRELEASE=${fullversion} vdso_install
257 # Create an empty settings file for dracut
258 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
259 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
260 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
262 # And now the scary looking part.
264 # Recreate source and build links.
265 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
266 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
267 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
269 # Create dirs for extra modules.
270 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
272 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
273 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
274 cp Module.symvers System.map \
275 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
276 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
278 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
279 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
280 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
283 cp -a --parents arch/%{kernel_arch}/include \
284 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
285 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
287 # Make sure we can build external modules.
288 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
289 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
290 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
291 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
292 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
293 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
295 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
296 xargs --no-run-if-empty chmod u+x
298 # Move all development files to /usr/src.
299 mkdir -p %{BUILDROOT}/usr/src/kernels
300 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
301 %{BUILDROOT}/usr/src/kernels/${fullversion}
302 ln -sf ../../../src/kernels/${fullversion} \
303 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
306 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
307 -exec chmod 644 {} \;
309 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
312 for kernel in %{kernels}; do
313 build_kernel ${kernel}
318 %{perf_make} DESTDIR=%{BUILDROOT} all
321 chmod +x tools/power/cpupower/utils/version-gen.sh
322 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
324 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
325 pushd tools/power/cpupower/debug/x86_64
326 make %{MAKETUNING} centrino-decode powernow-k8-decode
328 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
329 pushd tools/power/cpupower/debug/i386
330 make %{MAKETUNING} centrino-decode powernow-k8-decode
334 # Should be built for all x86 architectures
335 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
336 # Won't compile on i686
337 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
338 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
339 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
341 pushd tools/power/x86/x86_energy_perf_policy
346 pushd tools/power/x86/turbostat
351 pushd tools/thermal/tmon
357 # When no kernels are configured, we create a default config
358 # which enables us to install at least the header files.
359 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
361 # Install the header files
362 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
363 mkdir -pv %{BUILDROOT}/usr/include
364 find dest/include \( -name .install -o -name ..install.cmd \) -delete
365 cp -rv dest/include/* %{BUILDROOT}/usr/include
367 # Glibc provides these headers
368 rm -rfv %{BUILDROOT}/usr/include/scsi \
369 %{BUILDROOT}/usr/include/asm*/atomic.h \
370 %{BUILDROOT}/usr/include/asm*/io.h \
371 %{BUILDROOT}/usr/include/asm*/irq.h
373 # Remove all firmware files which are distributed by linux-firmware
374 rm -rfv %{BUILDROOT}/lib/firmware
377 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
380 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
381 mandir=%{mandir} CPUFREQ_BENCH=false install
383 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
384 pushd tools/power/cpupower/debug/x86_64
385 install -m 755 centrino-decode \
386 %{BUILDROOT}/usr/bin/centrino-decode
387 install -m 755 powernow-k8-decode \
388 %{BUILDROOT}/usr/bin/powernow-k8-decode
390 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
391 pushd tools/power/cpupower/debug/i386
392 install -m 755 centrino-decode \
393 %{BUILDROOT}/usr/bin/centrino-decode
394 install -m 755 powernow-k8-decode \
395 %{BUILDROOT}/usr/bin/powernow-k8-decode
399 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
401 # This should be built for all x86 architectures
402 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
403 mkdir -pv %{BUILDROOT}%{mandir}/man8
405 pushd tools/power/x86/x86_energy_perf_policy
406 make DESTDIR=%{BUILDROOT} install
409 pushd tools/power/x86/turbostat
410 make DESTDIR=%{BUILDROOT} install
415 pushd tools/thermal/tmon
416 make INSTALL_ROOT=%{BUILDROOT} install
424 kernel_release = %{fullver}
426 summary = The Linux kernel %{kernel_release}.
433 kernel=%{kernel_release}
443 /boot/System.map-%{kernel_release}
444 /boot/dtb-%{kernel_release}
445 /boot/vmlinuz-%{kernel_release}
446 /boot/initramfs-%{kernel_release}.img
447 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
448 /usr/lib/modules/%{kernel_release}
452 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
453 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
465 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
469 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
473 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
478 kernel_release = %{fullver}
480 summary = Development files of kernel-%{kernel_release}.
484 Install this package in order to compile modules for
485 kernel release %{kernel_release}.
489 kernel-devel = %{thisver}
497 /usr/lib/modules/%{kernel_release}/build
498 /usr/lib/modules/%{kernel_release}/source
499 /usr/src/kernels/%{kernel_release}
503 if "%{build_kernel_default}" == "1"
504 if "%{DISTRO_ARCH}" == "armv7hl"
509 kernel_release = %{fullver}
511 # Replace the Exynos kernel.
512 obsoletes += kernel-exynos < %{kernel_release}
513 conflicts += kernel-exynos < %{kernel_release}
515 # Replace the OMAP kernel.
516 obsoletes += kernel-omap < %{kernel_release}
517 conflicts += kernel-omap < %{kernel_release}
524 kernel_release = %{fullver}
526 # Replace the Exynos kernel.
527 obsoletes += kernel-exynos-devel < %{kernel_release}
528 conflicts += kernel-exynos-devel < %{kernel_release}
530 # Replace the OMAP kernel.
531 obsoletes += kernel-omap-devel < %{kernel_release}
532 conflicts += kernel-omap-devel < %{kernel_release}
540 kernel_release = %{fullver}
547 kernel_release = %{fullver}
552 if "%{build_kernel_legacy}" == "1"
553 package kernel-legacy
556 kernel_name = kernel-legacy
557 kernel_release = %{fullver}.legacy
560 package kernel-legacy-devel
563 kernel_name = kernel-legacy
564 kernel_release = %{fullver}.legacy
568 if "%{build_kernel_lpae}" == "1"
572 kernel_name = kernel-lpae
573 kernel_release = %{fullver}.lpae
576 package kernel-lpae-devel
579 kernel_name = kernel-lpae
580 kernel_release = %{fullver}.lpae
584 package kernel-headers
585 summary = Header files of the kernel release %{fullver}.
586 desciption = %{summary}
594 summary = Assortment of tools for the Linux kernel.
595 description = %{summary}