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