]> git.ipfire.org Git - people/stevee/ipfire-3.x.git/blame - kernel/kernel.nm
kernel: Proper build the helper binaries with our C and LDFLAGS
[people/stevee/ipfire-3.x.git] / kernel / kernel.nm
CommitLineData
166a6c21 1###############################################################################
802ea3af
MT
2# IPFire.org - An Open Source Firewall Solution #
3# Copyright (C) - IPFire Development Team <info@ipfire.org> #
166a6c21
MT
4###############################################################################
5
15a11c5b 6name = kernel
ee731e2d 7version = 6.2
636e102c 8release = 3
15a11c5b 9thisapp = linux-%{version}
166a6c21 10
81bb0557 11maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
802ea3af 12groups = System/Kernels
ee731e2d 13url = https://www.kernel.org/
802ea3af
MT
14license = GPLv2
15summary = The Linux kernel.
166a6c21 16
802ea3af 17description
4c928ab7
MT
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
166a6c21 21 input and output, etc.
802ea3af 22end
166a6c21 23
802ea3af 24# Version helper variables.
bcf38aec
MT
25localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26fullver = %{version}-%{localversion}
802ea3af 27
d8d7d102 28source_dl = https://www.kernel.org/pub/linux/kernel/v6.x/
fe014038 29sources = %{thisapp}.tar.xz
802ea3af
MT
30
31build
32 requires
662414a4 33 asciidoc
7f6f4de5 34 bc
849a0073 35 binutils >= 2.25
bcf38aec 36 binutils-devel
c6e2a6c8 37 bison
bcf38aec 38 elfutils-devel
c6e2a6c8 39 flex
0f52a9b7 40 gcc >= 8
fe2de317 41 gcc-plugin-devel
6e9df6a3 42 gettext
849a0073 43 hostname
81bb0557 44 libunwind-devel
802ea3af 45 ncurses-devel
7c69f2c2 46 newt-devel
04859b28 47 openssl
6dce0e4c 48 /usr/bin/openssl
7c69f2c2 49 pciutils-devel
802ea3af 50 perl
d69f4f23 51 python3-devel
1b1a9c16 52 rsync
849a0073 53 openssl-devel
7c69f2c2 54 slang-devel
662414a4 55 xmlto
bf6ee3f7 56 xz
a3776d8a 57 zstd
4c928ab7
MT
58
59 /sbin/depmod
bcf38aec
MT
60 end
61
34520606 62 kernel_arch = %{DISTRO_PLATFORM}
45088e83 63 kernel_target = bzImage
967da24b
MT
64 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
65
d5383c43 66 if "%{DISTRO_ARCH}" == "aarch64"
d5383c43
MT
67 kernel_arch = arm64
68 kernel_target = Image.gz
69 end
70
802ea3af 71 prepare_cmds
5e856224
MT
72 # Disable the colorize plugin.
73 # It's generally very nice but it clutters our
74 # logfiles.
75 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
76 -i Makefile
77
93e1e527
SS
78 # Use our linker flags while building the compiler plugins.
79 sed -i '/^plugin_ldflags\s\+=/ s/$/ %{LDFLAGS}/' \
80 scripts/gcc-plugins/Makefile
802ea3af 81
bcf38aec
MT
82 # Get rid of unwanted files resulting from patch fuzz.
83 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
84
85 # Remove unnecessary SCM files.
86 find . -name .gitignore -exec rm -f {} \; >/dev/null
87
ebeed08a
MT
88 # This prevents scripts/setlocalversion from mucking with our version numbers.
89 touch .scmversion
90
bcf38aec 91 mkdir -pv configs
4c928ab7
MT
92
93 cd %{DIR_SOURCE}
bcf38aec
MT
94 configure_kernel() {
95 local flavour=${1}
96 local suffix
f05d9a85 97 if [ "${flavour}" != "generic" ]; then
bcf38aec
MT
98 suffix="-${flavour}"
99 fi
100
d8d7d102 101 bash scripts/configure --kernel-dir=%{DIR_APP} \
4c928ab7 102 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
bcf38aec
MT
103 }
104
105 # Generate configuration files for all kernels we are going to
106 # build.
f05d9a85 107 configure_kernel "generic"
802ea3af
MT
108 end
109
110 build
bcf38aec
MT
111 build_kernel() {
112 local flavour=${1}
113 local suffix
114 local localversion="%{localversion}"
115 local fullversion="%{fullver}"
f05d9a85 116 if [ "${flavour}" != "generic" ]; then
bcf38aec
MT
117 suffix="-${flavour}"
118 localversion="${localversion}.${flavour}"
119 fullversion="${fullversion}.${flavour}"
120 fi
802ea3af 121
ebeed08a
MT
122 # Label the build.
123 sed -i Makefile \
124 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
125
bcf38aec
MT
126 # Clean up the source tree.
127 make mrproper
802ea3af 128
bcf38aec
MT
129 # Install configuration file.
130 cp configs/config.${flavour} .config
c6e2a6c8 131 cat .config
802ea3af 132
bcf38aec 133 # Run the build.
636e102c
SS
134 make ARCH=%{kernel_arch} HOSTCFLAGS="%{CFLAGS}" \
135 HOSTLDFLAGS="%{LDFLAGS}" olddefconfig >/dev/null
136
65c2deba 137 make ARCH=%{kernel_arch} %{kernel_target} modules \
636e102c
SS
138 KERNELRELEASE=${fullversion} HOSTCFLAGS="%{CFLAGS}" \
139 HOSTLDFLAGS="%{LDFLAGS}" %{PARALLELISMFLAGS}
bcf38aec 140
9d4be168
MT
141 # Compile Flattened Device Tree database
142 case "${DISTRO_ARCH}" in
d8d7d102 143 aarch64)
9d4be168
MT
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
bcf38aec 156 # Install the results.
c4ef5c45 157 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
bcf38aec
MT
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.
81bb0557 166 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
bcf38aec 167 KERNELRELEASE=${fullversion} modules_install
c8f122e5 168
bcf38aec
MT
169 # And now the scary looking part.
170 #
171 # Recreate source and build links.
7c69f2c2
MT
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
802ea3af 175
bcf38aec 176 # Create dirs for extra modules.
7c69f2c2 177 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
802ea3af 178
7c69f2c2 179 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
c4ef5c45 180 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 181 cp Module.symvers System.map \
c4ef5c45 182 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 183 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
bcf38aec 184
7c69f2c2
MT
185 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
186 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
c4ef5c45 187 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
bcf38aec
MT
188 -exec rm -vf {} \;
189
7c69f2c2 190 cp -a --parents arch/%{kernel_arch}/include \
c4ef5c45 191 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 192 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
bcf38aec
MT
193
194 # Make sure we can build external modules.
c4ef5c45
MT
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
7c69f2c2 199 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
c4ef5c45
MT
200 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
201
202 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
bf6ee3f7 203 xargs --no-run-if-empty chmod u+x
bcf38aec 204
bcf38aec 205 # Move all development files to /usr/src.
7c69f2c2
MT
206 mkdir -p %{BUILDROOT}/usr/src/kernels
207 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
bcf38aec 208 %{BUILDROOT}/usr/src/kernels/${fullversion}
7c69f2c2 209 ln -sf ../../../src/kernels/${fullversion} \
c4ef5c45 210 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
bcf38aec 211
81bb0557
MT
212 # Fix permissions.
213 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
214 -exec chmod 644 {} \;
215
bcf38aec 216 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
d27a5bdd
AF
217
218 # remove device tree compiler because there are dead links
219 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
bcf38aec
MT
220 }
221
d8d7d102 222 # Build the kernel
f05d9a85 223 build_kernel "generic"
6e9df6a3 224
6e9df6a3 225 # cpupower
7c69f2c2
MT
226 chmod +x tools/power/cpupower/utils/version-gen.sh
227 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
228
302e8df8
MT
229 pushd tools/thermal/tmon
230 make
231 popd
bcf38aec
MT
232 end
233
234 install
4c928ab7
MT
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
802ea3af 239 # Install the header files
c8f122e5 240 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
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
15a11c5b
MT
251 # Remove all firmware files which are distributed by linux-firmware
252 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
253
254 # Install tools.
6e9df6a3 255 # cpupower
7c69f2c2
MT
256 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
257 mandir=%{mandir} CPUFREQ_BENCH=false install
258
7c69f2c2 259 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
302e8df8 260
302e8df8
MT
261 # tmon
262 pushd tools/thermal/tmon
263 make INSTALL_ROOT=%{BUILDROOT} install
264 popd
802ea3af
MT
265 end
266end
267
268packages
d8d7d102
MT
269 package kernel-tools
270 summary = Assortment of tools for the Linux kernel.
271 description = %{summary}
bcf38aec 272
d8d7d102
MT
273 filter_requires
274 perl>=[0-9]\:.*
275 end
276 end
277
6dce0e4c
MT
278 package kernel-tools-debuginfo
279 template DEBUGINFO
280 end
281
d8d7d102
MT
282 package kernel
283 summary = The Linux kernel %{fullver}
bcf38aec 284
1c9b6c79 285 prerequires
4c928ab7 286 /sbin/depmod
1c9b6c79
MT
287 end
288
289 provides
d8d7d102 290 kernel = %{fullver}
1c9b6c79
MT
291 end
292
802ea3af 293 requires
4c928ab7 294 dracut
868edea1 295 kernel-updater
802ea3af 296 linux-firmware
c5123727 297 wireless-regdb
57fb3e8c
MT
298
299 # Install intel-microcode only on x86_64
300 (intel-microcode if arch(x86_64))
802ea3af 301 end
ad1ea534 302
bcf38aec 303 files
d8d7d102
MT
304 /boot/System.map-%{fullver}
305 /boot/dtb-%{fullver}
306 /boot/vmlinuz-%{fullver}
307 /boot/initramfs-%{fullver}.img
308 /usr/lib/modules/%{fullver}
bcf38aec
MT
309 end
310
aa3ab846 311 _posttrans
d8d7d102 312 kernel-updater install %{fullver}
aa3ab846
MT
313 end
314
ad1ea534 315 script posttransin
aa3ab846
MT
316 %{_posttrans}
317 end
318
319 script posttransup
320 %{_posttrans}
321 end
322
868edea1 323 script postun
d8d7d102 324 kernel-updater uninstall %{fullver}
bcf38aec
MT
325 end
326 end
327
d8d7d102
MT
328 package kernel-devel
329 summary = Development files of kernel-%{fullver}
bcf38aec
MT
330 description
331 %{summary}
332
333 Install this package in order to compile modules for
d8d7d102 334 kernel release %{fullver}.
bcf38aec
MT
335 end
336
10756fd5
MT
337 provides
338 kernel-devel = %{thisver}
339 end
340
bcf38aec
MT
341 filter_requires
342 perl>=[0-9]\:.*
ad1ea534
MT
343 end
344
bcf38aec 345 files
d8d7d102
MT
346 /usr/lib/modules/%{fullver}/build
347 /usr/lib/modules/%{fullver}/source
348 /usr/src/kernels/%{fullver}
45088e83 349 end
bcf38aec 350 end
81bb0557 351
802ea3af 352 package kernel-headers
d8d7d102 353 summary = Header files of the kernel release %{fullver}
802ea3af 354 desciption = %{summary}
c698e4be
MT
355
356 files
357 /usr/include
358 end
802ea3af 359 end
802ea3af 360end