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
63 # i686 needs librmi for cpupower.
64 if "%{DISTRO_ARCH}" == "i686"
65 requires += liblrmi-devel
68 # A list of kernels to build.
71 # Arguments that are passed to the kernel build command.
74 kernel_arch = %{DISTRO_PLATFORM}
75 kernel_target = bzImage
76 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
78 if "%{DISTRO_ARCH}" == "i686"
79 # Build a default and legacy kernel for the
81 build_kernel_default = 1
82 build_kernel_legacy = 1
85 if "%{DISTRO_ARCH}" == "x86_64"
86 build_kernel_default = 1
89 if "%{DISTRO_ARCH}" == "aarch64"
90 # Disable for now because it won't compile
91 build_kernel_default = 0
94 kernel_target = Image.gz
97 if "%{DISTRO_ARCH}" == "armv7hl"
98 # Build the default unified kernel.
99 build_kernel_default = 1
101 kernel_target = zImage
104 # mkimage is a requirement to build uImage images.
105 if "%{kernel_target}" == "uImage"
106 requires += u-boot-tools
109 # Build default kernel.
110 if "%{build_kernel_default}" == "1"
114 # Build legacy kernel.
115 if "%{build_kernel_legacy}" == "1"
119 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
120 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
121 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
124 # Disable the colorize plugin.
125 # It's generally very nice but it clutters our
127 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
130 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
132 cp -vf %{kernel_logo} \
133 drivers/video/logo/logo_linux_clut224.ppm
135 # Get rid of unwanted files resulting from patch fuzz.
136 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
138 # Remove unnecessary SCM files.
139 find . -name .gitignore -exec rm -f {} \; >/dev/null
141 # This prevents scripts/setlocalversion from mucking with our version numbers.
150 if [ "${flavour}" != "default" ]; then
154 scripts/configure --kernel-dir=%{DIR_APP} \
155 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
158 # Generate configuration files for all kernels we are going to
160 for kernel in %{kernels}; do
161 configure_kernel ${kernel}
165 # Prevent perf from installing any files in /usr/libexec
166 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
173 local localversion="%{localversion}"
174 local fullversion="%{fullver}"
175 if [ "${flavour}" != "default" ]; then
177 localversion="${localversion}.${flavour}"
178 fullversion="${fullversion}.${flavour}"
183 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
185 # Clean up the source tree.
188 # Install configuration file.
189 cp configs/config.${flavour} .config
193 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
194 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
195 %{kernel_build_flags} %{PARALLELISMFLAGS}
197 # Compile Flattened Device Tree database
198 case "${DISTRO_ARCH}" in
200 make ARCH=%{kernel_arch} dtbs
202 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
203 for file in arch/arm/boot/dts/*.dtb; do
204 [ -e "${file}" ] || continue
206 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
212 # Install the results.
213 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
214 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
215 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
216 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
218 # Create empty initramfs (20M).
219 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
222 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
223 KERNELRELEASE=${fullversion} modules_install
226 case "%{DISTRO_ARCH}" in
228 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
229 KERNELRELEASE=${fullversion} vdso_install
233 # Create an empty settings file for dracut
234 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
235 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
236 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
238 # And now the scary looking part.
240 # Recreate source and build links.
241 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
242 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
243 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
245 # Create dirs for extra modules.
246 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
248 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
249 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
250 cp Module.symvers System.map \
251 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
252 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
254 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
255 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
256 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
259 cp -a --parents arch/%{kernel_arch}/include \
260 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
261 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
263 # Make sure we can build external modules.
264 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
265 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
266 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
267 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
268 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
269 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
271 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
272 xargs --no-run-if-empty chmod u+x
274 # Move all development files to /usr/src.
275 mkdir -p %{BUILDROOT}/usr/src/kernels
276 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
277 %{BUILDROOT}/usr/src/kernels/${fullversion}
278 ln -sf ../../../src/kernels/${fullversion} \
279 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
282 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
283 -exec chmod 644 {} \;
285 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
288 for kernel in %{kernels}; do
289 build_kernel ${kernel}
294 %{perf_make} DESTDIR=%{BUILDROOT} all
297 chmod +x tools/power/cpupower/utils/version-gen.sh
298 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
300 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
301 pushd tools/power/cpupower/debug/x86_64
302 make %{MAKETUNING} centrino-decode powernow-k8-decode
304 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
305 pushd tools/power/cpupower/debug/i386
306 make %{MAKETUNING} centrino-decode powernow-k8-decode
310 # Should be built for all x86 architectures
311 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
312 # Won't compile on i686
313 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
314 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
315 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
317 pushd tools/power/x86/x86_energy_perf_policy
322 pushd tools/power/x86/turbostat
327 pushd tools/thermal/tmon
333 # When no kernels are configured, we create a default config
334 # which enables us to install at least the header files.
335 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
337 # Install the header files
338 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
339 mkdir -pv %{BUILDROOT}/usr/include
340 find dest/include \( -name .install -o -name ..install.cmd \) -delete
341 cp -rv dest/include/* %{BUILDROOT}/usr/include
343 # Glibc provides these headers
344 rm -rfv %{BUILDROOT}/usr/include/scsi \
345 %{BUILDROOT}/usr/include/asm*/atomic.h \
346 %{BUILDROOT}/usr/include/asm*/io.h \
347 %{BUILDROOT}/usr/include/asm*/irq.h
349 # Remove all firmware files which are distributed by linux-firmware
350 rm -rfv %{BUILDROOT}/lib/firmware
353 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
356 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
357 mandir=%{mandir} CPUFREQ_BENCH=false install
359 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
360 pushd tools/power/cpupower/debug/x86_64
361 install -m 755 centrino-decode \
362 %{BUILDROOT}/usr/bin/centrino-decode
363 install -m 755 powernow-k8-decode \
364 %{BUILDROOT}/usr/bin/powernow-k8-decode
366 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
367 pushd tools/power/cpupower/debug/i386
368 install -m 755 centrino-decode \
369 %{BUILDROOT}/usr/bin/centrino-decode
370 install -m 755 powernow-k8-decode \
371 %{BUILDROOT}/usr/bin/powernow-k8-decode
375 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
377 # This should be built for all x86 architectures
378 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
379 mkdir -pv %{BUILDROOT}%{mandir}/man8
381 pushd tools/power/x86/x86_energy_perf_policy
382 make DESTDIR=%{BUILDROOT} install
385 pushd tools/power/x86/turbostat
386 make DESTDIR=%{BUILDROOT} install
391 pushd tools/thermal/tmon
392 make INSTALL_ROOT=%{BUILDROOT} install
400 kernel_release = %{fullver}
402 summary = The Linux kernel %{kernel_release}.
409 kernel=%{kernel_release}
419 /boot/System.map-%{kernel_release}
420 /boot/dtb-%{kernel_release}
421 /boot/vmlinuz-%{kernel_release}
422 /boot/initramfs-%{kernel_release}.img
423 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
424 /usr/lib/modules/%{kernel_release}
428 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
429 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
441 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
445 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
449 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
454 kernel_release = %{fullver}
456 summary = Development files of kernel-%{kernel_release}.
460 Install this package in order to compile modules for
461 kernel release %{kernel_release}.
465 kernel-devel = %{thisver}
473 /usr/lib/modules/%{kernel_release}/build
474 /usr/lib/modules/%{kernel_release}/source
475 /usr/src/kernels/%{kernel_release}
479 if "%{build_kernel_default}" == "1"
480 if "%{DISTRO_ARCH}" == "armv7hl"
485 kernel_release = %{fullver}
487 # Replace the Exynos kernel.
488 obsoletes += kernel-exynos < %{kernel_release}
489 conflicts += kernel-exynos < %{kernel_release}
491 # Replace the OMAP kernel.
492 obsoletes += kernel-omap < %{kernel_release}
493 conflicts += kernel-omap < %{kernel_release}
500 kernel_release = %{fullver}
502 # Replace the Exynos kernel.
503 obsoletes += kernel-exynos-devel < %{kernel_release}
504 conflicts += kernel-exynos-devel < %{kernel_release}
506 # Replace the OMAP kernel.
507 obsoletes += kernel-omap-devel < %{kernel_release}
508 conflicts += kernel-omap-devel < %{kernel_release}
516 kernel_release = %{fullver}
523 kernel_release = %{fullver}
528 if "%{build_kernel_legacy}" == "1"
529 package kernel-legacy
532 kernel_name = kernel-legacy
533 kernel_release = %{fullver}.legacy
536 package kernel-legacy-devel
539 kernel_name = kernel-legacy
540 kernel_release = %{fullver}.legacy
544 package kernel-headers
545 summary = Header files of the kernel release %{fullver}.
546 desciption = %{summary}
554 summary = Assortment of tools for the Linux kernel.
555 description = %{summary}