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