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 = Arne Fitzenreiter <arne.fitzenreiter@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
42 binutils >= 2.23.51.0.3-3
63 # i686 needs librmi for cpupower.
64 if "%{DISTRO_ARCH}" == "i686"
65 requires += liblrmi-devel
68 # A list of kernels to build.
71 # Arguments that are passed to the kernel build command.
74 kernel_target = bzImage
75 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
77 if "%{DISTRO_ARCH}" == "i686"
78 # Build a default and legacy kernel for the
80 build_kernel_default = 1
81 build_kernel_legacy = 1
86 if "%{DISTRO_ARCH}" == "x86_64"
87 build_kernel_default = 1
92 if "%{DISTRO_ARCH}" == "armv5tel"
93 # ERROR Currently all kernel images are disabled, because they
94 # won't build with the grsecurity patch.
96 # Build a kernel for Marvell Kirkwood-based devices.
97 build_kernel_kirkwood = 1
100 kernel_target = zImage
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 Samsung's Exynos SoCs.
108 build_kernel_exynos = 1
110 # Build a kernel for TI OMAP SoCs.
111 build_kernel_omap = 1
114 kernel_target = uImage
117 # mkimage is a requirement to build uImage images.
118 if "%{kernel_target}" == "uImage"
119 requires += u-boot-tools
122 # Build default kernel.
123 if "%{build_kernel_default}" == "1"
127 # Build exynos kernel.
128 if "%{build_kernel_exynos}" == "1"
132 # Build legacy kernel.
133 if "%{build_kernel_legacy}" == "1"
137 # Build ARM kirkwood kernel.
138 if "%{build_kernel_kirkwood}" == "1"
142 # Build ARM omap kernel.
143 if "%{build_kernel_omap}" == "1"
148 rm -f %{DIR_APP}/localversion-grsec
150 # Remove -Werror flag to fix ARMv5 build.
151 sed -e "s/-Werror//g" -i grsecurity/Makefile
153 # Disable the colorize plugin.
154 # It's generally very nice but it clutters our
156 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
159 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
161 cp -vf %{kernel_logo} \
162 drivers/video/logo/logo_linux_clut224.ppm
164 # Get rid of unwanted files resulting from patch fuzz.
165 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
167 # Remove unnecessary SCM files.
168 find . -name .gitignore -exec rm -f {} \; >/dev/null
170 # This prevents scripts/setlocalversion from mucking with our version numbers.
179 if [ "${flavour}" != "default" ]; then
183 scripts/configure --kernel-dir=%{DIR_APP} \
184 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
187 # Generate configuration files for all kernels we are going to
189 for kernel in %{kernels}; do
190 configure_kernel ${kernel}
198 local localversion="%{localversion}"
199 local fullversion="%{fullver}"
200 if [ "${flavour}" != "default" ]; then
202 localversion="${localversion}.${flavour}"
203 fullversion="${fullversion}.${flavour}"
208 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
210 # Clean up the source tree.
213 # Install configuration file.
214 cp configs/config.${flavour} .config
218 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
219 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
220 %{kernel_build_flags} %{PARALLELISMFLAGS}
222 # Install the results.
223 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
224 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
225 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
226 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
228 # Create empty initramfs (20M).
229 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
232 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
233 KERNELRELEASE=${fullversion} modules_install
236 case "%{DISTRO_ARCH}" in
238 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
239 KERNELRELEASE=${fullversion} vdso_install
243 # Create an empty settings file for dracut
244 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
245 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
246 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
248 # And now the scary looking part.
250 # Recreate source and build links.
251 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
252 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
253 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
255 # Create dirs for extra modules.
256 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
258 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
259 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
260 cp Module.symvers System.map \
261 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
262 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
264 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
265 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
266 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
269 cp -a --parents arch/%{kernel_arch}/include \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
271 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
273 # Make sure we can build external modules.
274 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
275 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
276 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
277 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
278 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
279 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
281 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
284 # Move all development files to /usr/src.
285 mkdir -p %{BUILDROOT}/usr/src/kernels
286 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
287 %{BUILDROOT}/usr/src/kernels/${fullversion}
288 ln -sf ../../../src/kernels/${fullversion} \
289 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
292 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
293 -exec chmod 644 {} \;
295 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
298 for kernel in %{kernels}; do
299 build_kernel ${kernel}
304 chmod +x tools/power/cpupower/utils/version-gen.sh
305 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
307 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
308 pushd tools/power/cpupower/debug/x86_64
311 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
312 pushd tools/power/cpupower/debug/i386
319 # When no kernels are configured, we create a default config
320 # which enables us to install at least the header files.
321 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
323 # Install the header files
324 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
325 mkdir -pv %{BUILDROOT}/usr/include
326 find dest/include \( -name .install -o -name ..install.cmd \) -delete
327 cp -rv dest/include/* %{BUILDROOT}/usr/include
329 # Glibc provides these headers
330 rm -rfv %{BUILDROOT}/usr/include/scsi \
331 %{BUILDROOT}/usr/include/asm*/atomic.h \
332 %{BUILDROOT}/usr/include/asm*/io.h \
333 %{BUILDROOT}/usr/include/asm*/irq.h
335 # Remove all firmware files which are distributed by linux-firmware
336 rm -rfv %{BUILDROOT}/lib/firmware
339 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
340 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
341 install install-man install-python_ext
344 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
345 mandir=%{mandir} CPUFREQ_BENCH=false install
347 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
348 pushd tools/power/cpupower/debug/x86_64
349 install -m 755 centrino-decode \
350 %{BUILDROOT}/usr/bin/centrino-decode
351 install -m 755 powernow-k8-decode \
352 %{BUILDROOT}/usr/bin/powernow-k8-decode
354 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
355 pushd tools/power/cpupower/debug/i386
356 install -m 755 centrino-decode \
357 %{BUILDROOT}/usr/bin/centrino-decode
358 install -m 755 powernow-k8-decode \
359 %{BUILDROOT}/usr/bin/powernow-k8-decode
363 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
370 kernel_release = %{fullver}
372 summary = The Linux kernel %{kernel_release}.
379 kernel=%{kernel_release}
389 /boot/System.map-%{kernel_release}
390 /boot/vmlinuz-%{kernel_release}
391 /boot/initramfs-%{kernel_release}.img
392 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
393 /usr/lib/modules/%{kernel_release}
397 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
398 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
410 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
414 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
418 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
423 kernel_release = %{fullver}
425 summary = Development files of kernel-%{kernel_release}.
429 Install this package in order to compile modules for
430 kernel release %{kernel_release}.
438 /usr/lib/modules/%{kernel_release}/build
439 /usr/lib/modules/%{kernel_release}/source
440 /usr/src/kernels/%{kernel_release}
444 if "%{build_kernel_default}" == "1"
449 kernel_release = %{fullver}
456 kernel_release = %{fullver}
460 if "%{build_kernel_exynos}" == "1"
461 package kernel-exynos
464 kernel_name = kernel-exynos
465 kernel_release = %{fullver}.exynos
468 package kernel-exynos-devel
471 kernel_name = kernel-exynos
472 kernel_release = %{fullver}.exynos
476 if "%{build_kernel_legacy}" == "1"
477 package kernel-legacy
480 kernel_name = kernel-legacy
481 kernel_release = %{fullver}.legacy
484 package kernel-legacy-devel
487 kernel_name = kernel-legacy
488 kernel_release = %{fullver}.legacy
492 if "%{build_kernel_kirkwood}" == "1"
493 package kernel-kirkwood
496 kernel_name = kernel-kirkwood
497 kernel_release = %{fullver}.kirkwood
500 package kernel-kirkwood-devel
503 kernel_name = kernel-kirkwood
504 kernel_release = %{fullver}.kirkwood
508 if "%{build_kernel_omap}" == "1"
512 kernel_name = kernel-omap
513 kernel_release = %{fullver}.omap
516 package kernel-omap-devel
519 kernel_name = kernel-omap
520 kernel_release = %{fullver}.omap
524 package kernel-headers
525 summary = Header files of the kernel release %{fullver}.
526 desciption = %{summary}
534 summary = Assortment of tools for the Linux kernel.
535 description = %{summary}