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/v4.x/
29 sources = %{thisapp}.tar.xz
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
63 # A list of kernels to build.
66 # Arguments that are passed to the kernel build command
67 # Clearning any host CFLAGS or LDFLAGS for kernel build
68 kernel_build_flags = CFLAGS= LDFLAGS=
70 kernel_arch = %{DISTRO_PLATFORM}
71 kernel_target = bzImage
72 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
74 if "%{DISTRO_ARCH}" == "x86_64"
75 build_kernel_default = 1
78 if "%{DISTRO_ARCH}" == "aarch64"
79 build_kernel_default = 1
82 kernel_target = Image.gz
85 if "%{DISTRO_ARCH}" == "armv7hl"
86 # Build the default unified kernel.
87 build_kernel_default = 1
89 kernel_target = zImage
92 # mkimage is a requirement to build uImage images.
93 if "%{kernel_target}" == "uImage"
94 requires += u-boot-tools
97 # Build default kernel.
98 if "%{build_kernel_default}" == "1"
103 # Disable the colorize plugin.
104 # It's generally very nice but it clutters our
106 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
109 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
111 cp -vf %{kernel_logo} \
112 drivers/video/logo/logo_linux_clut224.ppm
114 # Get rid of unwanted files resulting from patch fuzz.
115 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
117 # Remove unnecessary SCM files.
118 find . -name .gitignore -exec rm -f {} \; >/dev/null
120 # This prevents scripts/setlocalversion from mucking with our version numbers.
129 if [ "${flavour}" != "default" ]; then
133 scripts/configure --kernel-dir=%{DIR_APP} \
134 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
137 # Generate configuration files for all kernels we are going to
139 for kernel in %{kernels}; do
140 configure_kernel ${kernel}
149 local localversion="%{localversion}"
150 local fullversion="%{fullver}"
151 if [ "${flavour}" != "default" ]; then
153 localversion="${localversion}.${flavour}"
154 fullversion="${fullversion}.${flavour}"
159 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
161 # Clean up the source tree.
164 # Install configuration file.
165 cp configs/config.${flavour} .config
169 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
170 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
171 %{kernel_build_flags} %{PARALLELISMFLAGS}
173 # Compile Flattened Device Tree database
174 case "${DISTRO_ARCH}" in
176 make ARCH=%{kernel_arch} dtbs
178 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
179 for file in arch/arm/boot/dts/*.dtb; do
180 [ -e "${file}" ] || continue
182 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
188 # Install the results.
189 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/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}/usr mod-fw= V=1 \
199 KERNELRELEASE=${fullversion} modules_install
201 # Create an empty settings file for dracut
202 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
203 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
204 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
206 # And now the scary looking part.
208 # Recreate source and build links.
209 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
210 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
211 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
213 # Create dirs for extra modules.
214 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
216 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
217 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
218 cp Module.symvers System.map \
219 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
220 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
222 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
223 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
224 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
227 cp -a --parents arch/%{kernel_arch}/include \
228 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
229 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
231 # Make sure we can build external modules.
232 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
233 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
234 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
235 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
236 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
237 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
239 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
240 xargs --no-run-if-empty chmod u+x
242 # Move all development files to /usr/src.
243 mkdir -p %{BUILDROOT}/usr/src/kernels
244 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
245 %{BUILDROOT}/usr/src/kernels/${fullversion}
246 ln -sf ../../../src/kernels/${fullversion} \
247 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
250 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
251 -exec chmod 644 {} \;
253 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
255 # remove device tree compiler because there are dead links
256 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
259 for kernel in %{kernels}; do
260 build_kernel ${kernel}
264 chmod +x tools/power/cpupower/utils/version-gen.sh
265 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
267 pushd tools/thermal/tmon
273 # When no kernels are configured, we create a default config
274 # which enables us to install at least the header files.
275 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
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
294 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
295 mandir=%{mandir} CPUFREQ_BENCH=false install
297 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
300 pushd tools/thermal/tmon
301 make INSTALL_ROOT=%{BUILDROOT} install
309 kernel_release = %{fullver}
311 summary = The Linux kernel %{kernel_release}.
318 kernel=%{kernel_release}
328 /boot/System.map-%{kernel_release}
329 /boot/dtb-%{kernel_release}
330 /boot/vmlinuz-%{kernel_release}
331 /boot/initramfs-%{kernel_release}.img
332 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
333 /usr/lib/modules/%{kernel_release}
337 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
338 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
350 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
354 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
358 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
363 kernel_release = %{fullver}
365 summary = Development files of kernel-%{kernel_release}.
369 Install this package in order to compile modules for
370 kernel release %{kernel_release}.
374 kernel-devel = %{thisver}
382 /usr/lib/modules/%{kernel_release}/build
383 /usr/lib/modules/%{kernel_release}/source
384 /usr/src/kernels/%{kernel_release}
388 if "%{build_kernel_default}" == "1"
389 if "%{DISTRO_ARCH}" == "armv7hl"
394 kernel_release = %{fullver}
396 # Replace the Exynos kernel.
397 obsoletes += kernel-exynos < %{kernel_release}
398 conflicts += kernel-exynos < %{kernel_release}
400 # Replace the OMAP kernel.
401 obsoletes += kernel-omap < %{kernel_release}
402 conflicts += kernel-omap < %{kernel_release}
409 kernel_release = %{fullver}
411 # Replace the Exynos kernel.
412 obsoletes += kernel-exynos-devel < %{kernel_release}
413 conflicts += kernel-exynos-devel < %{kernel_release}
415 # Replace the OMAP kernel.
416 obsoletes += kernel-omap-devel < %{kernel_release}
417 conflicts += kernel-omap-devel < %{kernel_release}
425 kernel_release = %{fullver}
432 kernel_release = %{fullver}
437 package kernel-headers
438 summary = Header files of the kernel release %{fullver}.
439 desciption = %{summary}
447 summary = Assortment of tools for the Linux kernel.
448 description = %{summary}