packaging: tizen: arm: install device trees
[profile/ivi/kernel-x86-ivi.git] / packaging / kernel-common.spec
1 #
2 # Spec written for Tizen Mobile, some bits and pieces originate
3 # from MeeGo/Moblin/Fedora
4 #
5
6 %define upstream_version 3.14.14
7
8 %if !%{defined platform}
9 %define platform default
10 %endif
11
12 %define variant %{profile}-%{_arch}-%{platform}
13 %define kernel_version %{version}-%{release}
14 %define kernel_full_version %{version}-%{release}-%{variant}
15 %define arch_32bits i386 i586 i686 %{ix86}
16
17 # Default arch config for tizen per arch (unless overiden after)
18 %define kernel_image bzImage
19 %define defconfig tizen_defconfig
20
21 %define dtbs_supported 0
22 %define modules_supported 1
23 %define trace_supported 1
24 %define uboot_supported 0
25 %define vdso_supported 1
26
27
28 # Overide per configuration
29
30 %ifarch %{arch_32bits}
31 %define kernel_arch i386
32 %define kernel_arch_subdir arch/x86
33 %define defconfig %{profile}_x86_defconfig
34 %endif
35
36 %ifarch x86_64
37 %define kernel_arch x86_64
38 %define kernel_arch_subdir arch/x86
39 %define defconfig %{profile}_%{kernel_arch}_defconfig
40 %endif
41
42 %ifarch %arm
43 %define kernel_arch arm
44 %define kernel_arch_subdir arch/%{kernel_arch}
45 %define kernel_image zImage
46 %define vdso_supported 0
47 %define modules_supported 0
48 %endif
49
50
51 Name: kernel-common
52 Summary: Tizen kernel
53 Group: System/Kernel
54 License: GPL-2.0
55 URL: http://www.kernel.org/
56 Version: %{upstream_version}
57
58 # The below is used when we are on an -rc version
59 #%#define rc_num 6
60 #%#define release_ver 0
61 #%#define rc_str %{?rc_num:0.rc%{rc_num}}%{!?rc_num:1}
62 #%if ! 0%{?opensuse_bs}
63 #Release: %{rc_str}.%{release_ver}.0.0
64 #%else
65 #Release: %{rc_str}.%{release_ver}.<CI_CNT>.<B_CNT>
66 #%endif
67 Release: 0
68
69 BuildRequires: module-init-tools
70 BuildRequires: findutils
71 BuildRequires: libelf-devel
72 BuildRequires: binutils-devel
73 BuildRequires: which
74 BuildRequires: bc
75 # net-tools provides the 'hostname' utility which kernel build wants
76 BuildRequires: net-tools
77 # The below is required for building perf
78 BuildRequires: flex
79 BuildRequires: bison
80 BuildRequires: libdw-devel
81 BuildRequires: python-devel
82 %if %{uboot_supported}
83 BuildRequires: u-boot-tools
84 %endif
85
86 ExclusiveArch: %{arch_32bits} x86_64 armv7l
87
88 Source0: %{name}-%{version}.tar.bz2
89
90 %description
91 This package contains the Linux kernel for Tizen.
92
93
94 %package -n kernel-%{variant}
95 Summary: Tizen kernel
96 Group: System/Kernel
97 Provides: kernel-profile-%{profile} = %{version}-%{release}
98 Provides: kernel-uname-r = %{kernel_full_version}
99 Requires(post): /usr/bin/ln
100 Requires(post): /usr/bin/sort
101 Requires(post): rpm
102
103 Requires(post): /usr/sbin/depmod
104 Requires(post): /usr/bin/dracut
105 Requires(post): /usr/bin/kmod
106
107 Requires(postun): /usr/bin/ln
108 Requires(postun): /usr/bin/sed
109 Requires(postun): rpm
110
111 # We can't let RPM do the dependencies automatic because it'll then pick up
112 # a correct but undesirable perl dependency from the module headers which
113 # isn't required for the kernel proper to function
114 AutoReq: no
115 AutoProv: yes
116
117 %description -n kernel-%{variant}
118 This package contains the Linux kernel for Tizen (%{profile} profile, architecure %{_arch})
119
120 %package -n kernel-%{variant}-devel
121 Summary: Development package for building kernel modules
122 Group: Development/System
123 Provides: kernel-devel = %{kernel_full_version}
124 Provides: kernel-devel-uname-r = %{kernel_full_version}
125 Requires(post): /usr/bin/find
126 Requires: %{name} = %{version}-%{release}
127 AutoReqProv: no
128
129 %description -n kernel-%{variant}-devel
130 This package provides kernel headers and makefiles sufficient to build modules
131 against the %{variant} kernel package.
132
133
134 %package -n perf
135 Summary: The 'perf' performance counter tool
136 Group: System/Kernel
137 Provides: perf = %{kernel_full_version}
138 Requires: %{name} = %{version}-%{release}
139
140 %description -n perf
141 This package provides the "perf" tool that can be used to monitor performance
142 counter events as well as various kernel internal events.
143
144
145
146 ###
147 ### PREP
148 ###
149 %prep
150 # Unpack the kernel tarball
151 %setup -q -n %{name}-%{version}
152
153
154
155 ###
156 ### BUILD
157 ###
158 %build
159 # Make sure EXTRAVERSION says what we want it to say
160 sed -i "s/^EXTRAVERSION.*/EXTRAVERSION = -%{release}-%{variant}/" Makefile
161
162 # Build perf
163 make -s -C tools/lib/traceevent ARCH=%{kernel_arch} %{?_smp_mflags}
164 make -s -C tools/perf WERROR=0 ARCH=%{kernel_arch}
165
166 %if %{defined loadaddr}
167 export LOADADDR=%{loadaddr}
168 %endif
169
170 # Build kernel and modules
171 make -s ARCH=%{kernel_arch} %{defconfig}
172 make %{?_smp_mflags} %{kernel_image} ARCH=%{kernel_arch}
173
174 %if %modules_supported
175 make -s ARCH=%{kernel_arch} %{?_smp_mflags} modules
176 %endif
177
178 %if %dtbs_supported
179 make -s ARCH=%{kernel_arch} %{?_smp_mflags} dtbs
180 %endif
181
182
183
184 ###
185 ### INSTALL
186 ###
187 %install
188 install -d %{buildroot}/boot
189
190 install -m 644 .config %{buildroot}/boot/config-%{kernel_full_version}
191 install -m 644 System.map %{buildroot}/boot/System.map-%{kernel_full_version}
192 install -m 755 %{kernel_arch_subdir}/boot/%{kernel_image} %{buildroot}/boot/vmlinuz-%{kernel_full_version}
193 # Dummy initrd, will not be included in the actual package but needed for files
194 touch %{buildroot}/boot/initrd-%{kernel_full_version}.img
195
196 %if %modules_supported
197 make -s ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{buildroot} modules_install KERNELRELEASE=%{kernel_full_version}
198 %endif
199
200 %if %vdso_supported
201 make -s ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{buildroot} vdso_install KERNELRELEASE=%{kernel_full_version}
202 %endif
203
204 %if %dtbs_supported
205 install -d "%{buildroot}/boot/"
206 find "arch/%{kernel_arch}/" -iname "*.dtb" -exec install "{}" "%{buildroot}/boot/" \;
207 %endif
208
209 rm -rf %{buildroot}/lib/firmware
210
211 # And save the headers/makefiles etc for building modules against
212 #
213 # This all looks scary, but the end result is supposed to be:
214 # * all arch relevant include/ files
215 # * all Makefile/Kconfig files
216 # * all script/ files
217
218 # Remove existing build/source links and create pristine dirs
219 rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build
220 rm -f %{buildroot}/lib/modules/%{kernel_full_version}/source
221 install -d %{buildroot}/lib/modules/%{kernel_full_version}/build
222 ln -fs build %{buildroot}/lib/modules/%{kernel_full_version}/source
223
224
225 # First, copy all dirs containing Makefile of Kconfig files
226 cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` %{buildroot}/lib/modules/%{kernel_full_version}/build
227 install Module.symvers %{buildroot}/lib/modules/%{kernel_full_version}/build/
228 install System.map %{buildroot}/lib/modules/%{kernel_full_version}/build/
229
230 # Then, drop all but the needed Makefiles/Kconfig files
231 rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/Documentation
232 rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts
233 rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/include
234
235 # Copy config and scripts
236 install .config %{buildroot}/lib/modules/%{kernel_full_version}/build/
237 cp -a scripts %{buildroot}/lib/modules/%{kernel_full_version}/build
238 if [ -d %{kernel_arch_subdir}/scripts ]; then
239     cp -a %{kernel_arch_subdir}/scripts %{buildroot}/lib/modules/%{kernel_full_version}/build/%{kernel_arch_subdir}/ || :
240 fi
241 if [ -f %{kernel_arch_subdir}/*lds ]; then
242     cp -a %{kernel_arch_subdir}/*lds %{buildroot}/lib/modules/%{kernel_full_version}/build/%{kernel_arch_subdir}/ || :
243 fi
244 rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts/*.o
245 rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts/*/*.o
246 cp -a --parents %{kernel_arch_subdir}/include %{buildroot}/lib/modules/%{kernel_full_version}/build
247
248 # Copy include files
249 mkdir -p %{buildroot}/lib/modules/%{kernel_full_version}/build/include
250 find include/ -mindepth 1 -maxdepth 1 -type d | xargs -I{} cp -a {} %{buildroot}/lib/modules/%{kernel_full_version}/build/include
251
252 # Save the vmlinux file for kernel debugging into the devel package
253 cp vmlinux %{buildroot}/lib/modules/%{kernel_full_version}
254
255 # Mark modules executable so that strip-to-file can strip them
256 find %{buildroot}/lib/modules/%{kernel_full_version} -name "*.ko" -type f | xargs --no-run-if-empty chmod 755
257
258 # Move the devel headers out of the root file system
259 install -d %{buildroot}/usr/src/kernels
260 mv %{buildroot}/lib/modules/%{kernel_full_version}/build %{buildroot}/usr/src/kernels/%{kernel_full_version}
261
262 ln -sf /usr/src/kernels/%{kernel_full_version} %{buildroot}/lib/modules/%{kernel_full_version}/build
263
264 # Install perf
265 install -d %{buildroot}
266 make -s -C tools/perf DESTDIR=%{buildroot} install
267 install -d  %{buildroot}%{_bindir}
268 install -d  %{buildroot}%{_libexecdir}
269 mv %{buildroot}/bin/* %{buildroot}%{_bindir}
270 mv %{buildroot}/libexec/* %{buildroot}%{_libexecdir}
271 rm %{buildroot}/etc/bash_completion.d/perf
272
273
274
275 ###
276 ### SCRIPTS
277 ###
278
279 %post -n kernel-%{variant}
280 if [ -f "/boot/loader/loader.conf" ]; then
281         # EFI boot with gummiboot
282         INSTALLERFW_MOUNT_PREFIX="/" /usr/sbin/setup-gummiboot-conf
283 else
284         # Legacy boot
285         last_installed_ver="$(rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant} | sort -r | sed -e 's/[^:]*: \(.*\)/\1/g' | sed -n -e "1p")"
286         ln -sf vmlinuz-$last_installed_ver-%{variant} /boot/vmlinuz
287
288         if [ -z "$last_installed_ver" ]; then
289                 # Something went wrong, print some diagnostics
290                 printf "%s\n" "Error: cannot find kernel version" 1>&2
291                 printf "%s\n" "The command was: rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant} | sort -r | sed -e 's/[^:]*: \(.*\)/\1/g' | sed -n -e \"1p\"" 1>&2
292                 printf "%s\n" "Output of the \"rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant}\" is:" 1>&2
293                 result="$(rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant})"
294                 printf "%s\n" "$result" 1>&2
295         fi
296 fi
297
298 %{_bindir}/dracut /boot/initrd-%{kernel_full_version}.img %{kernel_full_version}
299
300 %post -n kernel-%{variant}-devel
301 if [ -x /usr/sbin/hardlink ]; then
302         cd /usr/src/kernels/%{kernel_full_version}
303         /usr/bin/find . -type f | while read f; do
304                 hardlink -c /usr/src/kernels/*/$f $f
305         done
306 fi
307
308 %postun -n kernel-%{variant}
309 if [ -f "/boot/loader/loader.conf" ]; then
310         # EFI boot with gummiboot
311         INSTALLERFW_MOUNT_PREFIX="/" /usr/sbin/setup-gummiboot-conf
312 else
313         last_installed_ver="$(rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant} | sort -r | sed -e 's/[^:]*: \(.*\)/\1/g' | sed -n -e "1p")"
314         if [ -n "$last_installed_ver" ]; then
315                 ln -sf vmlinuz-$last_installed_ver-%{variant} /boot/vmlinuz
316         else
317                 rm -rf /boot/vmlinuz
318         fi
319 fi
320
321
322
323 ###
324 ### FILES
325 ###
326 %files -n kernel-%{variant}
327 %license COPYING
328 /boot/vmlinuz-%{kernel_full_version}
329 /boot/System.map-%{kernel_full_version}
330 /boot/config-%{kernel_full_version}
331 %if %modules_supported
332 %dir /lib/modules/%{kernel_full_version}
333 /lib/modules/%{kernel_full_version}/kernel
334 /lib/modules/%{kernel_full_version}/modules.*
335 %endif
336 /lib/modules/%{kernel_full_version}/build
337 /lib/modules/%{kernel_full_version}/source
338
339 %if %vdso_supported
340 /lib/modules/%{kernel_full_version}/vdso
341 %endif
342 %if %dtbs_supported
343 /boot/*.dtb
344 %endif
345 %ghost /boot/initrd-%{kernel_full_version}.img
346
347
348 %files -n kernel-%{variant}-devel
349 %license COPYING
350 %verify(not mtime) /usr/src/kernels/%{kernel_full_version}
351 /lib/modules/%{kernel_full_version}/vmlinux
352
353
354 %files -n perf
355 %license COPYING
356 %{_bindir}/perf
357 %{_libexecdir}/perf-core
358 %if %trace_supported
359 %{_bindir}/trace
360 /%{_lib}/traceevent/plugins/*.so
361 %endif