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
43 binutils >= 2.23.51.0.3-3
64 # i686 needs librmi for cpupower.
65 if "%{DISTRO_ARCH}" == "i686"
66 requires += liblrmi-devel
69 # A list of kernels to build.
72 # Arguments that are passed to the kernel build command.
75 kernel_target = bzImage
76 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
78 if "%{DISTRO_ARCH}" == "i686"
79 # Build a default and legacy kernel for the
81 build_kernel_default = 1
82 build_kernel_legacy = 1
87 if "%{DISTRO_ARCH}" == "x86_64"
88 build_kernel_default = 1
93 if "%{DISTRO_ARCH}" == "armv5tel"
94 # ERROR Currently all kernel images are disabled, because they
95 # won't build with the grsecurity patch.
97 # Build a kernel for Marvell Kirkwood-based devices.
98 build_kernel_kirkwood = 1
101 kernel_target = zImage
103 # http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
104 kernel_build_flags = KALLSYMS_EXTRA_PASS=1
107 if "%{DISTRO_ARCH}" == "armv7hl"
108 # Build the default unified kernel.
109 build_kernel_default = 1
112 kernel_target = zImage
115 # mkimage is a requirement to build uImage images.
116 if "%{kernel_target}" == "uImage"
117 requires += u-boot-tools
120 # Build default kernel.
121 if "%{build_kernel_default}" == "1"
125 # Build legacy kernel.
126 if "%{build_kernel_legacy}" == "1"
130 # Build ARM kirkwood kernel.
131 if "%{build_kernel_kirkwood}" == "1"
136 rm -f %{DIR_APP}/localversion-grsec
138 # Remove -Werror flag to fix ARMv5 build.
139 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
141 # Disable the colorize plugin.
142 # It's generally very nice but it clutters our
144 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
147 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
149 cp -vf %{kernel_logo} \
150 drivers/video/logo/logo_linux_clut224.ppm
152 # Get rid of unwanted files resulting from patch fuzz.
153 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
155 # Remove unnecessary SCM files.
156 find . -name .gitignore -exec rm -f {} \; >/dev/null
158 # This prevents scripts/setlocalversion from mucking with our version numbers.
167 if [ "${flavour}" != "default" ]; then
171 scripts/configure --kernel-dir=%{DIR_APP} \
172 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
175 # Generate configuration files for all kernels we are going to
177 for kernel in %{kernels}; do
178 configure_kernel ${kernel}
186 local localversion="%{localversion}"
187 local fullversion="%{fullver}"
188 if [ "${flavour}" != "default" ]; then
190 localversion="${localversion}.${flavour}"
191 fullversion="${fullversion}.${flavour}"
196 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
198 # Clean up the source tree.
201 # Install configuration file.
202 cp configs/config.${flavour} .config
206 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
207 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
208 %{kernel_build_flags} %{PARALLELISMFLAGS}
210 # Compile Flattened Device Tree database
211 case "${DISTRO_ARCH}" in
213 make ARCH=%{kernel_arch} dtbs
215 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
216 for file in arch/arm/boot/dts/*.dtb; do
217 [ -e "${file}" ] || continue
219 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
225 # Install the results.
226 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
227 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
228 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
229 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
231 # Create empty initramfs (20M).
232 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
235 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
236 KERNELRELEASE=${fullversion} modules_install
239 case "%{DISTRO_ARCH}" in
241 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
242 KERNELRELEASE=${fullversion} vdso_install
246 # Create an empty settings file for dracut
247 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
248 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
249 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
251 # And now the scary looking part.
253 # Recreate source and build links.
254 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
255 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
256 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
258 # Create dirs for extra modules.
259 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
261 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
262 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
263 cp Module.symvers System.map \
264 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
265 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
267 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
268 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
269 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
272 cp -a --parents arch/%{kernel_arch}/include \
273 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
274 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
276 # Make sure we can build external modules.
277 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
278 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
279 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
280 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
281 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
282 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
284 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
287 # Move all development files to /usr/src.
288 mkdir -p %{BUILDROOT}/usr/src/kernels
289 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
290 %{BUILDROOT}/usr/src/kernels/${fullversion}
291 ln -sf ../../../src/kernels/${fullversion} \
292 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
295 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
296 -exec chmod 644 {} \;
298 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
301 for kernel in %{kernels}; do
302 build_kernel ${kernel}
307 chmod +x tools/power/cpupower/utils/version-gen.sh
308 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
310 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
311 pushd tools/power/cpupower/debug/x86_64
314 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
315 pushd tools/power/cpupower/debug/i386
322 # When no kernels are configured, we create a default config
323 # which enables us to install at least the header files.
324 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
326 # Install the header files
327 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
328 mkdir -pv %{BUILDROOT}/usr/include
329 find dest/include \( -name .install -o -name ..install.cmd \) -delete
330 cp -rv dest/include/* %{BUILDROOT}/usr/include
332 # Glibc provides these headers
333 rm -rfv %{BUILDROOT}/usr/include/scsi \
334 %{BUILDROOT}/usr/include/asm*/atomic.h \
335 %{BUILDROOT}/usr/include/asm*/io.h \
336 %{BUILDROOT}/usr/include/asm*/irq.h
338 # Remove all firmware files which are distributed by linux-firmware
339 rm -rfv %{BUILDROOT}/lib/firmware
342 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
343 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
344 install install-man install-python_ext
347 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
348 mandir=%{mandir} CPUFREQ_BENCH=false install
350 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
351 pushd tools/power/cpupower/debug/x86_64
352 install -m 755 centrino-decode \
353 %{BUILDROOT}/usr/bin/centrino-decode
354 install -m 755 powernow-k8-decode \
355 %{BUILDROOT}/usr/bin/powernow-k8-decode
357 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
358 pushd tools/power/cpupower/debug/i386
359 install -m 755 centrino-decode \
360 %{BUILDROOT}/usr/bin/centrino-decode
361 install -m 755 powernow-k8-decode \
362 %{BUILDROOT}/usr/bin/powernow-k8-decode
366 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
373 kernel_release = %{fullver}
375 summary = The Linux kernel %{kernel_release}.
382 kernel=%{kernel_release}
392 /boot/System.map-%{kernel_release}
393 /boot/dtb-%{kernel_release}
394 /boot/vmlinuz-%{kernel_release}
395 /boot/initramfs-%{kernel_release}.img
396 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
397 /usr/lib/modules/%{kernel_release}
401 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
402 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
414 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
418 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
422 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
427 kernel_release = %{fullver}
429 summary = Development files of kernel-%{kernel_release}.
433 Install this package in order to compile modules for
434 kernel release %{kernel_release}.
438 kernel-devel = %{thisver}
446 /usr/lib/modules/%{kernel_release}/build
447 /usr/lib/modules/%{kernel_release}/source
448 /usr/src/kernels/%{kernel_release}
452 if "%{build_kernel_default}" == "1"
453 if "%{DISTRO_ARCH}" == "armv7hl"
458 kernel_release = %{fullver}
460 # Replace the Exynos kernel.
461 obsoletes += kernel-exynos < %{kernel_release}
462 conflicts += kernel-exynos < %{kernel_release}
464 # Replace the OMAP kernel.
465 obsoletes += kernel-omap < %{kernel_release}
466 conflicts += kernel-omap < %{kernel_release}
473 kernel_release = %{fullver}
475 # Replace the Exynos kernel.
476 obsoletes += kernel-exynos-devel < %{kernel_release}
477 conflicts += kernel-exynos-devel < %{kernel_release}
479 # Replace the OMAP kernel.
480 obsoletes += kernel-omap-devel < %{kernel_release}
481 conflicts += kernel-omap-devel < %{kernel_release}
489 kernel_release = %{fullver}
496 kernel_release = %{fullver}
501 if "%{build_kernel_legacy}" == "1"
502 package kernel-legacy
505 kernel_name = kernel-legacy
506 kernel_release = %{fullver}.legacy
509 package kernel-legacy-devel
512 kernel_name = kernel-legacy
513 kernel_release = %{fullver}.legacy
517 if "%{build_kernel_kirkwood}" == "1"
518 package kernel-kirkwood
521 kernel_name = kernel-kirkwood
522 kernel_release = %{fullver}.kirkwood
525 package kernel-kirkwood-devel
528 kernel_name = kernel-kirkwood
529 kernel_release = %{fullver}.kirkwood
533 package kernel-headers
534 summary = Header files of the kernel release %{fullver}.
535 desciption = %{summary}
543 summary = Assortment of tools for the Linux kernel.
544 description = %{summary}