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.
39 binutils >= 2.22.52.0.3-2
55 tools_cpupower_requires
61 # A list of kernels to build.
64 # Should we build cpupower?
67 # Arguments that are passed to the kernel build command.
70 kernel_target = bzImage
71 if "%{DISTRO_ARCH}" == "i686"
72 # Build a default and legacy kernel for the
74 build_kernel_default = 1
75 build_kernel_legacy = 1
78 kernel_image = arch/%{kernel_arch}/boot/bzImage
82 if "%{DISTRO_ARCH}" == "x86_64"
83 build_kernel_default = 1
86 kernel_image = arch/%{kernel_arch}/boot/bzImage
89 if "%{DISTRO_ARCH}" == "armv5tel"
90 # ERROR Currently all kernel images are disabled, because they
91 # won't build with the grsecurity patch.
93 # Build versatile kernel.
94 build_kernel_versatile = 1
96 # Build a kernel for Marvell Kirkwood-based devices.
97 build_kernel_kirkwood = 1
100 kernel_image = arch/%{kernel_arch}/boot/zImage
102 # ARM does not support cpupower.
105 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
106 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
109 if "%{DISTRO_ARCH}" == "armv7hl"
110 # Build a kernel for TI OMAP SoCs.
111 build_kernel_omap = 1
114 kernel_image = arch/%{kernel_arch}/boot/zImage
116 # ARM does not support cpupower.
120 # Build default kernel.
121 if "%{build_kernel_default}" == "1"
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
130 # Build ARM versatile kernel.
131 if "%{build_kernel_versatile}" == "1"
135 # Build ARM kirkwood kernel.
136 if "%{build_kernel_kirkwood}" == "1"
140 # Build ARM omap kernel.
141 if "%{build_kernel_omap}" == "1"
145 # Add tools' build requirements if build is requested.
146 if "%{build_cpupower}" == "1"
147 requires += %{tools_cpupower_requires}
151 rm -f %{DIR_APP}/localversion-grsec
153 # Remove -Werror flag to fix ARMv5 build.
154 sed -e "s/-Werror//g" -i grsecurity/Makefile
156 # Disable the colorize plugin.
157 # It's generally very nice but it clutters our
159 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
162 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
164 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
165 drivers/video/logo/logo_linux_clut224.ppm
167 # Get rid of unwanted files resulting from patch fuzz.
168 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
170 # Remove unnecessary SCM files.
171 find . -name .gitignore -exec rm -f {} \; >/dev/null
173 # This prevents scripts/setlocalversion from mucking with our version numbers.
182 if [ "${flavour}" != "default" ]; then
186 scripts/configure --kernel-dir=%{DIR_APP} \
187 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
190 # Generate configuration files for all kernels we are going to
192 for kernel in %{kernels}; do
193 configure_kernel ${kernel}
201 local localversion="%{localversion}"
202 local fullversion="%{fullver}"
203 if [ "${flavour}" != "default" ]; then
205 localversion="${localversion}.${flavour}"
206 fullversion="${fullversion}.${flavour}"
211 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
213 # Clean up the source tree.
216 # Install configuration file.
217 cp configs/config.${flavour} .config
221 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
222 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
223 %{kernel_build_flags} %{PARALLELISMFLAGS}
225 # Install the results.
226 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
227 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
228 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
229 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
231 # Create empty initramfs (20M).
232 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
235 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
236 KERNELRELEASE=${fullversion} modules_install
239 case "%{DISTRO_ARCH}" in
241 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
242 KERNELRELEASE=${fullversion} vdso_install
246 # Create an empty settings file for dracut
247 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
248 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
249 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
251 # And now the scary looking part.
253 # Recreate source and build links.
254 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
255 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
256 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
258 # Create dirs for extra modules.
259 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
261 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
262 %{BUILDROOT}/lib/modules/${fullversion}/build
263 cp -v Module.symvers System.map \
264 %{BUILDROOT}/lib/modules/${fullversion}/build
265 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
267 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
268 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
269 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
272 cp -va --parents arch/%{kernel_arch}/include \
273 %{BUILDROOT}/lib/modules/${fullversion}/build
274 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
276 # Make sure we can build external modules.
277 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
278 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
279 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
280 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
281 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
282 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
284 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
287 # Move all development files to /usr/src.
288 mkdir -pv %{BUILDROOT}/usr/src/kernels
289 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
290 %{BUILDROOT}/usr/src/kernels/${fullversion}
291 ln -svf ../../../usr/src/kernels/${fullversion} \
292 %{BUILDROOT}/lib/modules/${fullversion}/build
294 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
297 for kernel in %{kernels}; do
298 build_kernel ${kernel}
303 if [ "%{build_cpupower}" = "1" ]; then
304 chmod +x tools/power/cpupower/utils/version-gen.sh
305 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
307 cd tools/power/cpupower/debug/i386
308 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
314 # When no kernels are configured, we create a default config
315 # which enables us to install at least the header files.
316 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
318 # Install the header files
319 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
320 mkdir -pv %{BUILDROOT}/usr/include
321 find dest/include \( -name .install -o -name ..install.cmd \) -delete
322 cp -rv dest/include/* %{BUILDROOT}/usr/include
324 # Glibc provides these headers
325 rm -rfv %{BUILDROOT}/usr/include/scsi \
326 %{BUILDROOT}/usr/include/asm*/atomic.h \
327 %{BUILDROOT}/usr/include/asm*/io.h \
328 %{BUILDROOT}/usr/include/asm*/irq.h
330 # Remove all firmware files which are distributed by linux-firmware
331 rm -rfv %{BUILDROOT}/lib/firmware
334 make -C tools/perf DESTDIR=%{BUILDROOT} \
335 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
339 if [ "%{build_cpupower}" = "1" ]; then
340 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
341 mandir=%{mandir} CPUFREQ_BENCH=false install
342 cd tools/power/cpupower/debug/i386
343 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
344 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
346 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
354 kernel_release = %{fullver}
356 summary = The Linux kernel %{kernel_release}.
363 kernel=%{kernel_release}
373 /boot/System.map-%{kernel_release}
374 /boot/vmlinuz-%{kernel_release}
375 /boot/initramfs-%{kernel_release}.img
376 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
377 /lib/modules/%{kernel_release}
381 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
382 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
394 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
398 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
402 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
407 kernel_release = %{fullver}
409 summary = Development files of kernel-%{kernel_release}.
413 Install this package in order to compile modules for
414 kernel release %{kernel_release}.
422 /lib/modules/%{kernel_release}/build
423 /lib/modules/%{kernel_release}/source
424 /usr/src/kernels/%{kernel_release}
428 if "%{build_kernel_default}" == "1"
433 kernel_release = %{fullver}
440 kernel_release = %{fullver}
444 if "%{build_kernel_legacy}" == "1"
445 package kernel-legacy
448 kernel_name = kernel-legacy
449 kernel_release = %{fullver}.legacy
452 package kernel-legacy-devel
455 kernel_name = kernel-legacy
456 kernel_release = %{fullver}.legacy
460 if "%{build_kernel_versatile}" == "1"
461 package kernel-versatile
464 kernel_name = kernel-versatile
465 kernel_release = %{fullver}.versatile
468 package kernel-versatile-devel
471 kernel_name = kernel-versatile
472 kernel_release = %{fullver}.versatile
476 if "%{build_kernel_kirkwood}" == "1"
477 package kernel-kirkwood
480 kernel_name = kernel-kirkwood
481 kernel_release = %{fullver}.kirkwood
484 package kernel-kirkwood-devel
487 kernel_name = kernel-kirkwood
488 kernel_release = %{fullver}.kirkwood
492 if "%{build_kernel_omap}" == "1"
496 kernel_name = kernel-omap
497 kernel_release = %{fullver}.omap
500 package kernel-omap-devel
503 kernel_name = kernel-omap
504 kernel_release = %{fullver}.omap
508 package kernel-headers
509 summary = Header files of the kernel release %{fullver}.
510 desciption = %{summary}
518 summary = Assortment of tools for the Linux kernel.
519 description = %{summary}