]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Enabel zswap by default using LZ4
[ipfire-3.x.git] / kernel / kernel.nm
1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
5
6 name = kernel
7 version = 6.0.6
8 release = 0.5
9 thisapp = linux-%{version}
10
11 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
12 groups = System/Kernels
13 url = http://www.kernel.org/
14 license = GPLv2
15 summary = The Linux kernel.
16
17 description
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.
22 end
23
24 # Version helper variables.
25 localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26 fullver = %{version}-%{localversion}
27
28 source_dl = https://www.kernel.org/pub/linux/kernel/v6.x/
29 sources = %{thisapp}.tar.xz
30
31 build
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
33
34 requires
35 asciidoc
36 bc
37 binutils >= 2.25
38 binutils-devel
39 bison
40 elfutils-devel
41 flex
42 gcc >= 8
43 gcc-plugin-devel
44 gettext
45 hostname
46 libunwind-devel
47 ncurses-devel
48 net-tools
49 newt-devel
50 pciutils-devel
51 perl
52 python3
53 python-devel
54 rsync
55 openssl-devel
56 slang-devel
57 xmlto
58 xz
59
60 /sbin/depmod
61 %{kernel_logo}
62 end
63
64 kernel_arch = %{DISTRO_PLATFORM}
65 kernel_target = bzImage
66 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
67
68 if "%{DISTRO_ARCH}" == "aarch64"
69 kernel_arch = arm64
70 kernel_target = Image.gz
71 end
72
73 prepare_cmds
74 # Disable the colorize plugin.
75 # It's generally very nice but it clutters our
76 # logfiles.
77 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
78 -i Makefile
79
80 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
81
82 cp -vf %{kernel_logo} \
83 drivers/video/logo/logo_linux_clut224.ppm
84
85 # Get rid of unwanted files resulting from patch fuzz.
86 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
87
88 # Remove unnecessary SCM files.
89 find . -name .gitignore -exec rm -f {} \; >/dev/null
90
91 # This prevents scripts/setlocalversion from mucking with our version numbers.
92 touch .scmversion
93
94 mkdir -pv configs
95
96 cd %{DIR_SOURCE}
97 configure_kernel() {
98 local flavour=${1}
99 local suffix
100 if [ "${flavour}" != "generic" ]; then
101 suffix="-${flavour}"
102 fi
103
104 bash scripts/configure --kernel-dir=%{DIR_APP} \
105 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
106 }
107
108 # Generate configuration files for all kernels we are going to
109 # build.
110 configure_kernel "generic"
111 end
112
113 build
114 build_kernel() {
115 local flavour=${1}
116 local suffix
117 local localversion="%{localversion}"
118 local fullversion="%{fullver}"
119 if [ "${flavour}" != "generic" ]; then
120 suffix="-${flavour}"
121 localversion="${localversion}.${flavour}"
122 fullversion="${fullversion}.${flavour}"
123 fi
124
125 # Label the build.
126 sed -i Makefile \
127 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
128
129 # Clean up the source tree.
130 make mrproper
131
132 # Install configuration file.
133 cp configs/config.${flavour} .config
134 cat .config
135
136 # Run the build.
137 make ARCH=%{kernel_arch} olddefconfig >/dev/null
138 make ARCH=%{kernel_arch} %{kernel_target} modules \
139 KERNELRELEASE=${fullversion} %{PARALLELISMFLAGS}
140
141 # Compile Flattened Device Tree database
142 case "${DISTRO_ARCH}" in
143 aarch64)
144 make ARCH=%{kernel_arch} dtbs
145
146 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
147 for file in arch/arm/boot/dts/*.dtb; do
148 [ -e "${file}" ] || continue
149
150 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
151 rm -f ${file}
152 done
153 ;;
154 esac
155
156 # Install the results.
157 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
158 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
159 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
160 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
161
162 # Create empty initramfs (20M).
163 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
164
165 # Install modules.
166 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
167 KERNELRELEASE=${fullversion} modules_install
168
169 # And now the scary looking part.
170 #
171 # Recreate source and build links.
172 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
173 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
174 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
175
176 # Create dirs for extra modules.
177 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
178
179 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
180 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
181 cp Module.symvers System.map \
182 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
183 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
184
185 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
186 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
187 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
188 -exec rm -vf {} \;
189
190 cp -a --parents arch/%{kernel_arch}/include \
191 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
192 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
193
194 # Make sure we can build external modules.
195 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
196 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
197 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
198 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
199 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
200 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
201
202 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
203 xargs --no-run-if-empty chmod u+x
204
205 # Move all development files to /usr/src.
206 mkdir -p %{BUILDROOT}/usr/src/kernels
207 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
208 %{BUILDROOT}/usr/src/kernels/${fullversion}
209 ln -sf ../../../src/kernels/${fullversion} \
210 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
211
212 # Fix permissions.
213 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
214 -exec chmod 644 {} \;
215
216 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
217
218 # remove device tree compiler because there are dead links
219 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
220 }
221
222 # Build the kernel
223 build_kernel "generic"
224
225 # cpupower
226 chmod +x tools/power/cpupower/utils/version-gen.sh
227 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
228
229 pushd tools/thermal/tmon
230 make
231 popd
232 end
233
234 install
235 # When no kernels are configured, we create a default config
236 # which enables us to install at least the header files.
237 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
238
239 # Install the header files
240 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
241 mkdir -pv %{BUILDROOT}/usr/include
242 find dest/include \( -name .install -o -name ..install.cmd \) -delete
243 cp -rv dest/include/* %{BUILDROOT}/usr/include
244
245 # Glibc provides these headers
246 rm -rfv %{BUILDROOT}/usr/include/scsi \
247 %{BUILDROOT}/usr/include/asm*/atomic.h \
248 %{BUILDROOT}/usr/include/asm*/io.h \
249 %{BUILDROOT}/usr/include/asm*/irq.h
250
251 # Remove all firmware files which are distributed by linux-firmware
252 rm -rfv %{BUILDROOT}/lib/firmware
253
254 # Install tools.
255 # cpupower
256 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
257 mandir=%{mandir} CPUFREQ_BENCH=false install
258
259 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
260
261 # tmon
262 pushd tools/thermal/tmon
263 make INSTALL_ROOT=%{BUILDROOT} install
264 popd
265 end
266 end
267
268 packages
269 package kernel-tools
270 summary = Assortment of tools for the Linux kernel.
271 description = %{summary}
272
273 filter_requires
274 perl>=[0-9]\:.*
275 end
276 end
277
278 package kernel
279 summary = The Linux kernel %{fullver}
280
281 prerequires
282 /sbin/depmod
283 end
284
285 provides
286 kernel = %{fullver}
287 end
288
289 requires
290 dracut
291 kernel-updater
292 linux-firmware
293 intel-microcode
294 end
295
296 files
297 /boot/System.map-%{fullver}
298 /boot/dtb-%{fullver}
299 /boot/vmlinuz-%{fullver}
300 /boot/initramfs-%{fullver}.img
301 /usr/lib/modules/%{fullver}
302 end
303
304 _posttrans
305 kernel-updater install %{fullver}
306 end
307
308 script posttransin
309 %{_posttrans}
310 end
311
312 script posttransup
313 %{_posttrans}
314 end
315
316 script postun
317 kernel-updater uninstall %{fullver}
318 end
319 end
320
321 package kernel-devel
322 summary = Development files of kernel-%{fullver}
323 description
324 %{summary}
325
326 Install this package in order to compile modules for
327 kernel release %{fullver}.
328 end
329
330 provides
331 kernel-devel = %{thisver}
332 end
333
334 filter_requires
335 perl>=[0-9]\:.*
336 end
337
338 files
339 /usr/lib/modules/%{fullver}/build
340 /usr/lib/modules/%{fullver}/source
341 /usr/src/kernels/%{fullver}
342 end
343 end
344
345 package kernel-headers
346 summary = Header files of the kernel release %{fullver}
347 desciption = %{summary}
348
349 files
350 /usr/include
351 end
352 end
353 end