]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame - kernel/kernel.nm
kernel: Remove ARM LPAE image
[people/ms/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
f03929e7 7version = 4.1.7
dc4bd821 8release = 3
15a11c5b 9thisapp = linux-%{version}
166a6c21 10
81bb0557 11maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
802ea3af
MT
12groups = System/Kernels
13url = http://www.kernel.org/
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
94cce289 28source_dl = http://www.kernel.org/pub/linux/kernel/v4.x/
fe014038 29sources = %{thisapp}.tar.xz
802ea3af
MT
30
31build
6b6a8ff6
MT
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
33
802ea3af 34 requires
662414a4 35 asciidoc
81bb0557 36 audit-devel
7f6f4de5 37 bc
7c69f2c2 38 binutils >= 2.23.51.0.3-3
bcf38aec 39 binutils-devel
c6e2a6c8 40 bison
bcf38aec 41 elfutils-devel
c6e2a6c8 42 flex
461b7e77 43 gcc >= 4.9
fe2de317 44 gcc-plugin-devel
6e9df6a3 45 gettext
81bb0557 46 libunwind-devel
802ea3af 47 ncurses-devel
ebeed08a 48 net-tools
7c69f2c2
MT
49 newt-devel
50 pciutils-devel
802ea3af 51 perl
bcf38aec 52 python-devel
7c69f2c2 53 slang-devel
662414a4 54 xmlto
bf6ee3f7 55 xz
4c928ab7
MT
56
57 /sbin/depmod
6b6a8ff6 58 %{kernel_logo}
bcf38aec
MT
59 end
60
7c69f2c2
MT
61 # i686 needs librmi for cpupower.
62 if "%{DISTRO_ARCH}" == "i686"
63 requires += liblrmi-devel
13c9d848
MT
64 end
65
bcf38aec 66 # A list of kernels to build.
45088e83 67 kernels =
bcf38aec 68
572b4308
MT
69 # Arguments that are passed to the kernel build command.
70 kernel_build_flags =
71
34520606 72 kernel_arch = %{DISTRO_PLATFORM}
45088e83 73 kernel_target = bzImage
967da24b
MT
74 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
75
bcf38aec 76 if "%{DISTRO_ARCH}" == "i686"
1c9b6c79 77 # Build a default and legacy kernel for the
45088e83
MT
78 # i686 architecture.
79 build_kernel_default = 1
1c9b6c79 80 build_kernel_legacy = 1
45088e83
MT
81 end
82
c112b2e3
MT
83 if "%{DISTRO_ARCH}" == "x86_64"
84 build_kernel_default = 1
c112b2e3
MT
85 end
86
d5383c43
MT
87 if "%{DISTRO_ARCH}" == "aarch64"
88 # Disable for now because it won't compile
89 build_kernel_default = 0
90
91 kernel_arch = arm64
92 kernel_target = Image.gz
93 end
94
13c9d848 95 if "%{DISTRO_ARCH}" == "armv7hl"
7f6f4de5
MT
96 # Build the default unified kernel.
97 build_kernel_default = 1
98
7f6f4de5 99 kernel_target = zImage
967da24b
MT
100 end
101
102 # mkimage is a requirement to build uImage images.
103 if "%{kernel_target}" == "uImage"
104 requires += u-boot-tools
13c9d848
MT
105 end
106
45088e83
MT
107 # Build default kernel.
108 if "%{build_kernel_default}" == "1"
109 kernels += default
110 end
111
1c9b6c79
MT
112 # Build legacy kernel.
113 if "%{build_kernel_legacy}" == "1"
114 kernels += legacy
45088e83
MT
115 end
116
302e8df8
MT
117 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
118 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
119 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
120
802ea3af 121 prepare_cmds
802ea3af
MT
122 rm -f %{DIR_APP}/localversion-grsec
123
5e856224 124 # Remove -Werror flag to fix ARMv5 build.
703bc627 125 sed -e "s/-Werror//g" -i grsecurity/Makefile || :
5e856224
MT
126
127 # Disable the colorize plugin.
128 # It's generally very nice but it clutters our
129 # logfiles.
130 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
131 -i Makefile
132
802ea3af
MT
133 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
134
6b6a8ff6 135 cp -vf %{kernel_logo} \
802ea3af
MT
136 drivers/video/logo/logo_linux_clut224.ppm
137
bcf38aec
MT
138 # Get rid of unwanted files resulting from patch fuzz.
139 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
140
141 # Remove unnecessary SCM files.
142 find . -name .gitignore -exec rm -f {} \; >/dev/null
143
ebeed08a
MT
144 # This prevents scripts/setlocalversion from mucking with our version numbers.
145 touch .scmversion
146
bcf38aec 147 mkdir -pv configs
4c928ab7
MT
148
149 cd %{DIR_SOURCE}
bcf38aec
MT
150 configure_kernel() {
151 local flavour=${1}
152 local suffix
153 if [ "${flavour}" != "default" ]; then
154 suffix="-${flavour}"
155 fi
156
4c928ab7
MT
157 scripts/configure --kernel-dir=%{DIR_APP} \
158 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
bcf38aec
MT
159 }
160
161 # Generate configuration files for all kernels we are going to
162 # build.
163 for kernel in %{kernels}; do
164 configure_kernel ${kernel}
165 done
302e8df8
MT
166
167 # Tools
168 # Prevent perf from installing any files in /usr/libexec
169 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
802ea3af
MT
170 end
171
172 build
bcf38aec
MT
173 build_kernel() {
174 local flavour=${1}
175 local suffix
176 local localversion="%{localversion}"
177 local fullversion="%{fullver}"
178 if [ "${flavour}" != "default" ]; then
179 suffix="-${flavour}"
180 localversion="${localversion}.${flavour}"
181 fullversion="${fullversion}.${flavour}"
182 fi
802ea3af 183
ebeed08a
MT
184 # Label the build.
185 sed -i Makefile \
186 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
187
bcf38aec
MT
188 # Clean up the source tree.
189 make mrproper
802ea3af 190
bcf38aec
MT
191 # Install configuration file.
192 cp configs/config.${flavour} .config
c6e2a6c8 193 cat .config
802ea3af 194
bcf38aec 195 # Run the build.
ebeed08a 196 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
572b4308
MT
197 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
198 %{kernel_build_flags} %{PARALLELISMFLAGS}
bcf38aec 199
9d4be168
MT
200 # Compile Flattened Device Tree database
201 case "${DISTRO_ARCH}" in
d5383c43 202 aarch64|arm*)
9d4be168
MT
203 make ARCH=%{kernel_arch} dtbs
204
205 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
206 for file in arch/arm/boot/dts/*.dtb; do
207 [ -e "${file}" ] || continue
208
209 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
210 rm -f ${file}
211 done
212 ;;
213 esac
214
bcf38aec 215 # Install the results.
c4ef5c45 216 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
bcf38aec
MT
217 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
218 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
219 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
220
221 # Create empty initramfs (20M).
222 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
223
224 # Install modules.
81bb0557 225 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
bcf38aec 226 KERNELRELEASE=${fullversion} modules_install
c8f122e5
MT
227
228 # Install vdso.
229 case "%{DISTRO_ARCH}" in
230 i686)
231 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
232 KERNELRELEASE=${fullversion} vdso_install
233 ;;
234 esac
802ea3af 235
bcf38aec 236 # Create an empty settings file for dracut
7c69f2c2 237 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
bcf38aec
MT
238 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
239 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
802ea3af 240
bcf38aec
MT
241 # And now the scary looking part.
242 #
243 # Recreate source and build links.
7c69f2c2
MT
244 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
245 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
246 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
802ea3af 247
bcf38aec 248 # Create dirs for extra modules.
7c69f2c2 249 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
802ea3af 250
7c69f2c2 251 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
c4ef5c45 252 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 253 cp Module.symvers System.map \
c4ef5c45 254 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 255 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
bcf38aec 256
7c69f2c2
MT
257 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
258 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
c4ef5c45 259 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
bcf38aec
MT
260 -exec rm -vf {} \;
261
7c69f2c2 262 cp -a --parents arch/%{kernel_arch}/include \
c4ef5c45 263 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 264 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
bcf38aec
MT
265
266 # Make sure we can build external modules.
c4ef5c45
MT
267 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
268 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
269 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
270 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
7c69f2c2 271 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
c4ef5c45
MT
272 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
273
274 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
bf6ee3f7 275 xargs --no-run-if-empty chmod u+x
bcf38aec 276
bcf38aec 277 # Move all development files to /usr/src.
7c69f2c2
MT
278 mkdir -p %{BUILDROOT}/usr/src/kernels
279 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
bcf38aec 280 %{BUILDROOT}/usr/src/kernels/${fullversion}
7c69f2c2 281 ln -sf ../../../src/kernels/${fullversion} \
c4ef5c45 282 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
bcf38aec 283
81bb0557
MT
284 # Fix permissions.
285 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
286 -exec chmod 644 {} \;
287
bcf38aec
MT
288 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
289 }
290
291 for kernel in %{kernels}; do
292 build_kernel ${kernel}
293 done
6e9df6a3
MT
294
295 # Build tools.
302e8df8
MT
296 # perf
297 %{perf_make} DESTDIR=%{BUILDROOT} all
298
6e9df6a3 299 # cpupower
7c69f2c2
MT
300 chmod +x tools/power/cpupower/utils/version-gen.sh
301 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
302
303 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
304 pushd tools/power/cpupower/debug/x86_64
302e8df8 305 make %{MAKETUNING} centrino-decode powernow-k8-decode
7c69f2c2
MT
306 popd
307 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
308 pushd tools/power/cpupower/debug/i386
302e8df8 309 make %{MAKETUNING} centrino-decode powernow-k8-decode
7c69f2c2 310 popd
45088e83 311 fi
302e8df8
MT
312
313 # Should be built for all x86 architectures
314 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
315 # Won't compile on i686
316 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
317 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
318 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
319 # ^
320 pushd tools/power/x86/x86_energy_perf_policy
321 make
322 popd
323
324 # Same as above
325 pushd tools/power/x86/turbostat
326 make
327 popd
328 fi
329
330 pushd tools/thermal/tmon
331 make
332 popd
bcf38aec
MT
333 end
334
335 install
4c928ab7
MT
336 # When no kernels are configured, we create a default config
337 # which enables us to install at least the header files.
338 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
339
802ea3af 340 # Install the header files
c8f122e5 341 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
342 mkdir -pv %{BUILDROOT}/usr/include
343 find dest/include \( -name .install -o -name ..install.cmd \) -delete
344 cp -rv dest/include/* %{BUILDROOT}/usr/include
345
346 # Glibc provides these headers
347 rm -rfv %{BUILDROOT}/usr/include/scsi \
348 %{BUILDROOT}/usr/include/asm*/atomic.h \
349 %{BUILDROOT}/usr/include/asm*/io.h \
350 %{BUILDROOT}/usr/include/asm*/irq.h
351
15a11c5b
MT
352 # Remove all firmware files which are distributed by linux-firmware
353 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
354
355 # Install tools.
302e8df8 356 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
6e9df6a3
MT
357
358 # cpupower
7c69f2c2
MT
359 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
360 mandir=%{mandir} CPUFREQ_BENCH=false install
361
362 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
363 pushd tools/power/cpupower/debug/x86_64
364 install -m 755 centrino-decode \
365 %{BUILDROOT}/usr/bin/centrino-decode
366 install -m 755 powernow-k8-decode \
367 %{BUILDROOT}/usr/bin/powernow-k8-decode
368 popd
369 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
370 pushd tools/power/cpupower/debug/i386
371 install -m 755 centrino-decode \
372 %{BUILDROOT}/usr/bin/centrino-decode
373 install -m 755 powernow-k8-decode \
374 %{BUILDROOT}/usr/bin/powernow-k8-decode
375 popd
45088e83 376 fi
7c69f2c2
MT
377
378 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
302e8df8
MT
379
380 # This should be built for all x86 architectures
381 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
382 mkdir -pv %{BUILDROOT}%{mandir}/man8
383
384 pushd tools/power/x86/x86_energy_perf_policy
385 make DESTDIR=%{BUILDROOT} install
386 popd
387
388 pushd tools/power/x86/turbostat
389 make DESTDIR=%{BUILDROOT} install
390 popd
391 fi
392
393 # tmon
394 pushd tools/thermal/tmon
395 make INSTALL_ROOT=%{BUILDROOT} install
396 popd
802ea3af
MT
397 end
398end
399
400packages
bcf38aec 401 template KERNEL
aa3ab846 402 kernel_name = kernel
bcf38aec
MT
403 kernel_release = %{fullver}
404
405 summary = The Linux kernel %{kernel_release}.
406
1c9b6c79 407 prerequires
4c928ab7 408 /sbin/depmod
1c9b6c79
MT
409 end
410
411 provides
412 kernel=%{kernel_release}
413 end
414
802ea3af 415 requires
4c928ab7
MT
416 dracut
417 grubby
802ea3af
MT
418 linux-firmware
419 end
ad1ea534 420
bcf38aec
MT
421 files
422 /boot/System.map-%{kernel_release}
9d4be168 423 /boot/dtb-%{kernel_release}
bcf38aec
MT
424 /boot/vmlinuz-%{kernel_release}
425 /boot/initramfs-%{kernel_release}.img
426 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
c4ef5c45 427 /usr/lib/modules/%{kernel_release}
bcf38aec
MT
428 end
429
aa3ab846 430 _posttrans
c8f9fe35
MT
431 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
432 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
aa3ab846
MT
433 end
434
ad1ea534 435 script posttransin
aa3ab846
MT
436 %{_posttrans}
437 end
438
439 script posttransup
440 %{_posttrans}
441 end
442
443 script postin
c8f9fe35 444 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
aa3ab846
MT
445 end
446
447 script postup
448 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
449 end
450
451 script preun
452 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
bcf38aec
MT
453 end
454 end
455
456 template KERNELDEVEL
457 kernel_release = %{fullver}
458
459 summary = Development files of kernel-%{kernel_release}.
460 description
461 %{summary}
462
463 Install this package in order to compile modules for
464 kernel release %{kernel_release}.
465 end
466
10756fd5
MT
467 provides
468 kernel-devel = %{thisver}
469 end
470
bcf38aec
MT
471 filter_requires
472 perl>=[0-9]\:.*
ad1ea534
MT
473 end
474
bcf38aec 475 files
c4ef5c45
MT
476 /usr/lib/modules/%{kernel_release}/build
477 /usr/lib/modules/%{kernel_release}/source
bcf38aec 478 /usr/src/kernels/%{kernel_release}
ad1ea534 479 end
802ea3af 480 end
bcf38aec 481
45088e83 482 if "%{build_kernel_default}" == "1"
7f6f4de5
MT
483 if "%{DISTRO_ARCH}" == "armv7hl"
484 package kernel
485 template KERNEL
58dc2060 486
7f6f4de5
MT
487 kernel_name = kernel
488 kernel_release = %{fullver}
bcf38aec 489
0db4b328
MT
490 # Replace the Exynos kernel.
491 obsoletes += kernel-exynos < %{kernel_release}
492 conflicts += kernel-exynos < %{kernel_release}
493
7f6f4de5
MT
494 # Replace the OMAP kernel.
495 obsoletes += kernel-omap < %{kernel_release}
496 conflicts += kernel-omap < %{kernel_release}
497 end
498
499 package kernel-devel
500 template KERNELDEVEL
501
502 kernel_name = kernel
503 kernel_release = %{fullver}
504
0db4b328
MT
505 # Replace the Exynos kernel.
506 obsoletes += kernel-exynos-devel < %{kernel_release}
507 conflicts += kernel-exynos-devel < %{kernel_release}
508
7f6f4de5
MT
509 # Replace the OMAP kernel.
510 obsoletes += kernel-omap-devel < %{kernel_release}
511 conflicts += kernel-omap-devel < %{kernel_release}
512 end
58dc2060 513
7f6f4de5
MT
514 else
515 package kernel
516 template KERNEL
517
518 kernel_name = kernel
519 kernel_release = %{fullver}
520 end
521
522 package kernel-devel
523 template KERNELDEVEL
524
525 kernel_name = kernel
526 kernel_release = %{fullver}
527 end
45088e83 528 end
bcf38aec 529 end
81bb0557 530
1c9b6c79
MT
531 if "%{build_kernel_legacy}" == "1"
532 package kernel-legacy
45088e83 533 template KERNEL
bcf38aec 534
1c9b6c79
MT
535 kernel_name = kernel-legacy
536 kernel_release = %{fullver}.legacy
45088e83
MT
537 end
538
1c9b6c79 539 package kernel-legacy-devel
45088e83
MT
540 template KERNELDEVEL
541
1c9b6c79
MT
542 kernel_name = kernel-legacy
543 kernel_release = %{fullver}.legacy
45088e83 544 end
bcf38aec
MT
545 end
546
802ea3af 547 package kernel-headers
802ea3af
MT
548 summary = Header files of the kernel release %{fullver}.
549 desciption = %{summary}
c698e4be
MT
550
551 files
552 /usr/include
553 end
802ea3af 554 end
bcf38aec 555
ebeed08a
MT
556 package kernel-tools
557 summary = Assortment of tools for the Linux kernel.
558 description = %{summary}
559
560 filter_requires
561 perl>=[0-9]\:.*
562 end
563
564 files
565 /
566 !/boot
ebeed08a 567 !/usr/include
c4ef5c45 568 !/usr/lib/modules
ebeed08a 569 !/usr/src
fe2de317
MT
570 !/usr/src/debug
571 !/usr/lib/debug
ebeed08a
MT
572 end
573 end
802ea3af 574end