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 if "%{DISTRO_ARCH}" == "i686"
76 # Build a default and legacy kernel for the
78 build_kernel_default = 1
79 build_kernel_legacy = 1
82 kernel_image = arch/%{kernel_arch}/boot/bzImage
86 if "%{DISTRO_ARCH}" == "x86_64"
87 build_kernel_default = 1
90 kernel_image = arch/%{kernel_arch}/boot/bzImage
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_image = arch/%{kernel_arch}/boot/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 a kernel for Samsung's Exynos SoCs.
109 build_kernel_exynos = 1
111 # Build a kernel for TI OMAP SoCs.
112 build_kernel_omap = 1
115 kernel_image = arch/%{kernel_arch}/boot/zImage
118 # Build default kernel.
119 if "%{build_kernel_default}" == "1"
123 # Build exynos kernel.
124 if "%{build_kernel_exynos}" == "1"
128 # Build legacy kernel.
129 if "%{build_kernel_legacy}" == "1"
133 # Build ARM kirkwood kernel.
134 if "%{build_kernel_kirkwood}" == "1"
138 # Build ARM omap kernel.
139 if "%{build_kernel_omap}" == "1"
144 rm -f %{DIR_APP}/localversion-grsec
146 # Remove -Werror flag to fix ARMv5 build.
147 sed -e "s/-Werror//g" -i grsecurity/Makefile
149 # Disable the colorize plugin.
150 # It's generally very nice but it clutters our
152 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
155 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
157 cp -vf %{kernel_logo} \
158 drivers/video/logo/logo_linux_clut224.ppm
160 # Get rid of unwanted files resulting from patch fuzz.
161 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
163 # Remove unnecessary SCM files.
164 find . -name .gitignore -exec rm -f {} \; >/dev/null
166 # This prevents scripts/setlocalversion from mucking with our version numbers.
175 if [ "${flavour}" != "default" ]; then
179 scripts/configure --kernel-dir=%{DIR_APP} \
180 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
183 # Generate configuration files for all kernels we are going to
185 for kernel in %{kernels}; do
186 configure_kernel ${kernel}
194 local localversion="%{localversion}"
195 local fullversion="%{fullver}"
196 if [ "${flavour}" != "default" ]; then
198 localversion="${localversion}.${flavour}"
199 fullversion="${fullversion}.${flavour}"
204 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
206 # Clean up the source tree.
209 # Install configuration file.
210 cp configs/config.${flavour} .config
214 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
215 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
216 %{kernel_build_flags} %{PARALLELISMFLAGS}
218 # Install the results.
219 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
220 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
221 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
222 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
224 # Create empty initramfs (20M).
225 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
228 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
229 KERNELRELEASE=${fullversion} modules_install
232 case "%{DISTRO_ARCH}" in
234 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
235 KERNELRELEASE=${fullversion} vdso_install
239 # Create an empty settings file for dracut
240 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
241 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
242 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
244 # And now the scary looking part.
246 # Recreate source and build links.
247 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
248 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
249 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
251 # Create dirs for extra modules.
252 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
254 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
255 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
256 cp Module.symvers System.map \
257 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
258 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
260 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
261 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
262 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
265 cp -a --parents arch/%{kernel_arch}/include \
266 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
267 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
269 # Make sure we can build external modules.
270 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
271 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
272 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
273 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
274 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
275 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
277 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
280 # Move all development files to /usr/src.
281 mkdir -p %{BUILDROOT}/usr/src/kernels
282 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
283 %{BUILDROOT}/usr/src/kernels/${fullversion}
284 ln -sf ../../../src/kernels/${fullversion} \
285 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
288 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
289 -exec chmod 644 {} \;
291 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
294 for kernel in %{kernels}; do
295 build_kernel ${kernel}
300 chmod +x tools/power/cpupower/utils/version-gen.sh
301 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
303 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
304 pushd tools/power/cpupower/debug/x86_64
307 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
308 pushd tools/power/cpupower/debug/i386
315 # When no kernels are configured, we create a default config
316 # which enables us to install at least the header files.
317 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
319 # Install the header files
320 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
321 mkdir -pv %{BUILDROOT}/usr/include
322 find dest/include \( -name .install -o -name ..install.cmd \) -delete
323 cp -rv dest/include/* %{BUILDROOT}/usr/include
325 # Glibc provides these headers
326 rm -rfv %{BUILDROOT}/usr/include/scsi \
327 %{BUILDROOT}/usr/include/asm*/atomic.h \
328 %{BUILDROOT}/usr/include/asm*/io.h \
329 %{BUILDROOT}/usr/include/asm*/irq.h
331 # Remove all firmware files which are distributed by linux-firmware
332 rm -rfv %{BUILDROOT}/lib/firmware
335 make -C tools/perf DESTDIR=%{BUILDROOT} WERROR=0 \
336 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
337 install install-man install-python_ext
340 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
341 mandir=%{mandir} CPUFREQ_BENCH=false install
343 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
344 pushd tools/power/cpupower/debug/x86_64
345 install -m 755 centrino-decode \
346 %{BUILDROOT}/usr/bin/centrino-decode
347 install -m 755 powernow-k8-decode \
348 %{BUILDROOT}/usr/bin/powernow-k8-decode
350 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
351 pushd tools/power/cpupower/debug/i386
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
359 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
366 kernel_release = %{fullver}
368 summary = The Linux kernel %{kernel_release}.
375 kernel=%{kernel_release}
385 /boot/System.map-%{kernel_release}
386 /boot/vmlinuz-%{kernel_release}
387 /boot/initramfs-%{kernel_release}.img
388 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
389 /usr/lib/modules/%{kernel_release}
393 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
394 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
406 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
410 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
414 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
419 kernel_release = %{fullver}
421 summary = Development files of kernel-%{kernel_release}.
425 Install this package in order to compile modules for
426 kernel release %{kernel_release}.
434 /usr/lib/modules/%{kernel_release}/build
435 /usr/lib/modules/%{kernel_release}/source
436 /usr/src/kernels/%{kernel_release}
440 if "%{build_kernel_default}" == "1"
445 kernel_release = %{fullver}
452 kernel_release = %{fullver}
456 if "%{build_kernel_exynos}" == "1"
457 package kernel-exynos
460 kernel_name = kernel-exynos
461 kernel_release = %{fullver}.exynos
464 package kernel-exynos-devel
467 kernel_name = kernel-exynos
468 kernel_release = %{fullver}.exynos
472 if "%{build_kernel_legacy}" == "1"
473 package kernel-legacy
476 kernel_name = kernel-legacy
477 kernel_release = %{fullver}.legacy
480 package kernel-legacy-devel
483 kernel_name = kernel-legacy
484 kernel_release = %{fullver}.legacy
488 if "%{build_kernel_kirkwood}" == "1"
489 package kernel-kirkwood
492 kernel_name = kernel-kirkwood
493 kernel_release = %{fullver}.kirkwood
496 package kernel-kirkwood-devel
499 kernel_name = kernel-kirkwood
500 kernel_release = %{fullver}.kirkwood
504 if "%{build_kernel_omap}" == "1"
508 kernel_name = kernel-omap
509 kernel_release = %{fullver}.omap
512 package kernel-omap-devel
515 kernel_name = kernel-omap
516 kernel_release = %{fullver}.omap
520 package kernel-headers
521 summary = Header files of the kernel release %{fullver}.
522 desciption = %{summary}
530 summary = Assortment of tools for the Linux kernel.
531 description = %{summary}