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 = Michael Tremer <michael.tremer@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
41 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_target = bzImage
73 if "%{DISTRO_ARCH}" == "i686"
74 # Build a default and legacy kernel for the
76 build_kernel_default = 1
77 build_kernel_legacy = 1
80 kernel_image = arch/%{kernel_arch}/boot/bzImage
84 if "%{DISTRO_ARCH}" == "x86_64"
85 build_kernel_default = 1
88 kernel_image = arch/%{kernel_arch}/boot/bzImage
91 if "%{DISTRO_ARCH}" == "armv5tel"
92 # ERROR Currently all kernel images are disabled, because they
93 # won't build with the grsecurity patch.
95 # Build a kernel for Marvell Kirkwood-based devices.
96 build_kernel_kirkwood = 1
99 kernel_image = arch/%{kernel_arch}/boot/zImage
101 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
102 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
105 if "%{DISTRO_ARCH}" == "armv7hl"
106 # Build a kernel for TI OMAP SoCs.
107 build_kernel_omap = 1
110 kernel_image = arch/%{kernel_arch}/boot/zImage
113 # Build default kernel.
114 if "%{build_kernel_default}" == "1"
118 # Build legacy kernel.
119 if "%{build_kernel_legacy}" == "1"
123 # Build ARM kirkwood kernel.
124 if "%{build_kernel_kirkwood}" == "1"
128 # Build ARM omap kernel.
129 if "%{build_kernel_omap}" == "1"
134 rm -f %{DIR_APP}/localversion-grsec
136 # Remove -Werror flag to fix ARMv5 build.
137 sed -e "s/-Werror//g" -i grsecurity/Makefile
139 # Disable the colorize plugin.
140 # It's generally very nice but it clutters our
142 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
145 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
147 cp -vf %{kernel_logo} \
148 drivers/video/logo/logo_linux_clut224.ppm
150 # Get rid of unwanted files resulting from patch fuzz.
151 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
153 # Remove unnecessary SCM files.
154 find . -name .gitignore -exec rm -f {} \; >/dev/null
156 # This prevents scripts/setlocalversion from mucking with our version numbers.
165 if [ "${flavour}" != "default" ]; then
169 scripts/configure --kernel-dir=%{DIR_APP} \
170 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
173 # Generate configuration files for all kernels we are going to
175 for kernel in %{kernels}; do
176 configure_kernel ${kernel}
184 local localversion="%{localversion}"
185 local fullversion="%{fullver}"
186 if [ "${flavour}" != "default" ]; then
188 localversion="${localversion}.${flavour}"
189 fullversion="${fullversion}.${flavour}"
194 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
196 # Clean up the source tree.
199 # Install configuration file.
200 cp configs/config.${flavour} .config
204 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
205 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
206 %{kernel_build_flags} %{PARALLELISMFLAGS}
208 # Install the results.
209 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
210 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
211 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
212 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
214 # Create empty initramfs (20M).
215 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
218 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= \
219 KERNELRELEASE=${fullversion} modules_install
222 case "%{DISTRO_ARCH}" in
224 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
225 KERNELRELEASE=${fullversion} vdso_install
229 # Create an empty settings file for dracut
230 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
231 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
232 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
234 # And now the scary looking part.
236 # Recreate source and build links.
237 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
238 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
239 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
241 # Create dirs for extra modules.
242 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
244 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
245 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
246 cp Module.symvers System.map \
247 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
248 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
250 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
251 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
252 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
255 cp -a --parents arch/%{kernel_arch}/include \
256 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
257 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
259 # Make sure we can build external modules.
260 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
261 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
262 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
263 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
264 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
265 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
267 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
270 # Move all development files to /usr/src.
271 mkdir -p %{BUILDROOT}/usr/src/kernels
272 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
273 %{BUILDROOT}/usr/src/kernels/${fullversion}
274 ln -sf ../../../src/kernels/${fullversion} \
275 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
277 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
280 for kernel in %{kernels}; do
281 build_kernel ${kernel}
286 chmod +x tools/power/cpupower/utils/version-gen.sh
287 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
289 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
290 pushd tools/power/cpupower/debug/x86_64
293 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
294 pushd tools/power/cpupower/debug/i386
301 # When no kernels are configured, we create a default config
302 # which enables us to install at least the header files.
303 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
305 # Install the header files
306 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
307 mkdir -pv %{BUILDROOT}/usr/include
308 find dest/include \( -name .install -o -name ..install.cmd \) -delete
309 cp -rv dest/include/* %{BUILDROOT}/usr/include
311 # Glibc provides these headers
312 rm -rfv %{BUILDROOT}/usr/include/scsi \
313 %{BUILDROOT}/usr/include/asm*/atomic.h \
314 %{BUILDROOT}/usr/include/asm*/io.h \
315 %{BUILDROOT}/usr/include/asm*/irq.h
317 # Remove all firmware files which are distributed by linux-firmware
318 rm -rfv %{BUILDROOT}/lib/firmware
321 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
322 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
323 install install-man install-python_ext
326 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
327 mandir=%{mandir} CPUFREQ_BENCH=false install
329 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
330 pushd tools/power/cpupower/debug/x86_64
331 install -m 755 centrino-decode \
332 %{BUILDROOT}/usr/bin/centrino-decode
333 install -m 755 powernow-k8-decode \
334 %{BUILDROOT}/usr/bin/powernow-k8-decode
336 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
337 pushd tools/power/cpupower/debug/i386
338 install -m 755 centrino-decode \
339 %{BUILDROOT}/usr/bin/centrino-decode
340 install -m 755 powernow-k8-decode \
341 %{BUILDROOT}/usr/bin/powernow-k8-decode
345 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
352 kernel_release = %{fullver}
354 summary = The Linux kernel %{kernel_release}.
361 kernel=%{kernel_release}
371 /boot/System.map-%{kernel_release}
372 /boot/vmlinuz-%{kernel_release}
373 /boot/initramfs-%{kernel_release}.img
374 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
375 /usr/lib/modules/%{kernel_release}
379 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
380 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
392 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
396 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
400 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
405 kernel_release = %{fullver}
407 summary = Development files of kernel-%{kernel_release}.
411 Install this package in order to compile modules for
412 kernel release %{kernel_release}.
420 /usr/lib/modules/%{kernel_release}/build
421 /usr/lib/modules/%{kernel_release}/source
422 /usr/src/kernels/%{kernel_release}
426 if "%{build_kernel_default}" == "1"
431 kernel_release = %{fullver}
438 kernel_release = %{fullver}
442 if "%{build_kernel_legacy}" == "1"
443 package kernel-legacy
446 kernel_name = kernel-legacy
447 kernel_release = %{fullver}.legacy
450 package kernel-legacy-devel
453 kernel_name = kernel-legacy
454 kernel_release = %{fullver}.legacy
458 if "%{build_kernel_kirkwood}" == "1"
459 package kernel-kirkwood
462 kernel_name = kernel-kirkwood
463 kernel_release = %{fullver}.kirkwood
466 package kernel-kirkwood-devel
469 kernel_name = kernel-kirkwood
470 kernel_release = %{fullver}.kirkwood
474 if "%{build_kernel_omap}" == "1"
478 kernel_name = kernel-omap
479 kernel_release = %{fullver}.omap
482 package kernel-omap-devel
485 kernel_name = kernel-omap
486 kernel_release = %{fullver}.omap
490 package kernel-headers
491 summary = Header files of the kernel release %{fullver}.
492 desciption = %{summary}
500 summary = Assortment of tools for the Linux kernel.
501 description = %{summary}