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