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