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