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 # Disable the colorize plugin.
123 # It's generally very nice but it clutters our
125 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
128 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
130 cp -vf %{kernel_logo} \
131 drivers/video/logo/logo_linux_clut224.ppm
133 # Get rid of unwanted files resulting from patch fuzz.
134 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
136 # Remove unnecessary SCM files.
137 find . -name .gitignore -exec rm -f {} \; >/dev/null
139 # This prevents scripts/setlocalversion from mucking with our version numbers.
148 if [ "${flavour}" != "default" ]; then
152 scripts/configure --kernel-dir=%{DIR_APP} \
153 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
156 # Generate configuration files for all kernels we are going to
158 for kernel in %{kernels}; do
159 configure_kernel ${kernel}
163 # Prevent perf from installing any files in /usr/libexec
164 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
171 local localversion="%{localversion}"
172 local fullversion="%{fullver}"
173 if [ "${flavour}" != "default" ]; then
175 localversion="${localversion}.${flavour}"
176 fullversion="${fullversion}.${flavour}"
181 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
183 # Clean up the source tree.
186 # Install configuration file.
187 cp configs/config.${flavour} .config
191 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
192 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
193 %{kernel_build_flags} %{PARALLELISMFLAGS}
195 # Compile Flattened Device Tree database
196 case "${DISTRO_ARCH}" in
198 make ARCH=%{kernel_arch} dtbs
200 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
201 for file in arch/arm/boot/dts/*.dtb; do
202 [ -e "${file}" ] || continue
204 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
210 # Install the results.
211 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
212 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
213 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
214 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
216 # Create empty initramfs (20M).
217 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
220 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
221 KERNELRELEASE=${fullversion} modules_install
224 case "%{DISTRO_ARCH}" in
226 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
227 KERNELRELEASE=${fullversion} vdso_install
231 # Create an empty settings file for dracut
232 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
233 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
234 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
236 # And now the scary looking part.
238 # Recreate source and build links.
239 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
240 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
241 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
243 # Create dirs for extra modules.
244 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
246 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
247 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
248 cp Module.symvers System.map \
249 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
250 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
252 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
253 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
254 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
257 cp -a --parents arch/%{kernel_arch}/include \
258 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
259 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
261 # Make sure we can build external modules.
262 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
263 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
264 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
265 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
266 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
267 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
269 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
270 xargs --no-run-if-empty chmod u+x
272 # Move all development files to /usr/src.
273 mkdir -p %{BUILDROOT}/usr/src/kernels
274 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
275 %{BUILDROOT}/usr/src/kernels/${fullversion}
276 ln -sf ../../../src/kernels/${fullversion} \
277 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
280 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
281 -exec chmod 644 {} \;
283 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
286 for kernel in %{kernels}; do
287 build_kernel ${kernel}
292 %{perf_make} DESTDIR=%{BUILDROOT} all
295 chmod +x tools/power/cpupower/utils/version-gen.sh
296 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
298 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
299 pushd tools/power/cpupower/debug/x86_64
300 make %{MAKETUNING} centrino-decode powernow-k8-decode
302 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
303 pushd tools/power/cpupower/debug/i386
304 make %{MAKETUNING} centrino-decode powernow-k8-decode
308 # Should be built for all x86 architectures
309 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
310 # Won't compile on i686
311 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
312 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
313 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
315 pushd tools/power/x86/x86_energy_perf_policy
320 pushd tools/power/x86/turbostat
325 pushd tools/thermal/tmon
331 # When no kernels are configured, we create a default config
332 # which enables us to install at least the header files.
333 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
335 # Install the header files
336 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
337 mkdir -pv %{BUILDROOT}/usr/include
338 find dest/include \( -name .install -o -name ..install.cmd \) -delete
339 cp -rv dest/include/* %{BUILDROOT}/usr/include
341 # Glibc provides these headers
342 rm -rfv %{BUILDROOT}/usr/include/scsi \
343 %{BUILDROOT}/usr/include/asm*/atomic.h \
344 %{BUILDROOT}/usr/include/asm*/io.h \
345 %{BUILDROOT}/usr/include/asm*/irq.h
347 # Remove all firmware files which are distributed by linux-firmware
348 rm -rfv %{BUILDROOT}/lib/firmware
351 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
354 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
355 mandir=%{mandir} CPUFREQ_BENCH=false install
357 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
358 pushd tools/power/cpupower/debug/x86_64
359 install -m 755 centrino-decode \
360 %{BUILDROOT}/usr/bin/centrino-decode
361 install -m 755 powernow-k8-decode \
362 %{BUILDROOT}/usr/bin/powernow-k8-decode
364 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
365 pushd tools/power/cpupower/debug/i386
366 install -m 755 centrino-decode \
367 %{BUILDROOT}/usr/bin/centrino-decode
368 install -m 755 powernow-k8-decode \
369 %{BUILDROOT}/usr/bin/powernow-k8-decode
373 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
375 # This should be built for all x86 architectures
376 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
377 mkdir -pv %{BUILDROOT}%{mandir}/man8
379 pushd tools/power/x86/x86_energy_perf_policy
380 make DESTDIR=%{BUILDROOT} install
383 pushd tools/power/x86/turbostat
384 make DESTDIR=%{BUILDROOT} install
389 pushd tools/thermal/tmon
390 make INSTALL_ROOT=%{BUILDROOT} install
398 kernel_release = %{fullver}
400 summary = The Linux kernel %{kernel_release}.
407 kernel=%{kernel_release}
417 /boot/System.map-%{kernel_release}
418 /boot/dtb-%{kernel_release}
419 /boot/vmlinuz-%{kernel_release}
420 /boot/initramfs-%{kernel_release}.img
421 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
422 /usr/lib/modules/%{kernel_release}
426 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
427 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
439 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
443 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
447 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
452 kernel_release = %{fullver}
454 summary = Development files of kernel-%{kernel_release}.
458 Install this package in order to compile modules for
459 kernel release %{kernel_release}.
463 kernel-devel = %{thisver}
471 /usr/lib/modules/%{kernel_release}/build
472 /usr/lib/modules/%{kernel_release}/source
473 /usr/src/kernels/%{kernel_release}
477 if "%{build_kernel_default}" == "1"
478 if "%{DISTRO_ARCH}" == "armv7hl"
483 kernel_release = %{fullver}
485 # Replace the Exynos kernel.
486 obsoletes += kernel-exynos < %{kernel_release}
487 conflicts += kernel-exynos < %{kernel_release}
489 # Replace the OMAP kernel.
490 obsoletes += kernel-omap < %{kernel_release}
491 conflicts += kernel-omap < %{kernel_release}
498 kernel_release = %{fullver}
500 # Replace the Exynos kernel.
501 obsoletes += kernel-exynos-devel < %{kernel_release}
502 conflicts += kernel-exynos-devel < %{kernel_release}
504 # Replace the OMAP kernel.
505 obsoletes += kernel-omap-devel < %{kernel_release}
506 conflicts += kernel-omap-devel < %{kernel_release}
514 kernel_release = %{fullver}
521 kernel_release = %{fullver}
526 if "%{build_kernel_legacy}" == "1"
527 package kernel-legacy
530 kernel_name = kernel-legacy
531 kernel_release = %{fullver}.legacy
534 package kernel-legacy-devel
537 kernel_name = kernel-legacy
538 kernel_release = %{fullver}.legacy
542 package kernel-headers
543 summary = Header files of the kernel release %{fullver}.
544 desciption = %{summary}
552 summary = Assortment of tools for the Linux kernel.
553 description = %{summary}