]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame - kernel/kernel.nm
gcc: Make package read for ARM architecture.
[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
bcf38aec 44 newt-devel
6e9df6a3 45 pciutils-devel
802ea3af 46 perl
bcf38aec 47 python-devel
ebeed08a 48 slang-devel
bcf38aec
MT
49 xz-lzma-compat
50 end
51
52 # A list of kernels to build.
45088e83 53 kernels =
bcf38aec 54
45088e83
MT
55 # Should we build cpupower?
56 build_cpupower = 1
57
58 kernel_target = bzImage
bcf38aec 59 if "%{DISTRO_ARCH}" == "i686"
45088e83
MT
60 # Build a default and PAE-enabled kernel for the
61 # i686 architecture.
62 build_kernel_default = 1
63 build_kernel_pae = 1
bcf38aec
MT
64
65 kernel_arch = x86
66 kernel_image = arch/%{kernel_arch}/boot/bzImage
45088e83
MT
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
802ea3af
MT
94 end
95
96 prepare_cmds
802ea3af
MT
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
bcf38aec
MT
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
ebeed08a
MT
110 # This prevents scripts/setlocalversion from mucking with our version numbers.
111 touch .scmversion
112
bcf38aec
MT
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
802ea3af 125
bcf38aec
MT
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
802ea3af
MT
135 end
136
137 build
bcf38aec
MT
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
802ea3af 148
ebeed08a
MT
149 # Label the build.
150 sed -i Makefile \
151 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
152
bcf38aec
MT
153 # Clean up the source tree.
154 make mrproper
802ea3af 155
bcf38aec
MT
156 # Install configuration file.
157 cp configs/config.${flavour} .config
802ea3af 158
bcf38aec 159 # Run the build.
ebeed08a 160 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
bcf38aec
MT
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
c8f122e5
MT
175
176 # Install vdso.
177 case "%{DISTRO_ARCH}" in
178 i686)
179 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
180 KERNELRELEASE=${fullversion} vdso_install
181 ;;
182 esac
802ea3af 183
bcf38aec
MT
184 # Create an empty settings file for dracut
185 mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d
186 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
187 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
802ea3af 188
bcf38aec
MT
189 # And now the scary looking part.
190 #
191 # Recreate source and build links.
192 rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source}
193 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build
194 ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source
802ea3af 195
bcf38aec
MT
196 # Create dirs for extra modules.
197 mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra
802ea3af 198
bcf38aec
MT
199 cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
200 %{BUILDROOT}/lib/modules/${fullversion}/build
201 cp -v Module.symvers System.map \
202 %{BUILDROOT}/lib/modules/${fullversion}/build
203 rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include}
204
205 cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build
206 cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build
207 find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \
208 -exec rm -vf {} \;
209
210 cp -va --parents arch/%{kernel_arch}/include \
211 %{BUILDROOT}/lib/modules/${fullversion}/build
212 cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include
213
214 # Make sure we can build external modules.
215 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \
216 %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h
217 touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
218 %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h
219 cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \
220 %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf
221
222 find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \
223 xargs chmod u+x
224
bcf38aec
MT
225 # Move all development files to /usr/src.
226 mkdir -pv %{BUILDROOT}/usr/src/kernels
227 mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \
228 %{BUILDROOT}/usr/src/kernels/${fullversion}
229 ln -svf ../../../usr/src/kernels/${fullversion} \
230 %{BUILDROOT}/lib/modules/${fullversion}/build
231
232 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
233 }
234
235 for kernel in %{kernels}; do
236 build_kernel ${kernel}
237 done
6e9df6a3
MT
238
239 # Build tools.
240 # cpupower
45088e83
MT
241 if [ "%{build_cpupower}" = "1" ]; then
242 chmod +x tools/power/cpupower/utils/version-gen.sh
243 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
244
245 cd tools/power/cpupower/debug/i386
246 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode
247 cd -
248 fi
bcf38aec
MT
249 end
250
251 install
802ea3af 252 # Install the header files
c8f122e5 253 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
254 mkdir -pv %{BUILDROOT}/usr/include
255 find dest/include \( -name .install -o -name ..install.cmd \) -delete
256 cp -rv dest/include/* %{BUILDROOT}/usr/include
257
258 # Glibc provides these headers
259 rm -rfv %{BUILDROOT}/usr/include/scsi \
260 %{BUILDROOT}/usr/include/asm*/atomic.h \
261 %{BUILDROOT}/usr/include/asm*/io.h \
262 %{BUILDROOT}/usr/include/asm*/irq.h
263
15a11c5b
MT
264 # Remove all firmware files which are distributed by linux-firmware
265 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
266
267 # Install tools.
ebeed08a
MT
268 # XXX Man pages cannot be created because they need asciidoc.
269 make -C tools/perf DESTDIR=%{BUILDROOT} \
270 HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \
271 install #install-man
6e9df6a3
MT
272
273 # cpupower
45088e83
MT
274 if [ "%{build_cpupower}" = "1" ]; then
275 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=/usr/lib \
276 mandir=/usr/share/man CPUFREQ_BENCH=false install
277 cd tools/power/cpupower/debug/i386
278 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode
279 install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode
280 cd -
281 chmod 0755 %{BUILDROOT}/usr/lib/libcpupower.so*
282 fi
802ea3af
MT
283 end
284end
285
286packages
bcf38aec 287 template KERNEL
aa3ab846 288 kernel_name = kernel
bcf38aec
MT
289 kernel_release = %{fullver}
290
291 summary = The Linux kernel %{kernel_release}.
292
aa3ab846 293 prerequires = dracut grubby module-init-tools
85cfb674 294 provides = kernel=%{kernel_release}
802ea3af 295 requires
670864d7 296 %{prerequires}
802ea3af
MT
297 linux-firmware
298 end
ad1ea534 299
bcf38aec
MT
300 files
301 /boot/System.map-%{kernel_release}
302 /boot/vmlinuz-%{kernel_release}
303 /boot/initramfs-%{kernel_release}.img
304 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
305 /lib/modules/%{kernel_release}
306 end
307
aa3ab846
MT
308 _posttrans
309 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release} || exit $?
310 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release} || exit $?
311 end
312
ad1ea534 313 script posttransin
aa3ab846
MT
314 %{_posttrans}
315 end
316
317 script posttransup
318 %{_posttrans}
319 end
320
321 script postin
322 /sbin/new-kernel-pkg --package kernel%{?-v:-%{-v*}} --install %{KVERREL}%{?-v:.%{-v*}}
323 end
324
325 script postup
326 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
327 end
328
329 script preun
330 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
bcf38aec
MT
331 end
332 end
333
334 template KERNELDEVEL
335 kernel_release = %{fullver}
336
337 summary = Development files of kernel-%{kernel_release}.
338 description
339 %{summary}
340
341 Install this package in order to compile modules for
342 kernel release %{kernel_release}.
343 end
344
345 filter_requires
346 perl>=[0-9]\:.*
ad1ea534
MT
347 end
348
bcf38aec
MT
349 files
350 /lib/modules/%{kernel_release}/build
351 /lib/modules/%{kernel_release}/source
352 /usr/src/kernels/%{kernel_release}
ad1ea534 353 end
802ea3af 354 end
bcf38aec 355
45088e83
MT
356 if "%{build_kernel_default}" == "1"
357 package kernel
358 template KERNEL
58dc2060 359
45088e83
MT
360 kernel_name = kernel
361 kernel_release = %{fullver}
362 end
bcf38aec 363
45088e83
MT
364 package kernel-devel
365 template KERNELDEVEL
58dc2060 366
45088e83
MT
367 kernel_name = kernel
368 kernel_release = %{fullver}
369 end
bcf38aec
MT
370 end
371
45088e83
MT
372 if "%{build_kernel_pae}" == "1"
373 package kernel-PAE
374 template KERNEL
bcf38aec 375
45088e83
MT
376 kernel_name = kernel-PAE
377 kernel_release = %{fullver}.PAE
378 end
379
380 package kernel-PAE-devel
381 template KERNELDEVEL
382
383 kernel_name = kernel-PAE
384 kernel_release = %{fullver}.PAE
385 end
bcf38aec
MT
386 end
387
45088e83
MT
388 if "%{build_kernel_versatile}" == "1"
389 package kernel-versatile
390 template KERNEL
bcf38aec 391
45088e83
MT
392 kernel_name = kernel-versatile
393 kernel_release = %{fullver}.versatile
394 end
395
396 package kernel-versatile-devel
397 kernel KERNELDEVEL
398
399 kernel_name = kernel-versatile
400 kernel_release = %{fullver}.versatile
401 end
bcf38aec 402 end
ebeed08a 403
802ea3af 404 package kernel-headers
802ea3af
MT
405 summary = Header files of the kernel release %{fullver}.
406 desciption = %{summary}
c698e4be
MT
407
408 files
409 /usr/include
410 end
802ea3af 411 end
bcf38aec 412
ebeed08a
MT
413 package kernel-tools
414 summary = Assortment of tools for the Linux kernel.
415 description = %{summary}
416
417 filter_requires
418 perl>=[0-9]\:.*
419 end
420
421 files
422 /
423 !/boot
424 !/lib/modules
425 !/usr/include
426 !/usr/src
427 end
428 end
802ea3af 429end