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.
40 binutils >= 2.23.51.0.3-3
60 # i686 needs librmi for cpupower.
61 if "%{DISTRO_ARCH}" == "i686"
62 requires += liblrmi-devel
65 # A list of kernels to build.
68 # Arguments that are passed to the kernel build command.
71 kernel_target = bzImage
72 if "%{DISTRO_ARCH}" == "i686"
73 # Build a default and legacy kernel for the
75 build_kernel_default = 1
76 build_kernel_legacy = 1
79 kernel_image = arch/%{kernel_arch}/boot/bzImage
83 if "%{DISTRO_ARCH}" == "x86_64"
84 build_kernel_default = 1
87 kernel_image = arch/%{kernel_arch}/boot/bzImage
90 if "%{DISTRO_ARCH}" == "armv5tel"
91 # ERROR Currently all kernel images are disabled, because they
92 # won't build with the grsecurity patch.
94 # Build a kernel for Marvell Kirkwood-based devices.
95 build_kernel_kirkwood = 1
98 kernel_image = arch/%{kernel_arch}/boot/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 a kernel for Samsung's Exynos SoCs.
106 build_kernel_exynos = 1
108 # Build a kernel for TI OMAP SoCs.
109 build_kernel_omap = 1
112 kernel_image = arch/%{kernel_arch}/boot/zImage
115 # Build default kernel.
116 if "%{build_kernel_default}" == "1"
120 # Build exynos kernel.
121 if "%{build_kernel_exynos}" == "1"
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
130 # Build ARM kirkwood kernel.
131 if "%{build_kernel_kirkwood}" == "1"
135 # Build ARM omap kernel.
136 if "%{build_kernel_omap}" == "1"
141 rm -f %{DIR_APP}/localversion-grsec
143 # Remove -Werror flag to fix ARMv5 build.
144 sed -e "s/-Werror//g" -i grsecurity/Makefile
146 # Disable the colorize plugin.
147 # It's generally very nice but it clutters our
149 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
152 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
154 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
155 drivers/video/logo/logo_linux_clut224.ppm
157 # Get rid of unwanted files resulting from patch fuzz.
158 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
160 # Remove unnecessary SCM files.
161 find . -name .gitignore -exec rm -f {} \; >/dev/null
163 # This prevents scripts/setlocalversion from mucking with our version numbers.
172 if [ "${flavour}" != "default" ]; then
176 scripts/configure --kernel-dir=%{DIR_APP} \
177 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
180 # Generate configuration files for all kernels we are going to
182 for kernel in %{kernels}; do
183 configure_kernel ${kernel}
191 local localversion="%{localversion}"
192 local fullversion="%{fullver}"
193 if [ "${flavour}" != "default" ]; then
195 localversion="${localversion}.${flavour}"
196 fullversion="${fullversion}.${flavour}"
201 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
203 # Clean up the source tree.
206 # Install configuration file.
207 cp configs/config.${flavour} .config
211 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
212 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
213 %{kernel_build_flags} %{PARALLELISMFLAGS}
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 | \
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 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
304 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
305 pushd tools/power/cpupower/debug/i386
312 # When no kernels are configured, we create a default config
313 # which enables us to install at least the header files.
314 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
316 # Install the header files
317 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
318 mkdir -pv %{BUILDROOT}/usr/include
319 find dest/include \( -name .install -o -name ..install.cmd \) -delete
320 cp -rv dest/include/* %{BUILDROOT}/usr/include
322 # Glibc provides these headers
323 rm -rfv %{BUILDROOT}/usr/include/scsi \
324 %{BUILDROOT}/usr/include/asm*/atomic.h \
325 %{BUILDROOT}/usr/include/asm*/io.h \
326 %{BUILDROOT}/usr/include/asm*/irq.h
328 # Remove all firmware files which are distributed by linux-firmware
329 rm -rfv %{BUILDROOT}/lib/firmware
332 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
333 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
334 install install-man install-python_ext
337 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
338 mandir=%{mandir} CPUFREQ_BENCH=false install
340 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
341 pushd tools/power/cpupower/debug/x86_64
342 install -m 755 centrino-decode \
343 %{BUILDROOT}/usr/bin/centrino-decode
344 install -m 755 powernow-k8-decode \
345 %{BUILDROOT}/usr/bin/powernow-k8-decode
347 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
348 pushd tools/power/cpupower/debug/i386
349 install -m 755 centrino-decode \
350 %{BUILDROOT}/usr/bin/centrino-decode
351 install -m 755 powernow-k8-decode \
352 %{BUILDROOT}/usr/bin/powernow-k8-decode
356 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
363 kernel_release = %{fullver}
365 summary = The Linux kernel %{kernel_release}.
372 kernel=%{kernel_release}
382 /boot/System.map-%{kernel_release}
383 /boot/vmlinuz-%{kernel_release}
384 /boot/initramfs-%{kernel_release}.img
385 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
386 /usr/lib/modules/%{kernel_release}
390 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
391 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
403 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
407 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
411 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
416 kernel_release = %{fullver}
418 summary = Development files of kernel-%{kernel_release}.
422 Install this package in order to compile modules for
423 kernel release %{kernel_release}.
431 /usr/lib/modules/%{kernel_release}/build
432 /usr/lib/modules/%{kernel_release}/source
433 /usr/src/kernels/%{kernel_release}
437 if "%{build_kernel_default}" == "1"
442 kernel_release = %{fullver}
449 kernel_release = %{fullver}
453 if "%{build_kernel_exynos}" == "1"
454 package kernel-exynos
457 kernel_name = kernel-exynos
458 kernel_release = %{fullver}.exynos
461 package kernel-exynos-devel
464 kernel_name = kernel-exynos
465 kernel_release = %{fullver}.exynos
469 if "%{build_kernel_legacy}" == "1"
470 package kernel-legacy
473 kernel_name = kernel-legacy
474 kernel_release = %{fullver}.legacy
477 package kernel-legacy-devel
480 kernel_name = kernel-legacy
481 kernel_release = %{fullver}.legacy
485 if "%{build_kernel_kirkwood}" == "1"
486 package kernel-kirkwood
489 kernel_name = kernel-kirkwood
490 kernel_release = %{fullver}.kirkwood
493 package kernel-kirkwood-devel
496 kernel_name = kernel-kirkwood
497 kernel_release = %{fullver}.kirkwood
501 if "%{build_kernel_omap}" == "1"
505 kernel_name = kernel-omap
506 kernel_release = %{fullver}.omap
509 package kernel-omap-devel
512 kernel_name = kernel-omap
513 kernel_release = %{fullver}.omap
517 package kernel-headers
518 summary = Header files of the kernel release %{fullver}.
519 desciption = %{summary}
527 summary = Assortment of tools for the Linux kernel.
528 description = %{summary}