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 kernel_target = bzImage
68 if "%{DISTRO_ARCH}" == "i686"
69 # Build a default and legacy kernel for the
71 build_kernel_default = 1
72 build_kernel_legacy = 1
75 kernel_image = arch/%{kernel_arch}/boot/bzImage
79 if "%{DISTRO_ARCH}" == "x86_64"
80 build_kernel_default = 1
83 kernel_image = arch/%{kernel_arch}/boot/bzImage
86 if "%{DISTRO_ARCH}" == "armv5tel"
87 # ERROR Currently all kernel images are disabled, because they
88 # won't build with the grsecurity patch.
90 # Build versatile kernel.
91 build_kernel_versatile = 1
93 # Build a kernel for Marvell Kirkwood-based devices.
94 build_kernel_kirkwood = 1
97 kernel_image = arch/%{kernel_arch}/boot/zImage
99 # ARM does not support cpupower.
103 if "%{DISTRO_ARCH}" == "armv7hl"
104 # Build a kernel for TI OMAP SoCs.
105 build_kernel_omap = 1
108 kernel_image = arch/%{kernel_arch}/boot/zImage
110 # ARM does not support cpupower.
114 # Build default kernel.
115 if "%{build_kernel_default}" == "1"
119 # Build legacy kernel.
120 if "%{build_kernel_legacy}" == "1"
124 # Build ARM versatile kernel.
125 if "%{build_kernel_versatile}" == "1"
129 # Build ARM kirkwood kernel.
130 if "%{build_kernel_kirkwood}" == "1"
134 # Build ARM omap kernel.
135 if "%{build_kernel_omap}" == "1"
139 # Add tools' build requirements if build is requested.
140 if "%{build_cpupower}" == "1"
141 requires += %{tools_cpupower_requires}
145 rm -f %{DIR_APP}/localversion-grsec
147 # Remove -Werror flag to fix ARMv5 build.
148 sed -e "s/-Werror//g" -i grsecurity/Makefile
150 # Disable the colorize plugin.
151 # It's generally very nice but it clutters our
153 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
156 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
158 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
159 drivers/video/logo/logo_linux_clut224.ppm
161 # Get rid of unwanted files resulting from patch fuzz.
162 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
164 # Remove unnecessary SCM files.
165 find . -name .gitignore -exec rm -f {} \; >/dev/null
167 # This prevents scripts/setlocalversion from mucking with our version numbers.
176 if [ "${flavour}" != "default" ]; then
180 scripts/configure --kernel-dir=%{DIR_APP} \
181 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
184 # Generate configuration files for all kernels we are going to
186 for kernel in %{kernels}; do
187 configure_kernel ${kernel}
195 local localversion="%{localversion}"
196 local fullversion="%{fullver}"
197 if [ "${flavour}" != "default" ]; then
199 localversion="${localversion}.${flavour}"
200 fullversion="${fullversion}.${flavour}"
205 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
207 # Clean up the source tree.
210 # Install configuration file.
211 cp configs/config.${flavour} .config
215 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
216 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules %{PARALLELISMFLAGS}
218 # Install the results.
219 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
220 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
221 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
222 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
224 # Create empty initramfs (20M).
225 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
228 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
229 KERNELRELEASE=${fullversion} modules_install
232 case "%{DISTRO_ARCH}" in
234 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
235 KERNELRELEASE=${fullversion} vdso_install
239 # Create an empty settings file for dracut
240 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
241 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
242 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
244 # And now the scary looking part.
246 # Recreate source and build links.
247 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
248 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
249 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
251 # Create dirs for extra modules.
252 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
254 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
255 %{BUILDROOT}/lib/modules/${fullversion}/build
256 cp -v Module.symvers System.map \
257 %{BUILDROOT}/lib/modules/${fullversion}/build
258 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
260 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
261 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
262 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
265 cp -va --parents arch/%{kernel_arch}/include \
266 %{BUILDROOT}/lib/modules/${fullversion}/build
267 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
269 # Make sure we can build external modules.
270 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
271 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
272 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
273 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
274 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
275 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
277 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
280 # Move all development files to /usr/src.
281 mkdir -pv %{BUILDROOT}/usr/src/kernels
282 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
283 %{BUILDROOT}/usr/src/kernels/${fullversion}
284 ln -svf ../../../usr/src/kernels/${fullversion} \
285 %{BUILDROOT}/lib/modules/${fullversion}/build
287 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
290 for kernel in %{kernels}; do
291 build_kernel ${kernel}
296 if [ "%{build_cpupower}" = "1" ]; then
297 chmod +x tools/power/cpupower/utils/version-gen.sh
298 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
300 cd tools/power/cpupower/debug/i386
301 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
307 # When no kernels are configured, we create a default config
308 # which enables us to install at least the header files.
309 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
311 # Install the header files
312 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
313 mkdir -pv %{BUILDROOT}/usr/include
314 find dest/include \( -name .install -o -name ..install.cmd \) -delete
315 cp -rv dest/include/* %{BUILDROOT}/usr/include
317 # Glibc provides these headers
318 rm -rfv %{BUILDROOT}/usr/include/scsi \
319 %{BUILDROOT}/usr/include/asm*/atomic.h \
320 %{BUILDROOT}/usr/include/asm*/io.h \
321 %{BUILDROOT}/usr/include/asm*/irq.h
323 # Remove all firmware files which are distributed by linux-firmware
324 rm -rfv %{BUILDROOT}/lib/firmware
327 make -C tools/perf DESTDIR=%{BUILDROOT} \
328 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
332 if [ "%{build_cpupower}" = "1" ]; then
333 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
334 mandir=%{mandir} CPUFREQ_BENCH=false install
335 cd tools/power/cpupower/debug/i386
336 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
337 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
339 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
347 kernel_release = %{fullver}
349 summary = The Linux kernel %{kernel_release}.
356 kernel=%{kernel_release}
366 /boot/System.map-%{kernel_release}
367 /boot/vmlinuz-%{kernel_release}
368 /boot/initramfs-%{kernel_release}.img
369 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
370 /lib/modules/%{kernel_release}
374 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
375 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
387 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
391 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
395 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
400 kernel_release = %{fullver}
402 summary = Development files of kernel-%{kernel_release}.
406 Install this package in order to compile modules for
407 kernel release %{kernel_release}.
415 /lib/modules/%{kernel_release}/build
416 /lib/modules/%{kernel_release}/source
417 /usr/src/kernels/%{kernel_release}
421 if "%{build_kernel_default}" == "1"
426 kernel_release = %{fullver}
433 kernel_release = %{fullver}
437 if "%{build_kernel_legacy}" == "1"
438 package kernel-legacy
441 kernel_name = kernel-legacy
442 kernel_release = %{fullver}.legacy
445 package kernel-legacy-devel
448 kernel_name = kernel-legacy
449 kernel_release = %{fullver}.legacy
453 if "%{build_kernel_versatile}" == "1"
454 package kernel-versatile
457 kernel_name = kernel-versatile
458 kernel_release = %{fullver}.versatile
461 package kernel-versatile-devel
464 kernel_name = kernel-versatile
465 kernel_release = %{fullver}.versatile
469 if "%{build_kernel_kirkwood}" == "1"
470 package kernel-kirkwood
473 kernel_name = kernel-kirkwood
474 kernel_release = %{fullver}.kirkwood
477 package kernel-kirkwood-devel
480 kernel_name = kernel-kirkwood
481 kernel_release = %{fullver}.kirkwood
485 if "%{build_kernel_omap}" == "1"
489 kernel_name = kernel-omap
490 kernel_release = %{fullver}.omap
493 package kernel-omap-devel
496 kernel_name = kernel-omap
497 kernel_release = %{fullver}.omap
501 package kernel-headers
502 summary = Header files of the kernel release %{fullver}.
503 desciption = %{summary}
511 summary = Assortment of tools for the Linux kernel.
512 description = %{summary}