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 # ERROR Currently all kernel images are disabled, because they
95 # won't build with the grsecurity patch.
97 # Build a kernel for Marvell Kirkwood-based devices.
98 build_kernel_kirkwood = 1
101 kernel_target = zImage
103 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
104 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
107 if "%{DISTRO_ARCH}" == "armv7hl"
108 # Build the default unified kernel.
109 build_kernel_default = 1
111 # Build a kernel for Samsung's Exynos SoCs.
112 build_kernel_exynos = 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 exynos kernel.
129 if "%{build_kernel_exynos}" == "1"
133 # Build legacy kernel.
134 if "%{build_kernel_legacy}" == "1"
138 # Build ARM kirkwood kernel.
139 if "%{build_kernel_kirkwood}" == "1"
144 rm -f %{DIR_APP}/localversion-grsec
146 # Remove -Werror flag to fix ARMv5 build.
147 sed -e "s/-Werror//g" -i grsecurity/Makefile
149 # Disable the colorize plugin.
150 # It's generally very nice but it clutters our
152 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
155 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
157 cp -vf %{kernel_logo} \
158 drivers/video/logo/logo_linux_clut224.ppm
160 # Get rid of unwanted files resulting from patch fuzz.
161 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
163 # Remove unnecessary SCM files.
164 find . -name .gitignore -exec rm -f {} \; >/dev/null
166 # This prevents scripts/setlocalversion from mucking with our version numbers.
175 if [ "${flavour}" != "default" ]; then
179 scripts/configure --kernel-dir=%{DIR_APP} \
180 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
183 # Generate configuration files for all kernels we are going to
185 for kernel in %{kernels}; do
186 configure_kernel ${kernel}
194 local localversion="%{localversion}"
195 local fullversion="%{fullver}"
196 if [ "${flavour}" != "default" ]; then
198 localversion="${localversion}.${flavour}"
199 fullversion="${fullversion}.${flavour}"
204 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
206 # Clean up the source tree.
209 # Install configuration file.
210 cp configs/config.${flavour} .config
214 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
215 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
216 %{kernel_build_flags} %{PARALLELISMFLAGS}
218 # Compile Flattened Device Tree database
219 case "${DISTRO_ARCH}" in
221 make ARCH=%{kernel_arch} dtbs
223 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
224 for file in arch/arm/boot/dts/*.dtb; do
225 [ -e "${file}" ] || continue
227 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
233 # Install the results.
234 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
235 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
236 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
237 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
239 # Create empty initramfs (20M).
240 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
243 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
244 KERNELRELEASE=${fullversion} modules_install
247 case "%{DISTRO_ARCH}" in
249 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
250 KERNELRELEASE=${fullversion} vdso_install
254 # Create an empty settings file for dracut
255 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
256 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
257 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
259 # And now the scary looking part.
261 # Recreate source and build links.
262 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
263 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
264 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
266 # Create dirs for extra modules.
267 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
269 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
271 cp Module.symvers System.map \
272 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
273 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
275 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
276 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
277 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
280 cp -a --parents arch/%{kernel_arch}/include \
281 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
282 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
284 # Make sure we can build external modules.
285 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
286 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
287 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
288 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
289 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
290 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
292 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
295 # Move all development files to /usr/src.
296 mkdir -p %{BUILDROOT}/usr/src/kernels
297 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
298 %{BUILDROOT}/usr/src/kernels/${fullversion}
299 ln -sf ../../../src/kernels/${fullversion} \
300 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
303 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
304 -exec chmod 644 {} \;
306 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
309 for kernel in %{kernels}; do
310 build_kernel ${kernel}
315 chmod +x tools/power/cpupower/utils/version-gen.sh
316 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
318 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
319 pushd tools/power/cpupower/debug/x86_64
322 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
323 pushd tools/power/cpupower/debug/i386
330 # When no kernels are configured, we create a default config
331 # which enables us to install at least the header files.
332 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
334 # Install the header files
335 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
336 mkdir -pv %{BUILDROOT}/usr/include
337 find dest/include \( -name .install -o -name ..install.cmd \) -delete
338 cp -rv dest/include/* %{BUILDROOT}/usr/include
340 # Glibc provides these headers
341 rm -rfv %{BUILDROOT}/usr/include/scsi \
342 %{BUILDROOT}/usr/include/asm*/atomic.h \
343 %{BUILDROOT}/usr/include/asm*/io.h \
344 %{BUILDROOT}/usr/include/asm*/irq.h
346 # Remove all firmware files which are distributed by linux-firmware
347 rm -rfv %{BUILDROOT}/lib/firmware
350 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
351 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
352 install install-man install-python_ext
355 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
356 mandir=%{mandir} CPUFREQ_BENCH=false install
358 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
359 pushd tools/power/cpupower/debug/x86_64
360 install -m 755 centrino-decode \
361 %{BUILDROOT}/usr/bin/centrino-decode
362 install -m 755 powernow-k8-decode \
363 %{BUILDROOT}/usr/bin/powernow-k8-decode
365 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
366 pushd tools/power/cpupower/debug/i386
367 install -m 755 centrino-decode \
368 %{BUILDROOT}/usr/bin/centrino-decode
369 install -m 755 powernow-k8-decode \
370 %{BUILDROOT}/usr/bin/powernow-k8-decode
374 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
381 kernel_release = %{fullver}
383 summary = The Linux kernel %{kernel_release}.
390 kernel=%{kernel_release}
400 /boot/System.map-%{kernel_release}
401 /boot/dtb-%{kernel_release}
402 /boot/vmlinuz-%{kernel_release}
403 /boot/initramfs-%{kernel_release}.img
404 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
405 /usr/lib/modules/%{kernel_release}
409 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
410 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
422 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
426 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
430 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
435 kernel_release = %{fullver}
437 summary = Development files of kernel-%{kernel_release}.
441 Install this package in order to compile modules for
442 kernel release %{kernel_release}.
450 /usr/lib/modules/%{kernel_release}/build
451 /usr/lib/modules/%{kernel_release}/source
452 /usr/src/kernels/%{kernel_release}
456 if "%{build_kernel_default}" == "1"
457 if "%{DISTRO_ARCH}" == "armv7hl"
462 kernel_release = %{fullver}
464 # Replace the OMAP kernel.
465 obsoletes += kernel-omap < %{kernel_release}
466 conflicts += kernel-omap < %{kernel_release}
473 kernel_release = %{fullver}
475 # Replace the OMAP kernel.
476 obsoletes += kernel-omap-devel < %{kernel_release}
477 conflicts += kernel-omap-devel < %{kernel_release}
485 kernel_release = %{fullver}
492 kernel_release = %{fullver}
497 if "%{build_kernel_exynos}" == "1"
498 package kernel-exynos
501 kernel_name = kernel-exynos
502 kernel_release = %{fullver}.exynos
505 package kernel-exynos-devel
508 kernel_name = kernel-exynos
509 kernel_release = %{fullver}.exynos
513 if "%{build_kernel_legacy}" == "1"
514 package kernel-legacy
517 kernel_name = kernel-legacy
518 kernel_release = %{fullver}.legacy
521 package kernel-legacy-devel
524 kernel_name = kernel-legacy
525 kernel_release = %{fullver}.legacy
529 if "%{build_kernel_kirkwood}" == "1"
530 package kernel-kirkwood
533 kernel_name = kernel-kirkwood
534 kernel_release = %{fullver}.kirkwood
537 package kernel-kirkwood-devel
540 kernel_name = kernel-kirkwood
541 kernel_release = %{fullver}.kirkwood
545 package kernel-headers
546 summary = Header files of the kernel release %{fullver}.
547 desciption = %{summary}
555 summary = Assortment of tools for the Linux kernel.
556 description = %{summary}