]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: update to 4.12.11
[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 = 4.12.11
8 release = 1
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 = http://www.kernel.org/pub/linux/kernel/v4.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 >= 4.9
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 python-devel
53 openssl-devel
54 slang-devel
55 xmlto
56 xz
57
58 /sbin/depmod
59 %{kernel_logo}
60 end
61
62 # A list of kernels to build.
63 kernels =
64
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=
68
69 kernel_arch = %{DISTRO_PLATFORM}
70 kernel_target = bzImage
71 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
72
73 if "%{DISTRO_ARCH}" == "x86_64"
74 build_kernel_default = 1
75 end
76
77 if "%{DISTRO_ARCH}" == "aarch64"
78 build_kernel_default = 1
79
80 kernel_arch = arm64
81 kernel_target = Image.gz
82 end
83
84 if "%{DISTRO_ARCH}" == "armv7hl"
85 # Build the default unified kernel.
86 build_kernel_default = 1
87
88 kernel_target = zImage
89 end
90
91 # mkimage is a requirement to build uImage images.
92 if "%{kernel_target}" == "uImage"
93 requires += u-boot-tools
94 end
95
96 # Build default kernel.
97 if "%{build_kernel_default}" == "1"
98 kernels += default
99 end
100
101 prepare_cmds
102 # Disable the colorize plugin.
103 # It's generally very nice but it clutters our
104 # logfiles.
105 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
106 -i Makefile
107
108 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
109
110 cp -vf %{kernel_logo} \
111 drivers/video/logo/logo_linux_clut224.ppm
112
113 # Get rid of unwanted files resulting from patch fuzz.
114 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
115
116 # Remove unnecessary SCM files.
117 find . -name .gitignore -exec rm -f {} \; >/dev/null
118
119 # This prevents scripts/setlocalversion from mucking with our version numbers.
120 touch .scmversion
121
122 mkdir -pv configs
123
124 cd %{DIR_SOURCE}
125 configure_kernel() {
126 local flavour=${1}
127 local suffix
128 if [ "${flavour}" != "default" ]; then
129 suffix="-${flavour}"
130 fi
131
132 scripts/configure --kernel-dir=%{DIR_APP} \
133 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
134 }
135
136 # Generate configuration files for all kernels we are going to
137 # build.
138 for kernel in %{kernels}; do
139 configure_kernel ${kernel}
140 done
141
142 end
143
144 build
145 build_kernel() {
146 local flavour=${1}
147 local suffix
148 local localversion="%{localversion}"
149 local fullversion="%{fullver}"
150 if [ "${flavour}" != "default" ]; then
151 suffix="-${flavour}"
152 localversion="${localversion}.${flavour}"
153 fullversion="${fullversion}.${flavour}"
154 fi
155
156 # Label the build.
157 sed -i Makefile \
158 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
159
160 # Clean up the source tree.
161 make mrproper
162
163 # Install configuration file.
164 cp configs/config.${flavour} .config
165 cat .config
166
167 # Run the build.
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}
171
172 # Compile Flattened Device Tree database
173 case "${DISTRO_ARCH}" in
174 aarch64|arm*)
175 make ARCH=%{kernel_arch} dtbs
176
177 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
178 for file in arch/arm/boot/dts/*.dtb; do
179 [ -e "${file}" ] || continue
180
181 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
182 rm -f ${file}
183 done
184 ;;
185 esac
186
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}
192
193 # Create empty initramfs (20M).
194 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
195
196 # Install modules.
197 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
198 KERNELRELEASE=${fullversion} modules_install
199
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
204
205 # And now the scary looking part.
206 #
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
211
212 # Create dirs for extra modules.
213 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
214
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}
220
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" \
224 -exec rm -vf {} \;
225
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
229
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
237
238 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
239 xargs --no-run-if-empty chmod u+x
240
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
247
248 # Fix permissions.
249 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
250 -exec chmod 644 {} \;
251
252 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
253
254 # remove device tree compiler because there are dead links
255 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
256 }
257
258 for kernel in %{kernels}; do
259 build_kernel ${kernel}
260 done
261
262 # cpupower
263 chmod +x tools/power/cpupower/utils/version-gen.sh
264 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
265
266 pushd tools/thermal/tmon
267 make
268 popd
269 end
270
271 install
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
275
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
281
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
287
288 # Remove all firmware files which are distributed by linux-firmware
289 rm -rfv %{BUILDROOT}/lib/firmware
290
291 # Install tools.
292 # cpupower
293 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
294 mandir=%{mandir} CPUFREQ_BENCH=false install
295
296 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
297
298 # tmon
299 pushd tools/thermal/tmon
300 make INSTALL_ROOT=%{BUILDROOT} install
301 popd
302 end
303 end
304
305 packages
306 template KERNEL
307 kernel_name = kernel
308 kernel_release = %{fullver}
309
310 summary = The Linux kernel %{kernel_release}.
311
312 prerequires
313 /sbin/depmod
314 end
315
316 provides
317 kernel=%{kernel_release}
318 end
319
320 requires
321 dracut
322 grubby
323 linux-firmware
324 end
325
326 files
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}
333 end
334
335 _posttrans
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}
338 end
339
340 script posttransin
341 %{_posttrans}
342 end
343
344 script posttransup
345 %{_posttrans}
346 end
347
348 script postin
349 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
350 end
351
352 script postup
353 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
354 end
355
356 script preun
357 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
358 end
359 end
360
361 template KERNELDEVEL
362 kernel_release = %{fullver}
363
364 summary = Development files of kernel-%{kernel_release}.
365 description
366 %{summary}
367
368 Install this package in order to compile modules for
369 kernel release %{kernel_release}.
370 end
371
372 provides
373 kernel-devel = %{thisver}
374 end
375
376 filter_requires
377 perl>=[0-9]\:.*
378 end
379
380 files
381 /usr/lib/modules/%{kernel_release}/build
382 /usr/lib/modules/%{kernel_release}/source
383 /usr/src/kernels/%{kernel_release}
384 end
385 end
386
387 if "%{build_kernel_default}" == "1"
388 if "%{DISTRO_ARCH}" == "armv7hl"
389 package kernel
390 template KERNEL
391
392 kernel_name = kernel
393 kernel_release = %{fullver}
394
395 # Replace the Exynos kernel.
396 obsoletes += kernel-exynos < %{kernel_release}
397 conflicts += kernel-exynos < %{kernel_release}
398
399 # Replace the OMAP kernel.
400 obsoletes += kernel-omap < %{kernel_release}
401 conflicts += kernel-omap < %{kernel_release}
402 end
403
404 package kernel-devel
405 template KERNELDEVEL
406
407 kernel_name = kernel
408 kernel_release = %{fullver}
409
410 # Replace the Exynos kernel.
411 obsoletes += kernel-exynos-devel < %{kernel_release}
412 conflicts += kernel-exynos-devel < %{kernel_release}
413
414 # Replace the OMAP kernel.
415 obsoletes += kernel-omap-devel < %{kernel_release}
416 conflicts += kernel-omap-devel < %{kernel_release}
417 end
418
419 else
420 package kernel
421 template KERNEL
422
423 kernel_name = kernel
424 kernel_release = %{fullver}
425 end
426
427 package kernel-devel
428 template KERNELDEVEL
429
430 kernel_name = kernel
431 kernel_release = %{fullver}
432 end
433 end
434 end
435
436 package kernel-headers
437 summary = Header files of the kernel release %{fullver}.
438 desciption = %{summary}
439
440 files
441 /usr/include
442 end
443 end
444
445 package kernel-tools
446 summary = Assortment of tools for the Linux kernel.
447 description = %{summary}
448
449 filter_requires
450 perl>=[0-9]\:.*
451 end
452
453 files
454 /
455 !/boot
456 !/usr/include
457 !/usr/lib/modules
458 !/usr/src
459 !/usr/src/debug
460 !/usr/lib/debug
461 end
462 end
463 end