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
64 # i686 needs librmi for cpupower.
65 if "%{DISTRO_ARCH}" == "i686"
66 requires += liblrmi-devel
69 # A list of kernels to build.
72 # Arguments that are passed to the kernel build command.
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
87 if "%{DISTRO_ARCH}" == "x86_64"
88 build_kernel_default = 1
93 if "%{DISTRO_ARCH}" == "armv5tel"
94 # Build a kernel for Marvell Kirkwood-based devices.
95 build_kernel_default = 1
98 kernel_target = zImage
100 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
101 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
104 if "%{DISTRO_ARCH}" == "armv7hl"
105 # Build the default unified kernel.
106 build_kernel_default = 1
107 build_kernel_lpae = 1
110 kernel_target = zImage
113 # mkimage is a requirement to build uImage images.
114 if "%{kernel_target}" == "uImage"
115 requires += u-boot-tools
118 # Build default kernel.
119 if "%{build_kernel_default}" == "1"
123 # Build legacy kernel.
124 if "%{build_kernel_legacy}" == "1"
129 if "%{build_kernel_lpae}" == "1"
133 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
134 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
135 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
138 rm -f %{DIR_APP}/localversion-grsec
140 # Remove -Werror flag to fix ARMv5 build.
141 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
143 # Disable the colorize plugin.
144 # It's generally very nice but it clutters our
146 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
149 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
151 cp -vf %{kernel_logo} \
152 drivers/video/logo/logo_linux_clut224.ppm
154 # Get rid of unwanted files resulting from patch fuzz.
155 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
157 # Remove unnecessary SCM files.
158 find . -name .gitignore -exec rm -f {} \; >/dev/null
160 # This prevents scripts/setlocalversion from mucking with our version numbers.
169 if [ "${flavour}" != "default" ]; then
173 scripts/configure --kernel-dir=%{DIR_APP} \
174 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
177 # Generate configuration files for all kernels we are going to
179 for kernel in %{kernels}; do
180 configure_kernel ${kernel}
184 # Prevent perf from installing any files in /usr/libexec
185 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
192 local localversion="%{localversion}"
193 local fullversion="%{fullver}"
194 if [ "${flavour}" != "default" ]; then
196 localversion="${localversion}.${flavour}"
197 fullversion="${fullversion}.${flavour}"
202 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
204 # Clean up the source tree.
207 # Install configuration file.
208 cp configs/config.${flavour} .config
212 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
213 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
214 %{kernel_build_flags} %{PARALLELISMFLAGS}
216 # Compile Flattened Device Tree database
217 case "${DISTRO_ARCH}" in
219 make ARCH=%{kernel_arch} dtbs
221 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
222 for file in arch/arm/boot/dts/*.dtb; do
223 [ -e "${file}" ] || continue
225 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
231 # Install the results.
232 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
233 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
234 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
235 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
237 # Create empty initramfs (20M).
238 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
241 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
242 KERNELRELEASE=${fullversion} modules_install
245 case "%{DISTRO_ARCH}" in
247 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
248 KERNELRELEASE=${fullversion} vdso_install
252 # Create an empty settings file for dracut
253 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
254 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
255 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
257 # And now the scary looking part.
259 # Recreate source and build links.
260 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
261 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
262 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
264 # Create dirs for extra modules.
265 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
267 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
268 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
269 cp Module.symvers System.map \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
271 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
273 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
274 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
275 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
278 cp -a --parents arch/%{kernel_arch}/include \
279 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
280 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
282 # Make sure we can build external modules.
283 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
284 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
285 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
286 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
287 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
288 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
290 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
293 # Move all development files to /usr/src.
294 mkdir -p %{BUILDROOT}/usr/src/kernels
295 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
296 %{BUILDROOT}/usr/src/kernels/${fullversion}
297 ln -sf ../../../src/kernels/${fullversion} \
298 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
301 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
302 -exec chmod 644 {} \;
304 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
307 for kernel in %{kernels}; do
308 build_kernel ${kernel}
313 %{perf_make} DESTDIR=%{BUILDROOT} all
316 chmod +x tools/power/cpupower/utils/version-gen.sh
317 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
319 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
320 pushd tools/power/cpupower/debug/x86_64
321 make %{MAKETUNING} centrino-decode powernow-k8-decode
323 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
324 pushd tools/power/cpupower/debug/i386
325 make %{MAKETUNING} centrino-decode powernow-k8-decode
329 # Should be built for all x86 architectures
330 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
331 # Won't compile on i686
332 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
333 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
334 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
336 pushd tools/power/x86/x86_energy_perf_policy
341 pushd tools/power/x86/turbostat
346 pushd tools/thermal/tmon
352 # When no kernels are configured, we create a default config
353 # which enables us to install at least the header files.
354 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
356 # Install the header files
357 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
358 mkdir -pv %{BUILDROOT}/usr/include
359 find dest/include \( -name .install -o -name ..install.cmd \) -delete
360 cp -rv dest/include/* %{BUILDROOT}/usr/include
362 # Glibc provides these headers
363 rm -rfv %{BUILDROOT}/usr/include/scsi \
364 %{BUILDROOT}/usr/include/asm*/atomic.h \
365 %{BUILDROOT}/usr/include/asm*/io.h \
366 %{BUILDROOT}/usr/include/asm*/irq.h
368 # Remove all firmware files which are distributed by linux-firmware
369 rm -rfv %{BUILDROOT}/lib/firmware
372 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
375 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
376 mandir=%{mandir} CPUFREQ_BENCH=false install
378 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
379 pushd tools/power/cpupower/debug/x86_64
380 install -m 755 centrino-decode \
381 %{BUILDROOT}/usr/bin/centrino-decode
382 install -m 755 powernow-k8-decode \
383 %{BUILDROOT}/usr/bin/powernow-k8-decode
385 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
386 pushd tools/power/cpupower/debug/i386
387 install -m 755 centrino-decode \
388 %{BUILDROOT}/usr/bin/centrino-decode
389 install -m 755 powernow-k8-decode \
390 %{BUILDROOT}/usr/bin/powernow-k8-decode
394 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
396 # This should be built for all x86 architectures
397 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
398 mkdir -pv %{BUILDROOT}%{mandir}/man8
400 pushd tools/power/x86/x86_energy_perf_policy
401 make DESTDIR=%{BUILDROOT} install
404 pushd tools/power/x86/turbostat
405 make DESTDIR=%{BUILDROOT} install
410 pushd tools/thermal/tmon
411 make INSTALL_ROOT=%{BUILDROOT} install
419 kernel_release = %{fullver}
421 summary = The Linux kernel %{kernel_release}.
428 kernel=%{kernel_release}
438 /boot/System.map-%{kernel_release}
439 /boot/dtb-%{kernel_release}
440 /boot/vmlinuz-%{kernel_release}
441 /boot/initramfs-%{kernel_release}.img
442 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
443 /usr/lib/modules/%{kernel_release}
447 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
448 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
460 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
464 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
468 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
473 kernel_release = %{fullver}
475 summary = Development files of kernel-%{kernel_release}.
479 Install this package in order to compile modules for
480 kernel release %{kernel_release}.
484 kernel-devel = %{thisver}
492 /usr/lib/modules/%{kernel_release}/build
493 /usr/lib/modules/%{kernel_release}/source
494 /usr/src/kernels/%{kernel_release}
498 if "%{build_kernel_default}" == "1"
499 if "%{DISTRO_ARCH}" == "armv7hl"
504 kernel_release = %{fullver}
506 # Replace the Exynos kernel.
507 obsoletes += kernel-exynos < %{kernel_release}
508 conflicts += kernel-exynos < %{kernel_release}
510 # Replace the OMAP kernel.
511 obsoletes += kernel-omap < %{kernel_release}
512 conflicts += kernel-omap < %{kernel_release}
519 kernel_release = %{fullver}
521 # Replace the Exynos kernel.
522 obsoletes += kernel-exynos-devel < %{kernel_release}
523 conflicts += kernel-exynos-devel < %{kernel_release}
525 # Replace the OMAP kernel.
526 obsoletes += kernel-omap-devel < %{kernel_release}
527 conflicts += kernel-omap-devel < %{kernel_release}
535 kernel_release = %{fullver}
542 kernel_release = %{fullver}
547 if "%{build_kernel_legacy}" == "1"
548 package kernel-legacy
551 kernel_name = kernel-legacy
552 kernel_release = %{fullver}.legacy
555 package kernel-legacy-devel
558 kernel_name = kernel-legacy
559 kernel_release = %{fullver}.legacy
563 if "%{build_kernel_lpae}" == "1"
567 kernel_name = kernel-lpae
568 kernel_release = %{fullver}.lpae
571 package kernel-lpae-devel
574 kernel_name = kernel-lpae
575 kernel_release = %{fullver}.lpae
579 package kernel-headers
580 summary = Header files of the kernel release %{fullver}.
581 desciption = %{summary}
589 summary = Assortment of tools for the Linux kernel.
590 description = %{summary}