]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame - kernel/kernel.nm
Merge remote-tracking branch 'stevee/asciidoc'
[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
fe2de317 7version = 3.1.5
1c9b6c79 8release = 3
15a11c5b 9thisapp = linux-%{version}
166a6c21 10
802ea3af
MT
11maintainer = Michael Tremer <michael.tremer@ipfire.org>
12groups = System/Kernels
13url = http://www.kernel.org/
14license = GPLv2
15summary = The Linux kernel.
166a6c21 16
802ea3af 17description
166a6c21
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 \
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
fe014038
MT
28source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/
29sources = %{thisapp}.tar.xz
802ea3af
MT
30
31build
ebeed08a
MT
32 # icecream cannot be used to compile the kernel.
33 # Because the PaX patch does use GCC plugins to harden the kernel which
34 # are not available on the remote compilers, we need to disable it here.
35 export ICECC=no
36
802ea3af 37 requires
bcf38aec
MT
38 binutils-devel
39 elfutils-devel
fe2de317 40 gcc-plugin-devel
6e9df6a3 41 gettext
802ea3af
MT
42 module-init-tools
43 ncurses-devel
ebeed08a 44 net-tools
802ea3af 45 perl
bcf38aec
MT
46 python-devel
47 xz-lzma-compat
48 end
49
13c9d848
MT
50 tools_cpupower_requires
51 newt-devel
fe2de317 52 pciutils-devel
13c9d848
MT
53 slang-devel
54 end
55
bcf38aec 56 # A list of kernels to build.
45088e83 57 kernels =
bcf38aec 58
45088e83
MT
59 # Should we build cpupower?
60 build_cpupower = 1
61
62 kernel_target = bzImage
bcf38aec 63 if "%{DISTRO_ARCH}" == "i686"
1c9b6c79 64 # Build a default and legacy kernel for the
45088e83
MT
65 # i686 architecture.
66 build_kernel_default = 1
1c9b6c79 67 build_kernel_legacy = 1
bcf38aec
MT
68
69 kernel_arch = x86
70 kernel_image = arch/%{kernel_arch}/boot/bzImage
45088e83
MT
71
72 end
73
c112b2e3
MT
74 if "%{DISTRO_ARCH}" == "x86_64"
75 build_kernel_default = 1
76
77 kernel_arch = x86
78 kernel_image = arch/%{kernel_arch}/boot/bzImage
79 end
80
45088e83
MT
81 if "%{DISTRO_ARCH}" == "armv5tel"
82 # Build versatile kernel.
83 build_kernel_versatile = 1
84
85 kernel_arch = arm
86 kernel_image = arch/%{kernel_arch}/boot/zImage
87
88 # ARM does not support cpupower.
89 build_cpupower = 0
90 end
91
13c9d848
MT
92 if "%{DISTRO_ARCH}" == "armv7hl"
93 # Currently build no kernel images.
94
95 kernel_arch = arm
96
97 # ARM does not support cpupower.
98 build_cpupower = 0
99 end
100
45088e83
MT
101 # Build default kernel.
102 if "%{build_kernel_default}" == "1"
103 kernels += default
104 end
105
1c9b6c79
MT
106 # Build legacy kernel.
107 if "%{build_kernel_legacy}" == "1"
108 kernels += legacy
45088e83
MT
109 end
110
111 # Build ARM versatile kernel.
112 if "%{build_kernel_versatile}" == "1"
113 kernels += versatile
802ea3af
MT
114 end
115
13c9d848
MT
116 # Add tools' build requirements if build is requested.
117 if "%{build_cpupower}" == "1"
118 requires += %{tools_cpupower_requires}
119 end
120
802ea3af 121 prepare_cmds
802ea3af
MT
122 rm -f %{DIR_APP}/localversion-grsec
123
124 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
125
126 cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \
127 drivers/video/logo/logo_linux_clut224.ppm
128
bcf38aec
MT
129 # Get rid of unwanted files resulting from patch fuzz.
130 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
131
132 # Remove unnecessary SCM files.
133 find . -name .gitignore -exec rm -f {} \; >/dev/null
134
ebeed08a
MT
135 # This prevents scripts/setlocalversion from mucking with our version numbers.
136 touch .scmversion
137
bcf38aec
MT
138 mkdir -pv configs
139 configure_kernel() {
140 local flavour=${1}
141 local suffix
142 if [ "${flavour}" != "default" ]; then
143 suffix="-${flavour}"
144 fi
145
146 # This is the place, where the configuration files
147 # should be dynamically generated.
148 # For now, we just copy pregenerated ones.
149 cp %{DIR_SOURCE}/config.%{arch}${suffix} .config
802ea3af 150
bcf38aec
MT
151 make ARCH=%{kernel_arch} oldnoconfig
152 mv .config configs/config.${flavour}
153 }
154
155 # Generate configuration files for all kernels we are going to
156 # build.
157 for kernel in %{kernels}; do
158 configure_kernel ${kernel}
159 done
802ea3af
MT
160 end
161
162 build
bcf38aec
MT
163 build_kernel() {
164 local flavour=${1}
165 local suffix
166 local localversion="%{localversion}"
167 local fullversion="%{fullver}"
168 if [ "${flavour}" != "default" ]; then
169 suffix="-${flavour}"
170 localversion="${localversion}.${flavour}"
171 fullversion="${fullversion}.${flavour}"
172 fi
802ea3af 173
ebeed08a
MT
174 # Label the build.
175 sed -i Makefile \
176 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
177
bcf38aec
MT
178 # Clean up the source tree.
179 make mrproper
802ea3af 180
bcf38aec
MT
181 # Install configuration file.
182 cp configs/config.${flavour} .config
802ea3af 183
bcf38aec 184 # Run the build.
ebeed08a 185 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
bcf38aec
MT
186 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules %{PARALLELISMFLAGS}
187
188 # Install the results.
189 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion}
190 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
191 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
192 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
193
194 # Create empty initramfs (20M).
195 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
196
197 # Install modules.
198 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \
199 KERNELRELEASE=${fullversion} modules_install
c8f122e5
MT
200
201 # Install vdso.
202 case "%{DISTRO_ARCH}" in
203 i686)
204 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
205 KERNELRELEASE=${fullversion} vdso_install
206 ;;
207 esac
802ea3af 208
bcf38aec
MT
209 # Create an empty settings file for dracut
210 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
211 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
212 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
802ea3af 213
bcf38aec
MT
214 # And now the scary looking part.
215 #
216 # Recreate source and build links.
217 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
218 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
219 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
802ea3af 220
bcf38aec
MT
221 # Create dirs for extra modules.
222 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
802ea3af 223
bcf38aec
MT
224 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
225 %{BUILDROOT}/lib/modules/${fullversion}/build
226 cp -v Module.symvers System.map \
227 %{BUILDROOT}/lib/modules/${fullversion}/build
228 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
229
230 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
231 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
232 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
233 -exec rm -vf {} \;
234
235 cp -va --parents arch/%{kernel_arch}/include \
236 %{BUILDROOT}/lib/modules/${fullversion}/build
237 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
238
239 # Make sure we can build external modules.
240 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
241 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
242 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
243 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
244 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
245 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
246
247 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
248 xargs chmod u+x
249
bcf38aec
MT
250 # Move all development files to /usr/src.
251 mkdir -pv %{BUILDROOT}/usr/src/kernels
252 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
253 %{BUILDROOT}/usr/src/kernels/${fullversion}
254 ln -svf ../../../usr/src/kernels/${fullversion} \
255 %{BUILDROOT}/lib/modules/${fullversion}/build
256
257 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
258 }
259
260 for kernel in %{kernels}; do
261 build_kernel ${kernel}
262 done
6e9df6a3
MT
263
264 # Build tools.
265 # cpupower
45088e83
MT
266 if [ "%{build_cpupower}" = "1" ]; then
267 chmod +x tools/power/cpupower/utils/version-gen.sh
268 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
269
270 cd tools/power/cpupower/debug/i386
271 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
272 cd -
273 fi
bcf38aec
MT
274 end
275
276 install
802ea3af 277 # Install the header files
c8f122e5 278 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
279 mkdir -pv %{BUILDROOT}/usr/include
280 find dest/include \( -name .install -o -name ..install.cmd \) -delete
281 cp -rv dest/include/* %{BUILDROOT}/usr/include
282
283 # Glibc provides these headers
284 rm -rfv %{BUILDROOT}/usr/include/scsi \
285 %{BUILDROOT}/usr/include/asm*/atomic.h \
286 %{BUILDROOT}/usr/include/asm*/io.h \
287 %{BUILDROOT}/usr/include/asm*/irq.h
288
15a11c5b
MT
289 # Remove all firmware files which are distributed by linux-firmware
290 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
291
292 # Install tools.
ebeed08a
MT
293 # XXX Man pages cannot be created because they need asciidoc.
294 make -C tools/perf DESTDIR=%{BUILDROOT} \
295 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
296 install #install-man
6e9df6a3
MT
297
298 # cpupower
45088e83 299 if [ "%{build_cpupower}" = "1" ]; then
c2c61882
MT
300 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
301 mandir=%{mandir} CPUFREQ_BENCH=false install
45088e83
MT
302 cd tools/power/cpupower/debug/i386
303 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
304 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
305 cd -
c2c61882 306 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
45088e83 307 fi
802ea3af
MT
308 end
309end
310
311packages
bcf38aec 312 template KERNEL
aa3ab846 313 kernel_name = kernel
bcf38aec
MT
314 kernel_release = %{fullver}
315
316 summary = The Linux kernel %{kernel_release}.
317
1c9b6c79
MT
318 prerequires
319 dracut
320 grubby
321 module-init-tools
322 end
323
324 provides
325 kernel=%{kernel_release}
326 end
327
802ea3af 328 requires
670864d7 329 %{prerequires}
802ea3af
MT
330 linux-firmware
331 end
ad1ea534 332
bcf38aec
MT
333 files
334 /boot/System.map-%{kernel_release}
335 /boot/vmlinuz-%{kernel_release}
336 /boot/initramfs-%{kernel_release}.img
337 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
338 /lib/modules/%{kernel_release}
339 end
340
aa3ab846
MT
341 _posttrans
342 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release} || exit $?
343 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release} || exit $?
344 end
345
ad1ea534 346 script posttransin
aa3ab846
MT
347 %{_posttrans}
348 end
349
350 script posttransup
351 %{_posttrans}
352 end
353
354 script postin
355 /sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --install %{KVERREL}%{?-v:.%{-v*}}
356 end
357
358 script postup
359 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
360 end
361
362 script preun
363 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
bcf38aec
MT
364 end
365 end
366
367 template KERNELDEVEL
368 kernel_release = %{fullver}
369
370 summary = Development files of kernel-%{kernel_release}.
371 description
372 %{summary}
373
374 Install this package in order to compile modules for
375 kernel release %{kernel_release}.
376 end
377
378 filter_requires
379 perl>=[0-9]\:.*
ad1ea534
MT
380 end
381
bcf38aec
MT
382 files
383 /lib/modules/%{kernel_release}/build
384 /lib/modules/%{kernel_release}/source
385 /usr/src/kernels/%{kernel_release}
ad1ea534 386 end
802ea3af 387 end
bcf38aec 388
45088e83
MT
389 if "%{build_kernel_default}" == "1"
390 package kernel
391 template KERNEL
58dc2060 392
45088e83
MT
393 kernel_name = kernel
394 kernel_release = %{fullver}
395 end
bcf38aec 396
45088e83
MT
397 package kernel-devel
398 template KERNELDEVEL
58dc2060 399
45088e83
MT
400 kernel_name = kernel
401 kernel_release = %{fullver}
402 end
bcf38aec
MT
403 end
404
1c9b6c79
MT
405 if "%{build_kernel_legacy}" == "1"
406 package kernel-legacy
45088e83 407 template KERNEL
bcf38aec 408
1c9b6c79
MT
409 kernel_name = kernel-legacy
410 kernel_release = %{fullver}.legacy
45088e83
MT
411 end
412
1c9b6c79 413 package kernel-legacy-devel
45088e83
MT
414 template KERNELDEVEL
415
1c9b6c79
MT
416 kernel_name = kernel-legacy
417 kernel_release = %{fullver}.legacy
45088e83 418 end
bcf38aec
MT
419 end
420
45088e83
MT
421 if "%{build_kernel_versatile}" == "1"
422 package kernel-versatile
423 template KERNEL
bcf38aec 424
45088e83
MT
425 kernel_name = kernel-versatile
426 kernel_release = %{fullver}.versatile
427 end
428
429 package kernel-versatile-devel
430 kernel KERNELDEVEL
431
432 kernel_name = kernel-versatile
433 kernel_release = %{fullver}.versatile
434 end
bcf38aec 435 end
ebeed08a 436
802ea3af 437 package kernel-headers
802ea3af
MT
438 summary = Header files of the kernel release %{fullver}.
439 desciption = %{summary}
c698e4be
MT
440
441 files
442 /usr/include
443 end
802ea3af 444 end
bcf38aec 445
ebeed08a
MT
446 package kernel-tools
447 summary = Assortment of tools for the Linux kernel.
448 description = %{summary}
449
450 filter_requires
451 perl>=[0-9]\:.*
452 end
453
454 files
455 /
456 !/boot
457 !/lib/modules
458 !/usr/include
459 !/usr/src
fe2de317
MT
460 !/usr/src/debug
461 !/usr/lib/debug
ebeed08a
MT
462 end
463 end
802ea3af 464end