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 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.
102 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
103 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
106 if "%{DISTRO_ARCH}" == "armv7hl"
107 # Build a kernel for TI OMAP SoCs.
108 build_kernel_omap = 1
111 kernel_image = arch/%{kernel_arch}/boot/zImage
113 # ARM does not support cpupower.
117 # Build default kernel.
118 if "%{build_kernel_default}" == "1"
122 # Build legacy kernel.
123 if "%{build_kernel_legacy}" == "1"
127 # Build ARM kirkwood kernel.
128 if "%{build_kernel_kirkwood}" == "1"
132 # Build ARM omap kernel.
133 if "%{build_kernel_omap}" == "1"
137 # Add tools' build requirements if build is requested.
138 if "%{build_cpupower}" == "1"
139 requires += %{tools_cpupower_requires}
143 rm -f %{DIR_APP}/localversion-grsec
145 # Remove -Werror flag to fix ARMv5 build.
146 sed -e "s/-Werror//g" -i grsecurity/Makefile
148 # Disable the colorize plugin.
149 # It's generally very nice but it clutters our
151 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
154 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
156 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
157 drivers/video/logo/logo_linux_clut224.ppm
159 # Get rid of unwanted files resulting from patch fuzz.
160 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
162 # Remove unnecessary SCM files.
163 find . -name .gitignore -exec rm -f {} \; >/dev/null
165 # This prevents scripts/setlocalversion from mucking with our version numbers.
174 if [ "${flavour}" != "default" ]; then
178 scripts/configure --kernel-dir=%{DIR_APP} \
179 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
182 # Generate configuration files for all kernels we are going to
184 for kernel in %{kernels}; do
185 configure_kernel ${kernel}
193 local localversion="%{localversion}"
194 local fullversion="%{fullver}"
195 if [ "${flavour}" != "default" ]; then
197 localversion="${localversion}.${flavour}"
198 fullversion="${fullversion}.${flavour}"
203 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
205 # Clean up the source tree.
208 # Install configuration file.
209 cp configs/config.${flavour} .config
213 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
214 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
215 %{kernel_build_flags} %{PARALLELISMFLAGS}
217 # Install the results.
218 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
219 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
220 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
221 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
223 # Create empty initramfs (20M).
224 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
227 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
228 KERNELRELEASE=${fullversion} modules_install
231 case "%{DISTRO_ARCH}" in
233 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
234 KERNELRELEASE=${fullversion} vdso_install
238 # Create an empty settings file for dracut
239 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
240 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
241 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
243 # And now the scary looking part.
245 # Recreate source and build links.
246 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
247 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
248 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
250 # Create dirs for extra modules.
251 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
253 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
254 %{BUILDROOT}/lib/modules/${fullversion}/build
255 cp -v Module.symvers System.map \
256 %{BUILDROOT}/lib/modules/${fullversion}/build
257 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
259 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
260 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
261 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
264 cp -va --parents arch/%{kernel_arch}/include \
265 %{BUILDROOT}/lib/modules/${fullversion}/build
266 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
268 # Make sure we can build external modules.
269 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
270 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
271 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
272 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
273 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
274 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
276 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
279 # Move all development files to /usr/src.
280 mkdir -pv %{BUILDROOT}/usr/src/kernels
281 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
282 %{BUILDROOT}/usr/src/kernels/${fullversion}
283 ln -svf ../../../usr/src/kernels/${fullversion} \
284 %{BUILDROOT}/lib/modules/${fullversion}/build
286 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
289 for kernel in %{kernels}; do
290 build_kernel ${kernel}
295 if [ "%{build_cpupower}" = "1" ]; then
296 chmod +x tools/power/cpupower/utils/version-gen.sh
297 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
299 cd tools/power/cpupower/debug/i386
300 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
306 # When no kernels are configured, we create a default config
307 # which enables us to install at least the header files.
308 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
310 # Install the header files
311 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
312 mkdir -pv %{BUILDROOT}/usr/include
313 find dest/include \( -name .install -o -name ..install.cmd \) -delete
314 cp -rv dest/include/* %{BUILDROOT}/usr/include
316 # Glibc provides these headers
317 rm -rfv %{BUILDROOT}/usr/include/scsi \
318 %{BUILDROOT}/usr/include/asm*/atomic.h \
319 %{BUILDROOT}/usr/include/asm*/io.h \
320 %{BUILDROOT}/usr/include/asm*/irq.h
322 # Remove all firmware files which are distributed by linux-firmware
323 rm -rfv %{BUILDROOT}/lib/firmware
326 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
327 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
331 if [ "%{build_cpupower}" = "1" ]; then
332 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
333 mandir=%{mandir} CPUFREQ_BENCH=false install
334 cd tools/power/cpupower/debug/i386
335 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
336 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
338 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
346 kernel_release = %{fullver}
348 summary = The Linux kernel %{kernel_release}.
355 kernel=%{kernel_release}
365 /boot/System.map-%{kernel_release}
366 /boot/vmlinuz-%{kernel_release}
367 /boot/initramfs-%{kernel_release}.img
368 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
369 /lib/modules/%{kernel_release}
373 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
374 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
386 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
390 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
394 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
399 kernel_release = %{fullver}
401 summary = Development files of kernel-%{kernel_release}.
405 Install this package in order to compile modules for
406 kernel release %{kernel_release}.
414 /lib/modules/%{kernel_release}/build
415 /lib/modules/%{kernel_release}/source
416 /usr/src/kernels/%{kernel_release}
420 if "%{build_kernel_default}" == "1"
425 kernel_release = %{fullver}
432 kernel_release = %{fullver}
436 if "%{build_kernel_legacy}" == "1"
437 package kernel-legacy
440 kernel_name = kernel-legacy
441 kernel_release = %{fullver}.legacy
444 package kernel-legacy-devel
447 kernel_name = kernel-legacy
448 kernel_release = %{fullver}.legacy
452 if "%{build_kernel_kirkwood}" == "1"
453 package kernel-kirkwood
456 kernel_name = kernel-kirkwood
457 kernel_release = %{fullver}.kirkwood
460 package kernel-kirkwood-devel
463 kernel_name = kernel-kirkwood
464 kernel_release = %{fullver}.kirkwood
468 if "%{build_kernel_omap}" == "1"
472 kernel_name = kernel-omap
473 kernel_release = %{fullver}.omap
476 package kernel-omap-devel
479 kernel_name = kernel-omap
480 kernel_release = %{fullver}.omap
484 package kernel-headers
485 summary = Header files of the kernel release %{fullver}.
486 desciption = %{summary}
494 summary = Assortment of tools for the Linux kernel.
495 description = %{summary}