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 # Compile Flattened Device Tree database
223 case "${DISTRO_ARCH}" in
225 make ARCH=%{kernel_arch} dtbs
227 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
228 for file in arch/arm/boot/dts/*.dtb; do
229 [ -e "${file}" ] || continue
231 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
237 # Install the results.
238 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
239 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
240 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
241 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
243 # Create empty initramfs (20M).
244 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
247 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
248 KERNELRELEASE=${fullversion} modules_install
251 case "%{DISTRO_ARCH}" in
253 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
254 KERNELRELEASE=${fullversion} vdso_install
258 # Create an empty settings file for dracut
259 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
260 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
261 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
263 # And now the scary looking part.
265 # Recreate source and build links.
266 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
267 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
268 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
270 # Create dirs for extra modules.
271 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
273 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
274 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
275 cp Module.symvers System.map \
276 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
277 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
279 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
280 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
281 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
284 cp -a --parents arch/%{kernel_arch}/include \
285 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
286 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
288 # Make sure we can build external modules.
289 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
290 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
291 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
292 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
293 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
294 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
296 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
299 # Move all development files to /usr/src.
300 mkdir -p %{BUILDROOT}/usr/src/kernels
301 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
302 %{BUILDROOT}/usr/src/kernels/${fullversion}
303 ln -sf ../../../src/kernels/${fullversion} \
304 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
307 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
308 -exec chmod 644 {} \;
310 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
313 for kernel in %{kernels}; do
314 build_kernel ${kernel}
319 chmod +x tools/power/cpupower/utils/version-gen.sh
320 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
322 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
323 pushd tools/power/cpupower/debug/x86_64
326 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
327 pushd tools/power/cpupower/debug/i386
334 # When no kernels are configured, we create a default config
335 # which enables us to install at least the header files.
336 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
338 # Install the header files
339 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
340 mkdir -pv %{BUILDROOT}/usr/include
341 find dest/include \( -name .install -o -name ..install.cmd \) -delete
342 cp -rv dest/include/* %{BUILDROOT}/usr/include
344 # Glibc provides these headers
345 rm -rfv %{BUILDROOT}/usr/include/scsi \
346 %{BUILDROOT}/usr/include/asm*/atomic.h \
347 %{BUILDROOT}/usr/include/asm*/io.h \
348 %{BUILDROOT}/usr/include/asm*/irq.h
350 # Remove all firmware files which are distributed by linux-firmware
351 rm -rfv %{BUILDROOT}/lib/firmware
354 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
355 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
356 install install-man install-python_ext
359 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
360 mandir=%{mandir} CPUFREQ_BENCH=false install
362 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
363 pushd tools/power/cpupower/debug/x86_64
364 install -m 755 centrino-decode \
365 %{BUILDROOT}/usr/bin/centrino-decode
366 install -m 755 powernow-k8-decode \
367 %{BUILDROOT}/usr/bin/powernow-k8-decode
369 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
370 pushd tools/power/cpupower/debug/i386
371 install -m 755 centrino-decode \
372 %{BUILDROOT}/usr/bin/centrino-decode
373 install -m 755 powernow-k8-decode \
374 %{BUILDROOT}/usr/bin/powernow-k8-decode
378 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
385 kernel_release = %{fullver}
387 summary = The Linux kernel %{kernel_release}.
394 kernel=%{kernel_release}
404 /boot/System.map-%{kernel_release}
405 /boot/dtb-%{kernel_release}
406 /boot/vmlinuz-%{kernel_release}
407 /boot/initramfs-%{kernel_release}.img
408 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
409 /usr/lib/modules/%{kernel_release}
413 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
414 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
426 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
430 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
434 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
439 kernel_release = %{fullver}
441 summary = Development files of kernel-%{kernel_release}.
445 Install this package in order to compile modules for
446 kernel release %{kernel_release}.
454 /usr/lib/modules/%{kernel_release}/build
455 /usr/lib/modules/%{kernel_release}/source
456 /usr/src/kernels/%{kernel_release}
460 if "%{build_kernel_default}" == "1"
465 kernel_release = %{fullver}
472 kernel_release = %{fullver}
476 if "%{build_kernel_exynos}" == "1"
477 package kernel-exynos
480 kernel_name = kernel-exynos
481 kernel_release = %{fullver}.exynos
484 package kernel-exynos-devel
487 kernel_name = kernel-exynos
488 kernel_release = %{fullver}.exynos
492 if "%{build_kernel_legacy}" == "1"
493 package kernel-legacy
496 kernel_name = kernel-legacy
497 kernel_release = %{fullver}.legacy
500 package kernel-legacy-devel
503 kernel_name = kernel-legacy
504 kernel_release = %{fullver}.legacy
508 if "%{build_kernel_kirkwood}" == "1"
509 package kernel-kirkwood
512 kernel_name = kernel-kirkwood
513 kernel_release = %{fullver}.kirkwood
516 package kernel-kirkwood-devel
519 kernel_name = kernel-kirkwood
520 kernel_release = %{fullver}.kirkwood
524 if "%{build_kernel_omap}" == "1"
528 kernel_name = kernel-omap
529 kernel_release = %{fullver}.omap
532 package kernel-omap-devel
535 kernel_name = kernel-omap
536 kernel_release = %{fullver}.omap
540 package kernel-headers
541 summary = Header files of the kernel release %{fullver}.
542 desciption = %{summary}
550 summary = Assortment of tools for the Linux kernel.
551 description = %{summary}