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.23.51.0.3-3
58 # i686 needs librmi for cpupower.
59 if "%{DISTRO_ARCH}" == "i686"
60 requires += liblrmi-devel
63 # A list of kernels to build.
66 # Arguments that are passed to the kernel build command.
69 kernel_target = bzImage
70 if "%{DISTRO_ARCH}" == "i686"
71 # Build a default and legacy kernel for the
73 build_kernel_default = 1
74 build_kernel_legacy = 1
77 kernel_image = arch/%{kernel_arch}/boot/bzImage
81 if "%{DISTRO_ARCH}" == "x86_64"
82 build_kernel_default = 1
85 kernel_image = arch/%{kernel_arch}/boot/bzImage
88 if "%{DISTRO_ARCH}" == "armv5tel"
89 # ERROR Currently all kernel images are disabled, because they
90 # won't build with the grsecurity patch.
92 # Build a kernel for Marvell Kirkwood-based devices.
93 build_kernel_kirkwood = 1
96 kernel_image = arch/%{kernel_arch}/boot/zImage
98 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
99 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
102 if "%{DISTRO_ARCH}" == "armv7hl"
103 # Build a kernel for TI OMAP SoCs.
104 build_kernel_omap = 1
107 kernel_image = arch/%{kernel_arch}/boot/zImage
110 # Build default kernel.
111 if "%{build_kernel_default}" == "1"
115 # Build legacy kernel.
116 if "%{build_kernel_legacy}" == "1"
120 # Build ARM kirkwood kernel.
121 if "%{build_kernel_kirkwood}" == "1"
125 # Build ARM omap kernel.
126 if "%{build_kernel_omap}" == "1"
131 rm -f %{DIR_APP}/localversion-grsec
133 # Remove -Werror flag to fix ARMv5 build.
134 sed -e "s/-Werror//g" -i grsecurity/Makefile
136 # Disable the colorize plugin.
137 # It's generally very nice but it clutters our
139 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
142 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
144 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
145 drivers/video/logo/logo_linux_clut224.ppm
147 # Get rid of unwanted files resulting from patch fuzz.
148 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
150 # Remove unnecessary SCM files.
151 find . -name .gitignore -exec rm -f {} \; >/dev/null
153 # This prevents scripts/setlocalversion from mucking with our version numbers.
162 if [ "${flavour}" != "default" ]; then
166 scripts/configure --kernel-dir=%{DIR_APP} \
167 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
170 # Generate configuration files for all kernels we are going to
172 for kernel in %{kernels}; do
173 configure_kernel ${kernel}
181 local localversion="%{localversion}"
182 local fullversion="%{fullver}"
183 if [ "${flavour}" != "default" ]; then
185 localversion="${localversion}.${flavour}"
186 fullversion="${fullversion}.${flavour}"
191 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
193 # Clean up the source tree.
196 # Install configuration file.
197 cp configs/config.${flavour} .config
201 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
202 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
203 %{kernel_build_flags} %{PARALLELISMFLAGS}
205 # Install the results.
206 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
207 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
208 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
209 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
211 # Create empty initramfs (20M).
212 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
215 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= \
216 KERNELRELEASE=${fullversion} modules_install
219 case "%{DISTRO_ARCH}" in
221 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
222 KERNELRELEASE=${fullversion} vdso_install
226 # Create an empty settings file for dracut
227 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
228 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
229 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
231 # And now the scary looking part.
233 # Recreate source and build links.
234 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
235 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
236 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
238 # Create dirs for extra modules.
239 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
241 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
242 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
243 cp Module.symvers System.map \
244 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
245 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
247 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
248 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
249 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
252 cp -a --parents arch/%{kernel_arch}/include \
253 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
254 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
256 # Make sure we can build external modules.
257 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
258 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
259 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
260 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
261 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
262 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
264 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
267 # Move all development files to /usr/src.
268 mkdir -p %{BUILDROOT}/usr/src/kernels
269 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
270 %{BUILDROOT}/usr/src/kernels/${fullversion}
271 ln -sf ../../../src/kernels/${fullversion} \
272 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
274 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
277 for kernel in %{kernels}; do
278 build_kernel ${kernel}
283 chmod +x tools/power/cpupower/utils/version-gen.sh
284 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
286 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
287 pushd tools/power/cpupower/debug/x86_64
290 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
291 pushd tools/power/cpupower/debug/i386
298 # When no kernels are configured, we create a default config
299 # which enables us to install at least the header files.
300 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
302 # Install the header files
303 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
304 mkdir -pv %{BUILDROOT}/usr/include
305 find dest/include \( -name .install -o -name ..install.cmd \) -delete
306 cp -rv dest/include/* %{BUILDROOT}/usr/include
308 # Glibc provides these headers
309 rm -rfv %{BUILDROOT}/usr/include/scsi \
310 %{BUILDROOT}/usr/include/asm*/atomic.h \
311 %{BUILDROOT}/usr/include/asm*/io.h \
312 %{BUILDROOT}/usr/include/asm*/irq.h
314 # Remove all firmware files which are distributed by linux-firmware
315 rm -rfv %{BUILDROOT}/lib/firmware
318 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
319 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
320 install install-man install-python_ext
323 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
324 mandir=%{mandir} CPUFREQ_BENCH=false install
326 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
327 pushd tools/power/cpupower/debug/x86_64
328 install -m 755 centrino-decode \
329 %{BUILDROOT}/usr/bin/centrino-decode
330 install -m 755 powernow-k8-decode \
331 %{BUILDROOT}/usr/bin/powernow-k8-decode
333 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
334 pushd tools/power/cpupower/debug/i386
335 install -m 755 centrino-decode \
336 %{BUILDROOT}/usr/bin/centrino-decode
337 install -m 755 powernow-k8-decode \
338 %{BUILDROOT}/usr/bin/powernow-k8-decode
342 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
349 kernel_release = %{fullver}
351 summary = The Linux kernel %{kernel_release}.
358 kernel=%{kernel_release}
368 /boot/System.map-%{kernel_release}
369 /boot/vmlinuz-%{kernel_release}
370 /boot/initramfs-%{kernel_release}.img
371 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
372 /usr/lib/modules/%{kernel_release}
376 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
377 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
389 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
393 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
397 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
402 kernel_release = %{fullver}
404 summary = Development files of kernel-%{kernel_release}.
408 Install this package in order to compile modules for
409 kernel release %{kernel_release}.
417 /usr/lib/modules/%{kernel_release}/build
418 /usr/lib/modules/%{kernel_release}/source
419 /usr/src/kernels/%{kernel_release}
423 if "%{build_kernel_default}" == "1"
428 kernel_release = %{fullver}
435 kernel_release = %{fullver}
439 if "%{build_kernel_legacy}" == "1"
440 package kernel-legacy
443 kernel_name = kernel-legacy
444 kernel_release = %{fullver}.legacy
447 package kernel-legacy-devel
450 kernel_name = kernel-legacy
451 kernel_release = %{fullver}.legacy
455 if "%{build_kernel_kirkwood}" == "1"
456 package kernel-kirkwood
459 kernel_name = kernel-kirkwood
460 kernel_release = %{fullver}.kirkwood
463 package kernel-kirkwood-devel
466 kernel_name = kernel-kirkwood
467 kernel_release = %{fullver}.kirkwood
471 if "%{build_kernel_omap}" == "1"
475 kernel_name = kernel-omap
476 kernel_release = %{fullver}.omap
479 package kernel-omap-devel
482 kernel_name = kernel-omap
483 kernel_release = %{fullver}.omap
487 package kernel-headers
488 summary = Header files of the kernel release %{fullver}.
489 desciption = %{summary}
497 summary = Assortment of tools for the Linux kernel.
498 description = %{summary}