2 # Spec written for Tizen Mobile, some bits and pieces originate
3 # from MeeGo/Moblin/Fedora
6 %define upstream_version 3.8.2
7 %define variant adaptation-intel-automotive
8 %define kernel_version %{version}-%{release}
9 %define kernel_full_version %{version}-%{release}-%{variant}
10 %define kernel_arch x86
12 Name: kernel-%{variant}
13 Summary: The Linux kernel
14 Group: System Environment/Kernel
16 URL: http://www.kernel.org/
17 Version: %{upstream_version}
19 BuildRequires: module-init-tools
20 BuildRequires: findutils
21 BuildRequires: elfutils-libelf-devel
22 BuildRequires: binutils-devel
24 # net-tools provides the 'hostname' utility which kernel build wants
25 BuildRequires: net-tools
26 # The below is required for building perf
29 BuildRequires: elfutils-devel
30 BuildRequires: python-devel
31 ExclusiveArch: %{ix86}
33 Provides: kernel = %{version}-%{release}
34 Provides: kernel-uname-r = %{kernel_full_version}
35 Requires(post): /bin/ln
36 Requires(postun): /bin/ln
37 Requires(postun): /bin/sed
38 # We can't let RPM do the dependencies automatic because it'll then pick up
39 # a correct but undesirable perl dependency from the module headers which
40 # isn't required for the kernel proper to function
44 Source0: %{name}-%{version}.tar.bz2
48 This package contains the Tizen IVI Linux kernel
52 Summary: Development package for building kernel modules to match the %{variant} kernel
53 Group: Development/System
54 Provides: kernel-devel = %{kernel_full_version}
55 Provides: kernel-devel-uname-r = %{kernel_full_version}
56 Requires(post): /usr/bin/find
57 Requires: %{name} = %{version}-%{release}
61 This package provides kernel headers and makefiles sufficient to build modules
62 against the %{variant} kernel package.
66 Summary: The 'perf' performance counter tool
67 Group: System Environment/Kernel
68 Provides: perf = %{kernel_full_version}
69 Requires: %{name} = %{version}-%{release}
72 This package provides the "perf" tool that can be used to monitor performance
73 counter events as well as various kernel internal events.
81 # Unpack the kernel tarbal
82 %setup -q -n %{name}-%{version}
90 # Make sure EXTRAVERSION says what we want it to say
91 sed -i "s/^EXTRAVERSION.*/EXTRAVERSION = -%{release}-%{variant}/" Makefile
94 make -s -C tools/lib/traceevent ARCH=%{kernel_arch} %{?_smp_mflags}
95 make -s -C tools/perf WERROR=0 ARCH=%{kernel_arch}
97 # Build kernel and modules
98 make -s ARCH=%{kernel_arch} ivi_defconfig
99 make -s ARCH=%{kernel_arch} %{?_smp_mflags} bzImage
100 make -s ARCH=%{kernel_arch} %{?_smp_mflags} modules
108 install -d %{buildroot}/boot
110 install -m 644 .config %{buildroot}/boot/config-%{kernel_full_version}
111 install -m 644 System.map %{buildroot}/boot/System.map-%{kernel_full_version}
112 install -m 755 arch/%{kernel_arch}/boot/bzImage %{buildroot}/boot/vmlinuz-%{kernel_full_version}
113 # Dummy initrd, will not be included in the actual package but needed for files
114 touch %{buildroot}/boot/initrd-%{kernel_full_version}.img
116 make -s ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{buildroot} modules_install KERNELRELEASE=%{kernel_full_version}
117 make -s ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{buildroot} vdso_install KERNELRELEASE=%{kernel_full_version}
118 rm -rf %{buildroot}/lib/firmware
120 # And save the headers/makefiles etc for building modules against
122 # This all looks scary, but the end result is supposed to be:
123 # * all arch relevant include/ files
124 # * all Makefile/Kconfig files
125 # * all script/ files
127 # Remove existing build/source links and create pristine dirs
128 rm %{buildroot}/lib/modules/%{kernel_full_version}/build
129 rm %{buildroot}/lib/modules/%{kernel_full_version}/source
130 install -d %{buildroot}/lib/modules/%{kernel_full_version}/build
131 ln -s build %{buildroot}/lib/modules/%{kernel_full_version}/source
133 # First, copy all dirs containing Makefile of Kconfig files
134 cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` %{buildroot}/lib/modules/%{kernel_full_version}/build
135 install Module.symvers %{buildroot}/lib/modules/%{kernel_full_version}/build/
136 install System.map %{buildroot}/lib/modules/%{kernel_full_version}/build/
138 # Then, drop all but the needed Makefiles/Kconfig files
139 rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/Documentation
140 rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts
141 rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/include
143 # Copy config and scripts
144 install .config %{buildroot}/lib/modules/%{kernel_full_version}/build/
145 cp -a scripts %{buildroot}/lib/modules/%{kernel_full_version}/build
146 if [ -d arch/%{kernel_arch}/scripts ]; then
147 cp -a arch/%{kernel_arch}/scripts %{buildroot}/lib/modules/%{kernel_full_version}/build/arch/%{kernel_arch}/ || :
149 if [ -f arch/%{kernel_arch}/*lds ]; then
150 cp -a arch/%{kernel_arch}/*lds %{buildroot}/lib/modules/%{kernel_full_version}/build/arch/%{kernel_arch}/ || :
152 rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts/*.o
153 rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts/*/*.o
154 cp -a --parents arch/%{kernel_arch}/include %{buildroot}/lib/modules/%{kernel_full_version}/build
157 mkdir -p %{buildroot}/lib/modules/%{kernel_full_version}/build/include
158 find include/ -mindepth 1 -maxdepth 1 -type d | xargs -I{} cp -a {} %{buildroot}/lib/modules/%{kernel_full_version}/build/include
160 # Copy .config to include/config/auto.conf so "make prepare" is unnecessary.
161 cp %{buildroot}/lib/modules/%{kernel_full_version}/build/.config %{buildroot}/lib/modules/%{kernel_full_version}/build/include/config/auto.conf
163 # Save the vmlinux file for kernel debugging into the devel package
164 cp vmlinux %{buildroot}/lib/modules/%{kernel_full_version}
166 # Mark modules executable so that strip-to-file can strip them
167 find %{buildroot}/lib/modules/%{kernel_full_version} -name "*.ko" -type f | xargs --no-run-if-empty chmod 755
169 # Move the devel headers out of the root file system
170 install -d %{buildroot}/usr/src/kernels
171 mv %{buildroot}/lib/modules/%{kernel_full_version}/build %{buildroot}/usr/src/kernels/%{kernel_full_version}
173 ln -sf ../../../usr/src/kernels/%{kernel_full_version} %{buildroot}/lib/modules/%{kernel_full_version}/build
176 install -d %{buildroot}
177 make -s -C tools/perf DESTDIR=%{buildroot} install
178 install -d %{buildroot}/usr/bin
179 install -d %{buildroot}/usr/libexec
180 mv %{buildroot}/bin/* %{buildroot}/usr/bin/
181 mv %{buildroot}/libexec/* %{buildroot}/usr/libexec/
182 rm %{buildroot}/etc/bash_completion.d/perf
200 ln -sf vmlinuz-%{kernel_full_version} /boot/vmlinuz
203 if [ -x /usr/sbin/hardlink ]; then
204 cd /usr/src/kernels/%{kernel_full_version}
205 /usr/bin/find . -type f | while read f; do
206 hardlink -c /usr/src/kernels/*/$f $f
211 if [ $1 -gt 1 ]; then
212 # There is another kernel, change the /boot/vmlinuz symlink to the
213 # previously installed kernel.
214 prev_ver="$(rpm -q --last kernel-%{variant} | sed -e "s/kernel-%{variant}-\([^ ]*\).*/\1/g" | sed -e "/^%{kernel_version}$/d" | sed -n -e "1p")"
215 ln -sf vmlinuz-$prev_ver-%{variant} /boot/vmlinuz
226 %defattr(-,root,root)
227 /boot/vmlinuz-%{kernel_full_version}
228 /boot/System.map-%{kernel_full_version}
229 /boot/config-%{kernel_full_version}
230 %dir /lib/modules/%{kernel_full_version}
231 /lib/modules/%{kernel_full_version}/kernel
232 /lib/modules/%{kernel_full_version}/build
233 /lib/modules/%{kernel_full_version}/source
234 /lib/modules/%{kernel_full_version}/vdso
235 /lib/modules/%{kernel_full_version}/modules.*
236 %ghost /boot/initrd-%{kernel_full_version}.img
240 %defattr(-,root,root)
241 %verify(not mtime) /usr/src/kernels/%{kernel_full_version}
242 /lib/modules/%{kernel_full_version}/vmlinux
247 /usr/libexec/perf-core