]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: update to 4.12.4
[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.4
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 audit-devel
37 bc
38 binutils >= 2.25
39 binutils-devel
40 bison
41 elfutils-devel
42 flex
43 gcc >= 4.9
44 gcc-plugin-devel
45 gettext
46 hostname
47 libunwind-devel
48 ncurses-devel
49 net-tools
50 newt-devel
51 pciutils-devel
52 perl
53 python-devel
54 openssl-devel
55 slang-devel
56 xmlto
57 xz
58
59 /sbin/depmod
60 %{kernel_logo}
61 end
62
63 # A list of kernels to build.
64 kernels =
65
66 # Arguments that are passed to the kernel build command
67 # Clearning any host CFLAGS or LDFLAGS for kernel build
68 kernel_build_flags = CFLAGS= LDFLAGS=
69
70 kernel_arch = %{DISTRO_PLATFORM}
71 kernel_target = bzImage
72 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
73
74 if "%{DISTRO_ARCH}" == "x86_64"
75 build_kernel_default = 1
76 end
77
78 if "%{DISTRO_ARCH}" == "aarch64"
79 build_kernel_default = 1
80
81 kernel_arch = arm64
82 kernel_target = Image.gz
83 end
84
85 if "%{DISTRO_ARCH}" == "armv7hl"
86 # Build the default unified kernel.
87 build_kernel_default = 1
88
89 kernel_target = zImage
90 end
91
92 # mkimage is a requirement to build uImage images.
93 if "%{kernel_target}" == "uImage"
94 requires += u-boot-tools
95 end
96
97 # Build default kernel.
98 if "%{build_kernel_default}" == "1"
99 kernels += default
100 end
101
102 perf_make = make %{PARALLELISMFLAGS} -C tools/perf V=1 WERROR=0 \
103 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
104 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
105
106 prepare_cmds
107 # Disable the colorize plugin.
108 # It's generally very nice but it clutters our
109 # logfiles.
110 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
111 -i Makefile
112
113 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
114
115 cp -vf %{kernel_logo} \
116 drivers/video/logo/logo_linux_clut224.ppm
117
118 # Get rid of unwanted files resulting from patch fuzz.
119 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
120
121 # Remove unnecessary SCM files.
122 find . -name .gitignore -exec rm -f {} \; >/dev/null
123
124 # This prevents scripts/setlocalversion from mucking with our version numbers.
125 touch .scmversion
126
127 mkdir -pv configs
128
129 cd %{DIR_SOURCE}
130 configure_kernel() {
131 local flavour=${1}
132 local suffix
133 if [ "${flavour}" != "default" ]; then
134 suffix="-${flavour}"
135 fi
136
137 scripts/configure --kernel-dir=%{DIR_APP} \
138 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
139 }
140
141 # Generate configuration files for all kernels we are going to
142 # build.
143 for kernel in %{kernels}; do
144 configure_kernel ${kernel}
145 done
146
147 # Tools
148 # Prevent perf from installing any files in /usr/libexec
149 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
150 end
151
152 build
153 build_kernel() {
154 local flavour=${1}
155 local suffix
156 local localversion="%{localversion}"
157 local fullversion="%{fullver}"
158 if [ "${flavour}" != "default" ]; then
159 suffix="-${flavour}"
160 localversion="${localversion}.${flavour}"
161 fullversion="${fullversion}.${flavour}"
162 fi
163
164 # Label the build.
165 sed -i Makefile \
166 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
167
168 # Clean up the source tree.
169 make mrproper
170
171 # Install configuration file.
172 cp configs/config.${flavour} .config
173 cat .config
174
175 # Run the build.
176 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
177 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
178 %{kernel_build_flags} %{PARALLELISMFLAGS}
179
180 # Compile Flattened Device Tree database
181 case "${DISTRO_ARCH}" in
182 aarch64|arm*)
183 make ARCH=%{kernel_arch} dtbs
184
185 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
186 for file in arch/arm/boot/dts/*.dtb; do
187 [ -e "${file}" ] || continue
188
189 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
190 rm -f ${file}
191 done
192 ;;
193 esac
194
195 # Install the results.
196 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
197 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
198 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
199 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
200
201 # Create empty initramfs (20M).
202 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
203
204 # Install modules.
205 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
206 KERNELRELEASE=${fullversion} modules_install
207
208 # Create an empty settings file for dracut
209 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
210 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
211 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
212
213 # And now the scary looking part.
214 #
215 # Recreate source and build links.
216 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
217 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
218 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
219
220 # Create dirs for extra modules.
221 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
222
223 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
224 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
225 cp Module.symvers System.map \
226 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
227 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
228
229 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
230 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
231 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
232 -exec rm -vf {} \;
233
234 cp -a --parents arch/%{kernel_arch}/include \
235 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
236 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
237
238 # Make sure we can build external modules.
239 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
240 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
241 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
242 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
243 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
244 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
245
246 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
247 xargs --no-run-if-empty chmod u+x
248
249 # Move all development files to /usr/src.
250 mkdir -p %{BUILDROOT}/usr/src/kernels
251 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
252 %{BUILDROOT}/usr/src/kernels/${fullversion}
253 ln -sf ../../../src/kernels/${fullversion} \
254 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
255
256 # Fix permissions.
257 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
258 -exec chmod 644 {} \;
259
260 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
261
262 # remove device tree compiler because there are dead links
263 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
264 }
265
266 for kernel in %{kernels}; do
267 build_kernel ${kernel}
268 done
269
270 # Build tools.
271 # perf
272 #%{perf_make} DESTDIR=%{BUILDROOT} all
273
274 # cpupower
275 chmod +x tools/power/cpupower/utils/version-gen.sh
276 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
277
278 pushd tools/thermal/tmon
279 make
280 popd
281 end
282
283 install
284 # When no kernels are configured, we create a default config
285 # which enables us to install at least the header files.
286 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
287
288 # Install the header files
289 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
290 mkdir -pv %{BUILDROOT}/usr/include
291 find dest/include \( -name .install -o -name ..install.cmd \) -delete
292 cp -rv dest/include/* %{BUILDROOT}/usr/include
293
294 # Glibc provides these headers
295 rm -rfv %{BUILDROOT}/usr/include/scsi \
296 %{BUILDROOT}/usr/include/asm*/atomic.h \
297 %{BUILDROOT}/usr/include/asm*/io.h \
298 %{BUILDROOT}/usr/include/asm*/irq.h
299
300 # Remove all firmware files which are distributed by linux-firmware
301 rm -rfv %{BUILDROOT}/lib/firmware
302
303 # Install tools.
304 #%{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
305
306 # cpupower
307 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
308 mandir=%{mandir} CPUFREQ_BENCH=false install
309
310 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
311
312 # tmon
313 pushd tools/thermal/tmon
314 make INSTALL_ROOT=%{BUILDROOT} install
315 popd
316 end
317 end
318
319 packages
320 template KERNEL
321 kernel_name = kernel
322 kernel_release = %{fullver}
323
324 summary = The Linux kernel %{kernel_release}.
325
326 prerequires
327 /sbin/depmod
328 end
329
330 provides
331 kernel=%{kernel_release}
332 end
333
334 requires
335 dracut
336 grubby
337 linux-firmware
338 end
339
340 files
341 /boot/System.map-%{kernel_release}
342 /boot/dtb-%{kernel_release}
343 /boot/vmlinuz-%{kernel_release}
344 /boot/initramfs-%{kernel_release}.img
345 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
346 /usr/lib/modules/%{kernel_release}
347 end
348
349 _posttrans
350 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
351 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
352 end
353
354 script posttransin
355 %{_posttrans}
356 end
357
358 script posttransup
359 %{_posttrans}
360 end
361
362 script postin
363 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
364 end
365
366 script postup
367 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
368 end
369
370 script preun
371 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
372 end
373 end
374
375 template KERNELDEVEL
376 kernel_release = %{fullver}
377
378 summary = Development files of kernel-%{kernel_release}.
379 description
380 %{summary}
381
382 Install this package in order to compile modules for
383 kernel release %{kernel_release}.
384 end
385
386 provides
387 kernel-devel = %{thisver}
388 end
389
390 filter_requires
391 perl>=[0-9]\:.*
392 end
393
394 files
395 /usr/lib/modules/%{kernel_release}/build
396 /usr/lib/modules/%{kernel_release}/source
397 /usr/src/kernels/%{kernel_release}
398 end
399 end
400
401 if "%{build_kernel_default}" == "1"
402 if "%{DISTRO_ARCH}" == "armv7hl"
403 package kernel
404 template KERNEL
405
406 kernel_name = kernel
407 kernel_release = %{fullver}
408
409 # Replace the Exynos kernel.
410 obsoletes += kernel-exynos < %{kernel_release}
411 conflicts += kernel-exynos < %{kernel_release}
412
413 # Replace the OMAP kernel.
414 obsoletes += kernel-omap < %{kernel_release}
415 conflicts += kernel-omap < %{kernel_release}
416 end
417
418 package kernel-devel
419 template KERNELDEVEL
420
421 kernel_name = kernel
422 kernel_release = %{fullver}
423
424 # Replace the Exynos kernel.
425 obsoletes += kernel-exynos-devel < %{kernel_release}
426 conflicts += kernel-exynos-devel < %{kernel_release}
427
428 # Replace the OMAP kernel.
429 obsoletes += kernel-omap-devel < %{kernel_release}
430 conflicts += kernel-omap-devel < %{kernel_release}
431 end
432
433 else
434 package kernel
435 template KERNEL
436
437 kernel_name = kernel
438 kernel_release = %{fullver}
439 end
440
441 package kernel-devel
442 template KERNELDEVEL
443
444 kernel_name = kernel
445 kernel_release = %{fullver}
446 end
447 end
448 end
449
450 package kernel-headers
451 summary = Header files of the kernel release %{fullver}.
452 desciption = %{summary}
453
454 files
455 /usr/include
456 end
457 end
458
459 package kernel-tools
460 summary = Assortment of tools for the Linux kernel.
461 description = %{summary}
462
463 filter_requires
464 perl>=[0-9]\:.*
465 end
466
467 files
468 /
469 !/boot
470 !/usr/include
471 !/usr/lib/modules
472 !/usr/src
473 !/usr/src/debug
474 !/usr/lib/debug
475 end
476 end
477 end