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.
50 tools_cpupower_requires
56 # A list of kernels to build.
59 # Should we build cpupower?
62 kernel_target = bzImage
63 if "%{DISTRO_ARCH}" == "i686"
64 # Build a default and PAE-enabled kernel for the
66 build_kernel_default = 1
70 kernel_image = arch/%{kernel_arch}/boot/bzImage
74 if "%{DISTRO_ARCH}" == "x86_64"
75 build_kernel_default = 1
78 kernel_image = arch/%{kernel_arch}/boot/bzImage
81 if "%{DISTRO_ARCH}" == "armv5tel"
82 # Build versatile kernel.
83 build_kernel_versatile = 1
86 kernel_image = arch/%{kernel_arch}/boot/zImage
88 # ARM does not support cpupower.
92 if "%{DISTRO_ARCH}" == "armv7hl"
93 # Currently build no kernel images.
97 # ARM does not support cpupower.
101 # Build default kernel.
102 if "%{build_kernel_default}" == "1"
106 # Build PAE-enabled kernel.
107 if "%{build_kernel_pae}" == "1"
111 # Build ARM versatile kernel.
112 if "%{build_kernel_versatile}" == "1"
116 # Add tools' build requirements if build is requested.
117 if "%{build_cpupower}" == "1"
118 requires += %{tools_cpupower_requires}
122 rm -f %{DIR_APP}/localversion-grsec
124 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
126 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
127 drivers/video/logo/logo_linux_clut224.ppm
129 # Get rid of unwanted files resulting from patch fuzz.
130 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
132 # Remove unnecessary SCM files.
133 find . -name .gitignore -exec rm -f {} \; >/dev/null
135 # This prevents scripts/setlocalversion from mucking with our version numbers.
142 if [ "${flavour}" != "default" ]; then
146 # This is the place, where the configuration files
147 # should be dynamically generated.
148 # For now, we just copy pregenerated ones.
149 cp %{DIR_SOURCE}/config.%{arch}${suffix} .config
151 make ARCH=%{kernel_arch} oldnoconfig
152 mv .config configs/config.${flavour}
155 # Generate configuration files for all kernels we are going to
157 for kernel in %{kernels}; do
158 configure_kernel ${kernel}
166 local localversion="%{localversion}"
167 local fullversion="%{fullver}"
168 if [ "${flavour}" != "default" ]; then
170 localversion="${localversion}.${flavour}"
171 fullversion="${fullversion}.${flavour}"
176 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
178 # Clean up the source tree.
181 # Install configuration file.
182 cp configs/config.${flavour} .config
185 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
186 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules %{PARALLELISMFLAGS}
188 # Install the results.
189 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
190 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
191 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
192 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
194 # Create empty initramfs (20M).
195 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
198 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
199 KERNELRELEASE=${fullversion} modules_install
202 case "%{DISTRO_ARCH}" in
204 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
205 KERNELRELEASE=${fullversion} vdso_install
209 # Create an empty settings file for dracut
210 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
211 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
212 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
214 # And now the scary looking part.
216 # Recreate source and build links.
217 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
218 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
219 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
221 # Create dirs for extra modules.
222 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
224 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
225 %{BUILDROOT}/lib/modules/${fullversion}/build
226 cp -v Module.symvers System.map \
227 %{BUILDROOT}/lib/modules/${fullversion}/build
228 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
230 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
231 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
232 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
235 cp -va --parents arch/%{kernel_arch}/include \
236 %{BUILDROOT}/lib/modules/${fullversion}/build
237 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
239 # Make sure we can build external modules.
240 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
241 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
242 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
243 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
244 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
245 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
247 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
250 # Move all development files to /usr/src.
251 mkdir -pv %{BUILDROOT}/usr/src/kernels
252 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
253 %{BUILDROOT}/usr/src/kernels/${fullversion}
254 ln -svf ../../../usr/src/kernels/${fullversion} \
255 %{BUILDROOT}/lib/modules/${fullversion}/build
257 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
260 for kernel in %{kernels}; do
261 build_kernel ${kernel}
266 if [ "%{build_cpupower}" = "1" ]; then
267 chmod +x tools/power/cpupower/utils/version-gen.sh
268 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
270 cd tools/power/cpupower/debug/i386
271 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
277 # Install the header files
278 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
279 mkdir -pv %{BUILDROOT}/usr/include
280 find dest/include \( -name .install -o -name ..install.cmd \) -delete
281 cp -rv dest/include/* %{BUILDROOT}/usr/include
283 # Glibc provides these headers
284 rm -rfv %{BUILDROOT}/usr/include/scsi \
285 %{BUILDROOT}/usr/include/asm*/atomic.h \
286 %{BUILDROOT}/usr/include/asm*/io.h \
287 %{BUILDROOT}/usr/include/asm*/irq.h
289 # Remove all firmware files which are distributed by linux-firmware
290 rm -rfv %{BUILDROOT}/lib/firmware
293 # XXX Man pages cannot be created because they need asciidoc.
294 make -C tools/perf DESTDIR=%{BUILDROOT} \
295 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
299 if [ "%{build_cpupower}" = "1" ]; then
300 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=/usr/lib \
301 mandir=/usr/share/man CPUFREQ_BENCH=false install
302 cd tools/power/cpupower/debug/i386
303 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
304 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
306 chmod 0755 %{BUILDROOT}/usr/lib/libcpupower.so*
314 kernel_release = %{fullver}
316 summary = The Linux kernel %{kernel_release}.
318 prerequires = dracut grubby module-init-tools
319 provides = kernel=%{kernel_release}
326 /boot/System.map-%{kernel_release}
327 /boot/vmlinuz-%{kernel_release}
328 /boot/initramfs-%{kernel_release}.img
329 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
330 /lib/modules/%{kernel_release}
334 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release} || exit $?
335 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release} || exit $?
347 /sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --install %{KVERREL}%{?-v:.%{-v*}}
351 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
355 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
360 kernel_release = %{fullver}
362 summary = Development files of kernel-%{kernel_release}.
366 Install this package in order to compile modules for
367 kernel release %{kernel_release}.
375 /lib/modules/%{kernel_release}/build
376 /lib/modules/%{kernel_release}/source
377 /usr/src/kernels/%{kernel_release}
381 if "%{build_kernel_default}" == "1"
386 kernel_release = %{fullver}
393 kernel_release = %{fullver}
397 if "%{build_kernel_pae}" == "1"
401 kernel_name = kernel-PAE
402 kernel_release = %{fullver}.PAE
405 package kernel-PAE-devel
408 kernel_name = kernel-PAE
409 kernel_release = %{fullver}.PAE
413 if "%{build_kernel_versatile}" == "1"
414 package kernel-versatile
417 kernel_name = kernel-versatile
418 kernel_release = %{fullver}.versatile
421 package kernel-versatile-devel
424 kernel_name = kernel-versatile
425 kernel_release = %{fullver}.versatile
429 package kernel-headers
430 summary = Header files of the kernel release %{fullver}.
431 desciption = %{summary}
439 summary = Assortment of tools for the Linux kernel.
440 description = %{summary}