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 # Arguments that are passed to the kernel build command
66 # Clearning any host CFLAGS or LDFLAGS for kernel build
67 kernel_build_flags = CFLAGS= LDFLAGS=
69 kernel_arch = %{DISTRO_PLATFORM}
70 kernel_target = bzImage
71 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
73 if "%{DISTRO_ARCH}" == "x86_64"
74 build_kernel_default = 1
77 if "%{DISTRO_ARCH}" == "aarch64"
78 build_kernel_default = 1
81 kernel_target = Image.gz
84 if "%{DISTRO_ARCH}" == "armv7hl"
85 # Build the default unified kernel.
86 build_kernel_default = 1
88 kernel_target = zImage
91 # mkimage is a requirement to build uImage images.
92 if "%{kernel_target}" == "uImage"
93 requires += u-boot-tools
96 # Build default kernel.
97 if "%{build_kernel_default}" == "1"
102 # Disable the colorize plugin.
103 # It's generally very nice but it clutters our
105 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
108 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
110 cp -vf %{kernel_logo} \
111 drivers/video/logo/logo_linux_clut224.ppm
113 # Get rid of unwanted files resulting from patch fuzz.
114 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
116 # Remove unnecessary SCM files.
117 find . -name .gitignore -exec rm -f {} \; >/dev/null
119 # This prevents scripts/setlocalversion from mucking with our version numbers.
128 if [ "${flavour}" != "default" ]; then
132 scripts/configure --kernel-dir=%{DIR_APP} \
133 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
136 # Generate configuration files for all kernels we are going to
138 for kernel in %{kernels}; do
139 configure_kernel ${kernel}
148 local localversion="%{localversion}"
149 local fullversion="%{fullver}"
150 if [ "${flavour}" != "default" ]; then
152 localversion="${localversion}.${flavour}"
153 fullversion="${fullversion}.${flavour}"
158 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
160 # Clean up the source tree.
163 # Install configuration file.
164 cp configs/config.${flavour} .config
168 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
169 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
170 %{kernel_build_flags} %{PARALLELISMFLAGS}
172 # Compile Flattened Device Tree database
173 case "${DISTRO_ARCH}" in
175 make ARCH=%{kernel_arch} dtbs
177 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
178 for file in arch/arm/boot/dts/*.dtb; do
179 [ -e "${file}" ] || continue
181 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
187 # Install the results.
188 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
189 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
190 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
191 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
193 # Create empty initramfs (20M).
194 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
197 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
198 KERNELRELEASE=${fullversion} modules_install
200 # Create an empty settings file for dracut
201 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
202 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
203 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
205 # And now the scary looking part.
207 # Recreate source and build links.
208 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
209 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
210 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
212 # Create dirs for extra modules.
213 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
215 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
216 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
217 cp Module.symvers System.map \
218 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
219 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
221 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
222 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
223 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
226 cp -a --parents arch/%{kernel_arch}/include \
227 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
228 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
230 # Make sure we can build external modules.
231 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
232 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
233 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
234 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
235 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
236 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
238 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
239 xargs --no-run-if-empty chmod u+x
241 # Move all development files to /usr/src.
242 mkdir -p %{BUILDROOT}/usr/src/kernels
243 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
244 %{BUILDROOT}/usr/src/kernels/${fullversion}
245 ln -sf ../../../src/kernels/${fullversion} \
246 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
249 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
250 -exec chmod 644 {} \;
252 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
254 # remove device tree compiler because there are dead links
255 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
258 for kernel in %{kernels}; do
259 build_kernel ${kernel}
263 chmod +x tools/power/cpupower/utils/version-gen.sh
264 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
266 pushd tools/thermal/tmon
272 # When no kernels are configured, we create a default config
273 # which enables us to install at least the header files.
274 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
276 # Install the header files
277 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
278 mkdir -pv %{BUILDROOT}/usr/include
279 find dest/include \( -name .install -o -name ..install.cmd \) -delete
280 cp -rv dest/include/* %{BUILDROOT}/usr/include
282 # Glibc provides these headers
283 rm -rfv %{BUILDROOT}/usr/include/scsi \
284 %{BUILDROOT}/usr/include/asm*/atomic.h \
285 %{BUILDROOT}/usr/include/asm*/io.h \
286 %{BUILDROOT}/usr/include/asm*/irq.h
288 # Remove all firmware files which are distributed by linux-firmware
289 rm -rfv %{BUILDROOT}/lib/firmware
293 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
294 mandir=%{mandir} CPUFREQ_BENCH=false install
296 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
299 pushd tools/thermal/tmon
300 make INSTALL_ROOT=%{BUILDROOT} install
308 kernel_release = %{fullver}
310 summary = The Linux kernel %{kernel_release}.
317 kernel=%{kernel_release}
327 /boot/System.map-%{kernel_release}
328 /boot/dtb-%{kernel_release}
329 /boot/vmlinuz-%{kernel_release}
330 /boot/initramfs-%{kernel_release}.img
331 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
332 /usr/lib/modules/%{kernel_release}
336 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
337 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
349 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
353 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
357 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
362 kernel_release = %{fullver}
364 summary = Development files of kernel-%{kernel_release}.
368 Install this package in order to compile modules for
369 kernel release %{kernel_release}.
373 kernel-devel = %{thisver}
381 /usr/lib/modules/%{kernel_release}/build
382 /usr/lib/modules/%{kernel_release}/source
383 /usr/src/kernels/%{kernel_release}
387 if "%{build_kernel_default}" == "1"
388 if "%{DISTRO_ARCH}" == "armv7hl"
393 kernel_release = %{fullver}
395 # Replace the Exynos kernel.
396 obsoletes += kernel-exynos < %{kernel_release}
397 conflicts += kernel-exynos < %{kernel_release}
399 # Replace the OMAP kernel.
400 obsoletes += kernel-omap < %{kernel_release}
401 conflicts += kernel-omap < %{kernel_release}
408 kernel_release = %{fullver}
410 # Replace the Exynos kernel.
411 obsoletes += kernel-exynos-devel < %{kernel_release}
412 conflicts += kernel-exynos-devel < %{kernel_release}
414 # Replace the OMAP kernel.
415 obsoletes += kernel-omap-devel < %{kernel_release}
416 conflicts += kernel-omap-devel < %{kernel_release}
424 kernel_release = %{fullver}
431 kernel_release = %{fullver}
436 package kernel-headers
437 summary = Header files of the kernel release %{fullver}.
438 desciption = %{summary}
446 summary = Assortment of tools for the Linux kernel.
447 description = %{summary}