]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Drop tools that we don't need and FTBFS
[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.6.7
8 release = 4
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
263 for kernel in %{kernels}; do
264 build_kernel ${kernel}
265 done
266
267 # Build tools.
268 # perf
269 #%{perf_make} DESTDIR=%{BUILDROOT} all
270
271 # cpupower
272 chmod +x tools/power/cpupower/utils/version-gen.sh
273 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
274
275 pushd tools/thermal/tmon
276 make
277 popd
278 end
279
280 install
281 # When no kernels are configured, we create a default config
282 # which enables us to install at least the header files.
283 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
284
285 # Install the header files
286 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
287 mkdir -pv %{BUILDROOT}/usr/include
288 find dest/include \( -name .install -o -name ..install.cmd \) -delete
289 cp -rv dest/include/* %{BUILDROOT}/usr/include
290
291 # Glibc provides these headers
292 rm -rfv %{BUILDROOT}/usr/include/scsi \
293 %{BUILDROOT}/usr/include/asm*/atomic.h \
294 %{BUILDROOT}/usr/include/asm*/io.h \
295 %{BUILDROOT}/usr/include/asm*/irq.h
296
297 # Remove all firmware files which are distributed by linux-firmware
298 rm -rfv %{BUILDROOT}/lib/firmware
299
300 # Install tools.
301 #%{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
302
303 # cpupower
304 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
305 mandir=%{mandir} CPUFREQ_BENCH=false install
306
307 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
308
309 # tmon
310 pushd tools/thermal/tmon
311 make INSTALL_ROOT=%{BUILDROOT} install
312 popd
313 end
314 end
315
316 packages
317 template KERNEL
318 kernel_name = kernel
319 kernel_release = %{fullver}
320
321 summary = The Linux kernel %{kernel_release}.
322
323 prerequires
324 /sbin/depmod
325 end
326
327 provides
328 kernel=%{kernel_release}
329 end
330
331 requires
332 dracut
333 grubby
334 linux-firmware
335 end
336
337 files
338 /boot/System.map-%{kernel_release}
339 /boot/dtb-%{kernel_release}
340 /boot/vmlinuz-%{kernel_release}
341 /boot/initramfs-%{kernel_release}.img
342 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
343 /usr/lib/modules/%{kernel_release}
344 end
345
346 _posttrans
347 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
348 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
349 end
350
351 script posttransin
352 %{_posttrans}
353 end
354
355 script posttransup
356 %{_posttrans}
357 end
358
359 script postin
360 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
361 end
362
363 script postup
364 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
365 end
366
367 script preun
368 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
369 end
370 end
371
372 template KERNELDEVEL
373 kernel_release = %{fullver}
374
375 summary = Development files of kernel-%{kernel_release}.
376 description
377 %{summary}
378
379 Install this package in order to compile modules for
380 kernel release %{kernel_release}.
381 end
382
383 provides
384 kernel-devel = %{thisver}
385 end
386
387 filter_requires
388 perl>=[0-9]\:.*
389 end
390
391 files
392 /usr/lib/modules/%{kernel_release}/build
393 /usr/lib/modules/%{kernel_release}/source
394 /usr/src/kernels/%{kernel_release}
395 end
396 end
397
398 if "%{build_kernel_default}" == "1"
399 if "%{DISTRO_ARCH}" == "armv7hl"
400 package kernel
401 template KERNEL
402
403 kernel_name = kernel
404 kernel_release = %{fullver}
405
406 # Replace the Exynos kernel.
407 obsoletes += kernel-exynos < %{kernel_release}
408 conflicts += kernel-exynos < %{kernel_release}
409
410 # Replace the OMAP kernel.
411 obsoletes += kernel-omap < %{kernel_release}
412 conflicts += kernel-omap < %{kernel_release}
413 end
414
415 package kernel-devel
416 template KERNELDEVEL
417
418 kernel_name = kernel
419 kernel_release = %{fullver}
420
421 # Replace the Exynos kernel.
422 obsoletes += kernel-exynos-devel < %{kernel_release}
423 conflicts += kernel-exynos-devel < %{kernel_release}
424
425 # Replace the OMAP kernel.
426 obsoletes += kernel-omap-devel < %{kernel_release}
427 conflicts += kernel-omap-devel < %{kernel_release}
428 end
429
430 else
431 package kernel
432 template KERNEL
433
434 kernel_name = kernel
435 kernel_release = %{fullver}
436 end
437
438 package kernel-devel
439 template KERNELDEVEL
440
441 kernel_name = kernel
442 kernel_release = %{fullver}
443 end
444 end
445 end
446
447 package kernel-headers
448 summary = Header files of the kernel release %{fullver}.
449 desciption = %{summary}
450
451 files
452 /usr/include
453 end
454 end
455
456 package kernel-tools
457 summary = Assortment of tools for the Linux kernel.
458 description = %{summary}
459
460 filter_requires
461 perl>=[0-9]\:.*
462 end
463
464 files
465 /
466 !/boot
467 !/usr/include
468 !/usr/lib/modules
469 !/usr/src
470 !/usr/src/debug
471 !/usr/lib/debug
472 end
473 end
474 end