packaging: Add spec file for VisionFive2
[platform/kernel/linux-starfive.git] / packaging / linux-visionfive.spec
1 # Ignore double dash in version for rpmbuild
2 %define _wrong_version_format_terminate_build 0
3
4 %define tizen_kernel_config_dir %{_datadir}/tizen-kernel-configs
5 %define config_name starfive_visionfive2_defconfig
6 %define buildarch riscv
7 %define target_board visionfive2
8 %define variant %{buildarch}-%{target_board}
9
10 # 0 until linux-rt available for 6.1
11 %define build_rt 0
12
13 Name: visionfive-linux-kernel
14 Summary: The Linux Kernel for VisionFive2
15 Version: 5.15
16 Release: 0
17 License: GPL-2.0
18 ExclusiveArch: riscv64
19 Group: System/Kernel
20 Vendor: The Linux Community
21 URL: https://www.kernel.org
22 Source0:   linux-kernel-%{version}.tar.xz
23 BuildRoot: %{_tmppath}/%{name}-%{PACKAGE_VERSION}-root
24
25 %define fullVersion %{version}-%{variant}
26
27 BuildRequires: bc
28 BuildRequires: module-init-tools
29 BuildRequires: bison
30 BuildRequires: flex
31 BuildRequires: libopenssl1.1-devel
32 BuildRequires: libunwind-devel
33 BuildRequires: libdw-devel
34 BuildRequires: libelf-devel
35 BuildRequires: elfutils
36 BuildRequires: xz-devel
37 BuildRequires: binutils-devel
38 BuildRequires: python3
39 BuildRequires: rsync
40 BuildRequires: tizen-kernel-configs
41
42 %description
43 The Linux Kernel, the operating system core itself
44
45 # kernel
46 %package -n %{variant}-linux-kernel
47 License: GPL-2.0
48 Summary: Tizen kernel for %{target_board}
49 Group: System/Kernel
50 Provides: %{variant}-kernel-uname-r = %{fullVersion}
51 Provides: linux-kernel = %{version}-%{release}
52
53 %description -n %{variant}-linux-kernel
54 This package contains the Linux kernel for Tizen (arch %{buildarch}, target board %{target_board})
55
56 %if %{build_rt}
57 %package -n %{variant}-rt-linux-kernel
58 License: GPL-2.0
59 Summary: Tizen kernel for %{target_board}
60 Group: System/Kernel
61 Provides: %{variant}-kernel-uname-r = %{fullVersion}-rt
62 Provides: linux-kernel = %{version}-%{release}-rt
63
64 %description -n %{variant}-rt-linux-kernel
65 This package contains the Linux kernel for Tizen (arch %{buildarch}, target board %{target_board})
66 %endif
67
68 # modules
69
70 %package -n %{variant}-linux-kernel-modules
71 Summary: Kernel modules for %{target_board}
72 Group: System/Kernel
73 Provides: %{variant}-kernel-modules = %{fullVersion}
74 Provides: %{variant}-kernel-modules-uname-r = %{fullVersion}
75
76 %description -n %{variant}-linux-kernel-modules
77 Kernel-modules includes the loadable kernel modules(.ko files) for %{target_board}
78
79 %if %{build_rt}
80 %package -n %{variant}-rt-linux-kernel-modules
81 Summary: Kernel modules for %{target_board}
82 Group: System/Kernel
83 Provides: %{variant}-kernel-modules = %{fullVersion}-rt
84 Provides: %{variant}-kernel-modules-uname-r = %{fullVersion}-rt
85
86 %description -n %{variant}-rt-linux-kernel-modules
87 Kernel-modules includes the loadable kernel modules(.ko files) for %{target_board}
88 with the PREEMPT_RT patch
89 %endif
90
91 # devel
92
93 %package -n %{variant}-linux-kernel-devel
94 License: GPL-2.0
95 Summary: Linux support kernel map and etc for other packages
96 Group: System/Kernel
97 Provides: %{variant}-kernel-devel = %{fullVersion}
98 Provides: %{variant}-kernel-devel-uname-r = %{fullVersion}
99
100 %description -n %{variant}-linux-kernel-devel
101 This package provides kernel map and etc information.
102
103 %if %{build_rt}
104 %package -n %{variant}-rt-linux-kernel-devel
105 License: GPL-2.0
106 Summary: Linux support kernel map and etc for other packages
107 Group: System/Kernel
108 Provides: %{variant}-kernel-devel = %{fullVersion}-rt
109 Provides: %{variant}-kernel-devel-uname-r = %{fullVersion}-rt
110
111 %description -n %{variant}-rt-linux-kernel-devel
112 This package provides kernel map and etc information.
113 %endif
114
115 #headers
116 %package -n %{variant}-linux-kernel-headers
117 License: GPL-2.0
118 Summary: Linux support headers for userspace development
119 Group: System/Kernel
120 Provides: kernel-headers-tizen-dev
121
122 %description -n %{variant}-linux-kernel-headers
123 This package provides userspaces headers from the Linux kernel. These
124 headers are used by the installed headers for GNU glibc and other system
125  libraries.
126
127 %package -n linux-kernel-perf
128 Summary: The perf performance counter tool
129 Group: System/Kernel
130 Provides: perf = %{version}
131
132 %description -n linux-kernel-perf
133 This package provides the "perf" tool that can be used to monitor performance
134 counter events as well as various kernel internal events.
135
136 %prep
137 %setup -q
138
139 %build
140 %{?asan:/usr/bin/gcc-unforce-options}
141 %{?ubsan:/usr/bin/gcc-unforce-options}
142
143 # Here be %{variant} %{variant}-rt
144 for target in %{variant}; do
145     echo "-${target}" > localversion-tizen
146
147     # extract uapi headers
148     make O=build/${target} headers_install %{?_smp_mflags}
149
150     # Set config file
151     case $target in
152         %{variant})
153             ./scripts/kconfig/merge_config.sh -O build/${target} \
154                 %{tizen_kernel_config_dir}/references/%{buildarch}/%{config_name} \
155                 %{tizen_kernel_config_dir}/tizen/tizen_defconfig
156
157             # Build perf
158             make O=build/${target} -s -C tools/lib/traceevent %{?_smp_mflags}
159             make O=build/${target} -s -C tools/perf EXTRA_CFLAGS="-fPIE -rdynamic" %{?_smp_mflags}
160         ;;
161         %{variant}-rt)
162             cat _localversion-rt > localversion-rt
163             ./scripts/kconfig/merge_config.sh -O build/${target} \
164                 %{tizen_kernel_config_dir}/references/%{buildarch}/%{config_name} \
165                 %{tizen_kernel_config_dir}/tizen/tizen_defconfig \
166                 %{tizen_kernel_config_dir}/tizen/tizen_rt.config
167         ;;
168     esac
169
170     # Build Image/Image.gz
171     make O=build/${target} %{?_smp_mflags}
172
173     # Build dtbs
174     make O=build/${target} dtbs %{?_smp_mflags}
175
176     # Build modules
177     make O=build/${target} modules %{?_smp_mflags}
178 done
179
180 %install
181 QA_SKIP_BUILD_ROOT="DO_NOT_WANT"; export QA_SKIP_BUILD_ROOT
182
183 # Destination directories
184 mkdir -p %{buildroot}/boot
185 mkdir -p %{buildroot}/lib/modules
186
187 # Install boot binary files
188 # Here be SPL & OpenSBI
189
190 # Install kernel DTB
191 install -m 644 build/%{variant}/arch/%{buildarch}/boot/dts/starfive/jh71*.dtb %{buildroot}/boot/
192 mkdir -p %{buildroot}/boot/overlays
193
194 # Install kernel headers
195 make O=build/%{variant} headers_install %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr
196
197 # Here be %{variant} %{variant}-rt
198 for target in %{variant}; do
199     # Install kernel binary
200     case $target in
201         %{variant})
202             install -m 644 build/${target}/arch/%{buildarch}/boot/Image %{buildroot}/boot/Image
203
204             # Install perf
205             make O=build/${target} -s -C tools/perf EXTRA_CFLAGS="-fPIE -rdynamic" DESTDIR=%{buildroot}/usr install
206             rm -rf %{buildroot}/usr/etc
207             rm -rf %{buildroot}/usr/lib/debug
208             rm -rf %{buildroot}/usr/lib/perf
209             rm -rf %{buildroot}/usr/share
210
211         ;;
212         %{variant}-rt)
213             install -m 644 build/${target}/arch/%{buildarch}/boot/Image %{buildroot}/boot/Image_rt
214         ;;
215     esac
216
217     # Install modules
218     make O=build/${target} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=%{buildroot} modules_install
219
220     # Copy files for devel package
221     mkdir -p %{buildroot}/boot/kernel/devel/kernel-devel-${target}
222     rsync -r \
223           --include "/scripts/**.c" \
224           --exclude "/debug*.list" \
225           --exclude "/documentation.list" \
226           --exclude "/*.manifest" \
227           --exclude "/packaging/" \
228           --exclude "/.gbs.conf" \
229           --exclude "/.git**" \
230           --exclude ".gitignore" \
231           --exclude "*\.c" \
232           --exclude ".tmp_vmlinux*" \
233           --exclude ".*dtb*tmp" \
234           --exclude ".*dtb" \
235           --exclude "*.*tmp" \
236           --exclude "vmlinux" \
237           --exclude "Image" \
238           --exclude "zImage" \
239           --exclude "Image.gz" \
240           --exclude "*.cmd" \
241           --exclude "*.ko" \
242           --exclude "*.o" \
243           --exclude "*.S" \
244           --exclude "*.HEX" \
245           --exclude "/build/" \
246           ./ build/${target}/ %{buildroot}/boot/kernel/devel/kernel-devel-${target}
247 done
248
249 %clean
250 rm -rf %{buildroot}
251
252 %if %{build_rt}
253 %post -n %{variant}-rt-linux-kernel
254 mv /boot/Image_rt /boot/Image
255
256 %preun -n %{variant}-rt-linux-kernel
257 mv /boot/Image /boot/Image_rt
258 %endif
259
260 %files -n %{variant}-linux-kernel-modules
261 /lib/modules/*%{variant}/
262
263 %if %{build_rt}
264 %files -n %{variant}-rt-linux-kernel-modules
265 /lib/modules/*%{variant}-rt/
266 %endif
267
268 %files -n %{variant}-linux-kernel-devel
269 /boot/kernel/devel/*%{variant}/
270
271 %if %{build_rt}
272 %files -n %{variant}-rt-linux-kernel-devel
273 /boot/kernel/devel/*%{variant}-rt/
274 %endif
275
276 %files -n %{variant}-linux-kernel
277 %license COPYING
278 /boot/Image
279 /boot/jh71*.dtb
280
281 %if %{build_rt}
282 %files -n %{variant}-rt-linux-kernel
283 %license COPYING
284 /boot/Image_rt
285 /boot/jh71*.dtb
286 %endif
287
288 %files -n %{variant}-linux-kernel-headers
289 /usr/include/*
290
291 %files -n linux-kernel-perf
292 %license COPYING
293 /usr/bin/*
294 /usr/libexec/*
295 /usr/lib/traceevent/*