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_arch = %{DISTRO_PLATFORM}
73 kernel_target = bzImage
74 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
76 if "%{DISTRO_ARCH}" == "i686"
77 # Build a default and legacy kernel for the
79 build_kernel_default = 1
80 build_kernel_legacy = 1
83 if "%{DISTRO_ARCH}" == "x86_64"
84 build_kernel_default = 1
87 if "%{DISTRO_ARCH}" == "aarch64"
88 # Disable for now because it won't compile
89 build_kernel_default = 0
92 kernel_target = Image.gz
95 if "%{DISTRO_ARCH}" == "armv7hl"
96 # Build the default unified kernel.
97 build_kernel_default = 1
99 kernel_target = zImage
102 # mkimage is a requirement to build uImage images.
103 if "%{kernel_target}" == "uImage"
104 requires += u-boot-tools
107 # Build default kernel.
108 if "%{build_kernel_default}" == "1"
112 # Build legacy kernel.
113 if "%{build_kernel_legacy}" == "1"
117 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
118 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
119 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
122 rm -f %{DIR_APP}/localversion-grsec
124 # Remove -Werror flag to fix ARMv5 build.
125 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
127 # Disable the colorize plugin.
128 # It's generally very nice but it clutters our
130 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
133 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
135 cp -vf %{kernel_logo} \
136 drivers/video/logo/logo_linux_clut224.ppm
138 # Get rid of unwanted files resulting from patch fuzz.
139 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
141 # Remove unnecessary SCM files.
142 find . -name .gitignore -exec rm -f {} \; >/dev/null
144 # This prevents scripts/setlocalversion from mucking with our version numbers.
153 if [ "${flavour}" != "default" ]; then
157 scripts/configure --kernel-dir=%{DIR_APP} \
158 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
161 # Generate configuration files for all kernels we are going to
163 for kernel in %{kernels}; do
164 configure_kernel ${kernel}
168 # Prevent perf from installing any files in /usr/libexec
169 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
176 local localversion="%{localversion}"
177 local fullversion="%{fullver}"
178 if [ "${flavour}" != "default" ]; then
180 localversion="${localversion}.${flavour}"
181 fullversion="${fullversion}.${flavour}"
186 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
188 # Clean up the source tree.
191 # Install configuration file.
192 cp configs/config.${flavour} .config
196 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
197 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
198 %{kernel_build_flags} %{PARALLELISMFLAGS}
200 # Compile Flattened Device Tree database
201 case "${DISTRO_ARCH}" in
203 make ARCH=%{kernel_arch} dtbs
205 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
206 for file in arch/arm/boot/dts/*.dtb; do
207 [ -e "${file}" ] || continue
209 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
215 # Install the results.
216 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
217 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
218 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
219 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
221 # Create empty initramfs (20M).
222 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
225 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
226 KERNELRELEASE=${fullversion} modules_install
229 case "%{DISTRO_ARCH}" in
231 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
232 KERNELRELEASE=${fullversion} vdso_install
236 # Create an empty settings file for dracut
237 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
238 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
239 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
241 # And now the scary looking part.
243 # Recreate source and build links.
244 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
245 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
246 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
248 # Create dirs for extra modules.
249 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
251 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
252 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
253 cp Module.symvers System.map \
254 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
255 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
257 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
258 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
259 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
262 cp -a --parents arch/%{kernel_arch}/include \
263 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
264 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
266 # Make sure we can build external modules.
267 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
268 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
269 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
271 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
272 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
274 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
275 xargs --no-run-if-empty chmod u+x
277 # Move all development files to /usr/src.
278 mkdir -p %{BUILDROOT}/usr/src/kernels
279 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
280 %{BUILDROOT}/usr/src/kernels/${fullversion}
281 ln -sf ../../../src/kernels/${fullversion} \
282 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
285 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
286 -exec chmod 644 {} \;
288 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
291 for kernel in %{kernels}; do
292 build_kernel ${kernel}
297 %{perf_make} DESTDIR=%{BUILDROOT} all
300 chmod +x tools/power/cpupower/utils/version-gen.sh
301 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
303 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
304 pushd tools/power/cpupower/debug/x86_64
305 make %{MAKETUNING} centrino-decode powernow-k8-decode
307 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
308 pushd tools/power/cpupower/debug/i386
309 make %{MAKETUNING} centrino-decode powernow-k8-decode
313 # Should be built for all x86 architectures
314 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
315 # Won't compile on i686
316 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
317 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
318 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
320 pushd tools/power/x86/x86_energy_perf_policy
325 pushd tools/power/x86/turbostat
330 pushd tools/thermal/tmon
336 # When no kernels are configured, we create a default config
337 # which enables us to install at least the header files.
338 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
340 # Install the header files
341 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
342 mkdir -pv %{BUILDROOT}/usr/include
343 find dest/include \( -name .install -o -name ..install.cmd \) -delete
344 cp -rv dest/include/* %{BUILDROOT}/usr/include
346 # Glibc provides these headers
347 rm -rfv %{BUILDROOT}/usr/include/scsi \
348 %{BUILDROOT}/usr/include/asm*/atomic.h \
349 %{BUILDROOT}/usr/include/asm*/io.h \
350 %{BUILDROOT}/usr/include/asm*/irq.h
352 # Remove all firmware files which are distributed by linux-firmware
353 rm -rfv %{BUILDROOT}/lib/firmware
356 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
359 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
360 mandir=%{mandir} CPUFREQ_BENCH=false install
362 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
363 pushd tools/power/cpupower/debug/x86_64
364 install -m 755 centrino-decode \
365 %{BUILDROOT}/usr/bin/centrino-decode
366 install -m 755 powernow-k8-decode \
367 %{BUILDROOT}/usr/bin/powernow-k8-decode
369 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
370 pushd tools/power/cpupower/debug/i386
371 install -m 755 centrino-decode \
372 %{BUILDROOT}/usr/bin/centrino-decode
373 install -m 755 powernow-k8-decode \
374 %{BUILDROOT}/usr/bin/powernow-k8-decode
378 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
380 # This should be built for all x86 architectures
381 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
382 mkdir -pv %{BUILDROOT}%{mandir}/man8
384 pushd tools/power/x86/x86_energy_perf_policy
385 make DESTDIR=%{BUILDROOT} install
388 pushd tools/power/x86/turbostat
389 make DESTDIR=%{BUILDROOT} install
394 pushd tools/thermal/tmon
395 make INSTALL_ROOT=%{BUILDROOT} install
403 kernel_release = %{fullver}
405 summary = The Linux kernel %{kernel_release}.
412 kernel=%{kernel_release}
422 /boot/System.map-%{kernel_release}
423 /boot/dtb-%{kernel_release}
424 /boot/vmlinuz-%{kernel_release}
425 /boot/initramfs-%{kernel_release}.img
426 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
427 /usr/lib/modules/%{kernel_release}
431 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
432 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
444 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
448 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
452 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
457 kernel_release = %{fullver}
459 summary = Development files of kernel-%{kernel_release}.
463 Install this package in order to compile modules for
464 kernel release %{kernel_release}.
468 kernel-devel = %{thisver}
476 /usr/lib/modules/%{kernel_release}/build
477 /usr/lib/modules/%{kernel_release}/source
478 /usr/src/kernels/%{kernel_release}
482 if "%{build_kernel_default}" == "1"
483 if "%{DISTRO_ARCH}" == "armv7hl"
488 kernel_release = %{fullver}
490 # Replace the Exynos kernel.
491 obsoletes += kernel-exynos < %{kernel_release}
492 conflicts += kernel-exynos < %{kernel_release}
494 # Replace the OMAP kernel.
495 obsoletes += kernel-omap < %{kernel_release}
496 conflicts += kernel-omap < %{kernel_release}
503 kernel_release = %{fullver}
505 # Replace the Exynos kernel.
506 obsoletes += kernel-exynos-devel < %{kernel_release}
507 conflicts += kernel-exynos-devel < %{kernel_release}
509 # Replace the OMAP kernel.
510 obsoletes += kernel-omap-devel < %{kernel_release}
511 conflicts += kernel-omap-devel < %{kernel_release}
519 kernel_release = %{fullver}
526 kernel_release = %{fullver}
531 if "%{build_kernel_legacy}" == "1"
532 package kernel-legacy
535 kernel_name = kernel-legacy
536 kernel_release = %{fullver}.legacy
539 package kernel-legacy-devel
542 kernel_name = kernel-legacy
543 kernel_release = %{fullver}.legacy
547 package kernel-headers
548 summary = Header files of the kernel release %{fullver}.
549 desciption = %{summary}
557 summary = Assortment of tools for the Linux kernel.
558 description = %{summary}