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
62 # A list of kernels to build.
65 kernel_arch = %{DISTRO_PLATFORM}
66 kernel_target = bzImage
67 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
69 if "%{DISTRO_ARCH}" == "x86_64"
70 build_kernel_default = 1
73 if "%{DISTRO_ARCH}" == "aarch64"
74 build_kernel_default = 1
77 kernel_target = Image.gz
80 if "%{DISTRO_ARCH}" == "armv7hl"
81 # Build the default unified kernel.
82 build_kernel_default = 1
84 kernel_target = zImage
87 # mkimage is a requirement to build uImage images.
88 if "%{kernel_target}" == "uImage"
89 requires += u-boot-tools
92 # Build default kernel.
93 if "%{build_kernel_default}" == "1"
98 # Disable the colorize plugin.
99 # It's generally very nice but it clutters our
101 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
104 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
106 cp -vf %{kernel_logo} \
107 drivers/video/logo/logo_linux_clut224.ppm
109 # Get rid of unwanted files resulting from patch fuzz.
110 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
112 # Remove unnecessary SCM files.
113 find . -name .gitignore -exec rm -f {} \; >/dev/null
115 # This prevents scripts/setlocalversion from mucking with our version numbers.
124 if [ "${flavour}" != "default" ]; then
128 scripts/configure --kernel-dir=%{DIR_APP} \
129 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
132 # Generate configuration files for all kernels we are going to
134 for kernel in %{kernels}; do
135 configure_kernel ${kernel}
143 local localversion="%{localversion}"
144 local fullversion="%{fullver}"
145 if [ "${flavour}" != "default" ]; then
147 localversion="${localversion}.${flavour}"
148 fullversion="${fullversion}.${flavour}"
153 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
155 # Clean up the source tree.
158 # Install configuration file.
159 cp configs/config.${flavour} .config
163 make ARCH=%{kernel_arch} olddefconfig >/dev/null
164 make ARCH=%{kernel_arch} %{kernel_target} modules \
167 # Compile Flattened Device Tree database
168 case "${DISTRO_ARCH}" in
170 make ARCH=%{kernel_arch} dtbs
172 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
173 for file in arch/arm/boot/dts/*.dtb; do
174 [ -e "${file}" ] || continue
176 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
182 # Install the results.
183 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
184 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
185 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
186 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
188 # Create empty initramfs (20M).
189 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
192 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
193 KERNELRELEASE=${fullversion} modules_install
195 # Create an empty settings file for dracut
196 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
197 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
198 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
200 # And now the scary looking part.
202 # Recreate source and build links.
203 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
204 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
205 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
207 # Create dirs for extra modules.
208 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
210 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
211 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
212 cp Module.symvers System.map \
213 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
214 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
216 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
217 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
218 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
221 cp -a --parents arch/%{kernel_arch}/include \
222 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
223 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
225 # Make sure we can build external modules.
226 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
227 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
228 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
229 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
230 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
231 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
233 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
234 xargs --no-run-if-empty chmod u+x
236 # Move all development files to /usr/src.
237 mkdir -p %{BUILDROOT}/usr/src/kernels
238 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
239 %{BUILDROOT}/usr/src/kernels/${fullversion}
240 ln -sf ../../../src/kernels/${fullversion} \
241 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
244 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
245 -exec chmod 644 {} \;
247 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
249 # remove device tree compiler because there are dead links
250 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
253 for kernel in %{kernels}; do
254 build_kernel ${kernel}
258 chmod +x tools/power/cpupower/utils/version-gen.sh
259 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
261 pushd tools/thermal/tmon
267 # When no kernels are configured, we create a default config
268 # which enables us to install at least the header files.
269 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
271 # Install the header files
272 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
273 mkdir -pv %{BUILDROOT}/usr/include
274 find dest/include \( -name .install -o -name ..install.cmd \) -delete
275 cp -rv dest/include/* %{BUILDROOT}/usr/include
277 # Glibc provides these headers
278 rm -rfv %{BUILDROOT}/usr/include/scsi \
279 %{BUILDROOT}/usr/include/asm*/atomic.h \
280 %{BUILDROOT}/usr/include/asm*/io.h \
281 %{BUILDROOT}/usr/include/asm*/irq.h
283 # Remove all firmware files which are distributed by linux-firmware
284 rm -rfv %{BUILDROOT}/lib/firmware
288 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
289 mandir=%{mandir} CPUFREQ_BENCH=false install
291 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
294 pushd tools/thermal/tmon
295 make INSTALL_ROOT=%{BUILDROOT} install
303 kernel_release = %{fullver}
305 summary = The Linux kernel %{kernel_release}.
312 kernel=%{kernel_release}
322 /boot/System.map-%{kernel_release}
323 /boot/dtb-%{kernel_release}
324 /boot/vmlinuz-%{kernel_release}
325 /boot/initramfs-%{kernel_release}.img
326 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
327 /usr/lib/modules/%{kernel_release}
331 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
332 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
344 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
348 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
352 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
357 kernel_release = %{fullver}
359 summary = Development files of kernel-%{kernel_release}.
363 Install this package in order to compile modules for
364 kernel release %{kernel_release}.
368 kernel-devel = %{thisver}
376 /usr/lib/modules/%{kernel_release}/build
377 /usr/lib/modules/%{kernel_release}/source
378 /usr/src/kernels/%{kernel_release}
382 if "%{build_kernel_default}" == "1"
383 if "%{DISTRO_ARCH}" == "armv7hl"
388 kernel_release = %{fullver}
390 # Replace the Exynos kernel.
391 obsoletes += kernel-exynos < %{kernel_release}
392 conflicts += kernel-exynos < %{kernel_release}
394 # Replace the OMAP kernel.
395 obsoletes += kernel-omap < %{kernel_release}
396 conflicts += kernel-omap < %{kernel_release}
403 kernel_release = %{fullver}
405 # Replace the Exynos kernel.
406 obsoletes += kernel-exynos-devel < %{kernel_release}
407 conflicts += kernel-exynos-devel < %{kernel_release}
409 # Replace the OMAP kernel.
410 obsoletes += kernel-omap-devel < %{kernel_release}
411 conflicts += kernel-omap-devel < %{kernel_release}
419 kernel_release = %{fullver}
426 kernel_release = %{fullver}
431 package kernel-headers
432 summary = Header files of the kernel release %{fullver}.
433 desciption = %{summary}
441 summary = Assortment of tools for the Linux kernel.
442 description = %{summary}