468c9e047d6a982c76a4e82e569429c9b083ce83
[platform/upstream/coreclr.git] / packaging / coreclr.spec
1 %{!?dotnet_buildtype: %define dotnet_buildtype Release}
2
3 %define skipnative 0
4 %define skipmscorlib 0
5
6 %ifarch %{arm} aarch64
7 %define skiptests 0
8 %else
9 %define skiptests 1
10 %endif
11
12 %define pgo_instrument 0
13 %define pgo_optimize 1
14
15 %define dotnet_version  3.1.3
16
17 Name:           coreclr
18 Version:        3.1.3
19 Release:        0
20 Summary:        Microsoft .NET Runtime, Coreclr
21 Group:          Development/Languages
22 License:        MIT
23 URL:            http://github.com/dotnet/coreclr
24 Source0: %{name}-%{version}.tar.gz
25 Source1: %{name}.manifest
26
27 BuildRequires:  python
28 BuildRequires:  python-xml
29 # libcoreclr.so
30 BuildRequires:  pkgconfig(libunwind)
31 BuildRequires:  pkgconfig(uuid)
32 # System.Globalization.Native.so
33 BuildRequires:  libicu-devel
34 BuildRequires:  tizen-release
35 # No matter what tizen-release package you use in any profile
36 AutoReq: 0
37 Requires: glibc
38 Requires: libgcc
39 Requires: libstdc++
40 Requires: libunwind
41 Requires: libuuid
42
43 # Accelerate python, clang
44 %ifarch %{arm}
45 BuildRequires: python-accel-armv7l-cross-arm
46 BuildRequires: clang-accel-armv7l-cross-arm
47 %endif
48
49 %ifarch aarch64
50 BuildRequires: python-accel-aarch64-cross-aarch64
51 BuildRequires: clang-accel-aarch64-cross-aarch64
52 %endif
53
54 BuildRequires:  cmake
55 BuildRequires:  llvm >= 3.8
56 BuildRequires:  llvm-devel >= 3.8
57 BuildRequires:  clang >= 3.8
58 BuildRequires:  clang-devel >= 3.8
59 BuildRequires:  lldb >= 3.8
60 BuildRequires:  lldb-devel >= 3.8
61 BuildRequires:  gettext-tools
62 BuildRequires:  libopenssl1.1-devel
63 # C include headers
64 BuildRequires:  libstdc++-devel
65 BuildRequires:  pkgconfig(lttng-ust)
66
67 %if 0%{skipmscorlib}
68 %else
69 %ifarch %{arm} aarch64
70 BuildRequires:  patchelf
71 %endif
72 %ifarch %{ix86}
73 BuildRequires:  patchelf
74 BuildRequires:  glibc-64bit
75 BuildRequires:  libgcc-64bit
76 BuildRequires:  libstdc++-64bit
77 BuildRequires:  libunwind-64bit
78 BuildRequires:  libuuid-64bit
79 BuildRequires:  zlib-64bit
80 BuildRequires:  libopenssl11-64bit
81 %endif
82 %endif
83
84 %if 0%{pgo_instrument} || 0%{pgo_optimize}
85 BuildRequires:  binutils-gold
86 BuildRequires:  compiler-rt
87 %endif
88
89 %description
90 The CoreCLR repo contains the complete runtime implementation for .NET Core. It includes RyuJIT, the .NET GC, native interop and many other components. It is cross-platform, with multiple OS and CPU ports in progress.
91
92 %package test
93 Summary:    Dotnet Core Unit Test
94 Requires:    coreclr
95
96 %description test
97 Unit Test objs
98
99 %package devel
100 Summary:    Dotnet Core Development package
101 Requires:   coreclr
102
103 %description devel
104 Headers and static libraries
105
106 %package -n mscorlib
107 Summary:        Core Library for MS .NET
108 Requires:       coreclr
109
110 %description -n mscorlib
111 The MSCORLIB.DLL for .NET Core Runtime (coreclr)
112
113 %prep
114 %setup -q -n %{name}-%{version}
115 cp %{SOURCE1} .
116
117
118 %if 0%{skipmscorlib}
119 %else
120 %ifarch %{arm} aarch64
121 # Detect interpreter name from cross-gcc
122 LD_INTERPRETER=$(patchelf --print-interpreter /emul/usr/bin/gcc)
123 LD_RPATH=$(patchelf --print-rpath /emul/usr/bin/gcc)
124 for file in $( find ./Tools ./.dotnet -name "dotnet" -type f -o -name "ilasm" -type f)
125 do
126     patchelf --set-interpreter ${LD_INTERPRETER} ${file}
127     patchelf --set-rpath ${LD_RPATH}:%{_builddir}/%{name}-%{version}/libicu-57.1/ ${file}
128 done
129 for file in $( find ./Tools ./.dotnet ./libicu-57.1 -iname "*.so" -or -iname "*.so.*" )
130 do
131     patchelf --set-rpath ${LD_RPATH}:%{_builddir}/%{name}-%{version}/libicu-57.1/ ${file}
132 done
133 %endif
134 %ifarch %{ix86}
135 for file in $( find ./Tools ./.dotnet ./libicu-57.1 -iname "*.so" -or -iname "*.so.*" )
136 do
137     patchelf --set-rpath %{_builddir}/%{name}-%{version}/libicu-57.1/ ${file}
138 done
139 %endif
140 %endif
141
142 %build
143 # disable asan build when global forced asan build
144 %{?asan:
145 export ASAN_OPTIONS=use_sigaltstack=false:`cat /ASAN_OPTIONS`
146 /usr/bin/gcc-unforce-options
147 export LD_LIBRARY_PATH=`pwd`/libicu-57.1
148
149 # enable ASan support for only external libs
150 export TIZEN_ASAN_ENVIRONMENT=1
151 }
152
153 BASE_FLAGS=" --target=%{_host} "
154
155 %ifarch x86_64
156 # Even though build architectur is x86_64, it will be running on arm board.
157 # So we need to pass the arch argument as arm.
158 %define _barch  %{?cross:%{cross}}%{!?cross:x64}
159 %else
160 %ifarch aarch64
161 %define _barch  arm64
162 %else
163 %ifarch %{ix86}
164 %define _barch  x86
165 export CLANG_NO_LIBDIR_SUFFIX=1
166 BASE_FLAGS="$(echo $BASE_FLAGS | sed -e 's/--target=i686/--target=i586/')"
167 BASE_FLAGS="$BASE_FLAGS -mstackrealign"
168 %else
169 %ifarch %{arm}
170 %define _barch  armel
171 export CLANG_NO_LIBDIR_SUFFIX=1
172 %else
173
174 %endif
175 %endif
176 %endif
177 %endif
178
179 %ifarch %{arm}
180 %define _tarch arm
181 %endif
182 %ifarch aarch64
183 %define _tarch arm64
184 %endif
185 %ifarch %{ix86}
186 %define _tarch x86
187 %endif
188 %ifarch x86_64
189 %define _tarch x64
190 %endif
191
192 %define _buildtype  %{dotnet_buildtype}
193 %define _reldir     bin/Product/Linux.%{_barch}.%{_buildtype}
194 %define _numproc    %(getconf _NPROCESSORS_ONLN)
195
196 export CFLAGS="${BASE_FLAGS}"
197 export CXXFLAGS="${BASE_FLAGS}"
198 export ASMFLAGS="${BASE_FLAGS}"
199
200 %ifarch %{arm}
201 %if %{dotnet_buildtype} == "Release"
202 export CXXFLAGS+="-fstack-protector-strong -D_FORTIFY_SOURCE=2"
203 %else
204 export CXXFLAGS+="-fstack-protector-strong"
205 %endif
206 %endif
207
208 %if 0%{skipnative}
209 %else
210 %if 0%{pgo_instrument}
211 %define _pgo_flags -pgoinstrument
212 %else
213 %if 0%{pgo_optimize}
214 # pgo optimization is enabled by default
215 %define _pgo_flags ""
216 %else
217 %define _pgo_flags -nopgooptimize
218 %endif
219 %endif
220 %endif
221
222 %ifarch %{arm} aarch64
223 %define _ngen_relocs_opts cmakeargs "-DFEATURE_NGEN_RELOCS_OPTIMIZATIONS=true"
224 %else
225 %define _ngen_relocs_opts ""
226 %endif
227
228 %if 0%{skipmscorlib}
229 %if 0%{skipnative}
230 # No build native and mscorlib.
231 %else
232 # Build native only.
233 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
234 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
235 ./build.sh -portablebuild=false -%{_barch} -%{_buildtype} -numproc %{_numproc} -skipmscorlib -skipgenerateversion -skipnuget -msbuildonunsupportedplatform cmakeargs "-DFEATURE_PREJIT=true -DFEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION=true -DTIZEN_AGGRESSIVE_INLINING_GENERIC=true -DCLR_ADDITIONAL_LINKER_FLAGS=-Wl,-z,relro" %{_ngen_relocs_opts} %{_pgo_flags}
236 %endif
237 %else
238 %if 0%{skipnative}
239 # Build mscorlib only.
240 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
241 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
242 ./build.sh -portablebuild=false -%{_barch} -%{_buildtype} -numproc %{_numproc} -skiprestore -skiprestoreoptdata -skipnative -skipnuget -skipcrossgen -msbuildonunsupportedplatform
243 %else
244 # Build native and mscorlib.
245 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
246 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
247 ./build.sh -portablebuild=false -%{_barch} -%{_buildtype} -numproc %{_numproc} -skipgenerateversion -skiprestore -skiprestoreoptdata -skipnuget -skipcrossgen -msbuildonunsupportedplatform cmakeargs "-DFEATURE_IBCLOGGER=true -DFEATURE_PREJIT=true -DFEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION=true -DTIZEN_AGGRESSIVE_INLINING_GENERIC=true -DCLR_ADDITIONAL_LINKER_FLAGS=-Wl,-z,relro" %{_ngen_relocs_opts} %{_pgo_flags}
248 %endif
249 %endif
250
251 %if 0%{skiptests}
252 %else
253 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
254 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
255
256 # Build native part of tests as non-portable (i.e. for Tizen)
257 ROOTFS_DIR=/ ./build-test.sh portablebuild=false %{_barch} cross %{_buildtype} priority1 msbuildonunsupportedplatform skipgenerateversion skipstressdependencies skipmanaged skiprestorepackages /p:__SkipPackageRestore=true skipgeneratelayout
258
259 # Build managed part of tests as portable (i.e. for Linux)
260 ROOTFS_DIR=/ ./build-test.sh %{_barch} cross %{_buildtype} priority1 msbuildonunsupportedplatform skipgenerateversion skipstressdependencies skipnative skiprestorepackages /p:__SkipPackageRestore=true
261 %endif
262
263 %install
264 # .NET Core Runtime
265 %define dotnetdir       dotnet
266 %define netshareddir    %{dotnetdir}/shared
267 %define netcoreappdir   %{netshareddir}/Microsoft.NETCore.App/%{dotnet_version}
268 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}
269
270 # TC directory
271 %define tcdir           coreclr-tc
272 %define dotnettestdir   /opt/usr/%{tcdir}
273 mkdir -p %{buildroot}/%{dotnettestdir}
274
275 # .NET Tizen Runtime
276 %define dotnettizendir  dotnet.tizen
277 %define dotnetfwdir     %{dotnettizendir}/framework
278 mkdir -p %{buildroot}%{_datadir}/%{dotnettizendir}
279 mkdir -p %{buildroot}%{_datadir}/%{dotnetfwdir}
280 ln -sf %{_datadir}/%{netcoreappdir} %{buildroot}%{_datadir}/%{dotnettizendir}/netcoreapp
281
282 # symlink to .NET version for compatibility
283 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.0.0
284 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.0
285 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.1
286 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.4
287 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/3.0.0
288
289 %if 0%{skipnative}
290 %else
291 cp %{_reldir}/corerun                           %{buildroot}%{_datadir}/%{netcoreappdir}
292 cp %{_reldir}/libclrjit.so                      %{buildroot}%{_datadir}/%{netcoreappdir}
293 cp %{_reldir}/libcoreclr.so                     %{buildroot}%{_datadir}/%{netcoreappdir}
294 cp %{_reldir}/libdbgshim.so                     %{buildroot}%{_datadir}/%{netcoreappdir}
295 cp %{_reldir}/libmscordaccore.so                %{buildroot}%{_datadir}/%{netcoreappdir}
296 cp %{_reldir}/libmscordbi.so                    %{buildroot}%{_datadir}/%{netcoreappdir}
297 cp %{_reldir}/libcoreclrtraceptprovider.so      %{buildroot}%{_datadir}/%{netcoreappdir}
298 cp %{_reldir}/libdnetmemoryenum.so              %{buildroot}%{_datadir}/%{netcoreappdir}
299 cp %{_reldir}/System.Globalization.Native.so    %{buildroot}%{_datadir}/%{netcoreappdir}
300 cp %{_reldir}/coreconsole                       %{buildroot}%{_datadir}/%{netcoreappdir}
301 cp %{_reldir}/createdump                        %{buildroot}%{_datadir}/%{netcoreappdir}
302 cp %{_reldir}/crossgen                          %{buildroot}%{_datadir}/%{netcoreappdir}
303 cp %{_reldir}/ilasm                             %{buildroot}%{_datadir}/%{netcoreappdir}
304 cp %{_reldir}/ildasm                            %{buildroot}%{_datadir}/%{netcoreappdir}
305
306 # .NET Core Headers and static libraries
307 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/src/
308 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/
309 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/dlls/
310 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/coreclr/hosts/
311 cp -rf src/inc                %{buildroot}%{_datadir}/%{netcoreappdir}/src/
312 cp -rf src/pal/inc            %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/
313 cp -rf src/pal/prebuilt       %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/
314 cp -rf src/debug/inc          %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/
315 cp -rf src/debug/shim         %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/
316 cp -rf src/dlls/dbgshim       %{buildroot}%{_datadir}/%{netcoreappdir}/src/dlls/
317 cp -rf src/coreclr/hosts/inc  %{buildroot}%{_datadir}/%{netcoreappdir}/src/coreclr/hosts/
318 cp -rf src/pal/src/include    %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/src
319 cp -rf %{_reldir}/lib         %{buildroot}%{_datadir}/%{netcoreappdir}
320
321 # test
322 %if 0%{skiptests}
323 %else
324 cp tests/runtest.sh                             %{buildroot}/%{dotnettestdir}
325 chmod +x %{buildroot}/%{dotnettestdir}/runtest.sh
326 cp tests/unsupported*.%{_tarch}.txt             %{buildroot}/%{dotnettestdir} | true
327
328 %define _tcreldir     bin/tests/Linux.%{_barch}.%{_buildtype}
329 cp -r %{_tcreldir}/* %{buildroot}/%{dotnettestdir}
330 find %{buildroot}/%{dotnettestdir} -name "*.pdb" -exec rm {} \;
331 find %{buildroot}/%{dotnettestdir} -name "*.cmd" -exec rm {} \;
332 find %{buildroot}/%{dotnettestdir} -name "*.so.dbg" -exec rm {} \;
333 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/in
334 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/sharedFramework
335 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/PDB
336 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/x64
337 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/gcinfo
338 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/inc
339 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/lib
340 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/IL
341 rm -rf %{buildroot}/%{dotnettestdir}/Tests/Core_Root/bin
342 rm %{buildroot}/%{dotnettestdir}/Tests/Core_Root/{superpmi,SOS_README.md,mcs,*.a,*.so,corerun,coreconsole,crossgen,ilasm,ildasm,System.Private.CoreLib.dll}
343
344 cp %{buildroot}/%{dotnettestdir}/bin/*.so %{buildroot}/%{dotnettestdir}/Tests/Core_Root
345 cp %{_reldir}/corerun %{buildroot}/%{dotnettestdir}/Tests/Core_Root
346
347 mv %{buildroot}/%{dotnettestdir}/Tests/Core_Root %{buildroot}/%{dotnettestdir}/coreroot
348 %endif
349
350 # test native
351 mkdir -p %{buildroot}/%{dotnettestdir}/bin
352 cp %{_reldir}/superpmi                          %{buildroot}/%{dotnettestdir}/bin
353 cp %{_reldir}/mcs                               %{buildroot}/%{dotnettestdir}/bin
354 cp %{_reldir}/libsuperpmi-shim-collector.so     %{buildroot}/%{dotnettestdir}/bin
355 cp %{_reldir}/libsuperpmi-shim-counter.so       %{buildroot}/%{dotnettestdir}/bin
356 cp %{_reldir}/libsuperpmi-shim-simple.so        %{buildroot}/%{dotnettestdir}/bin
357 cp %{_reldir}/bin/*.so                          %{buildroot}/%{dotnettestdir}/bin
358 %endif
359
360 %if 0%{skipmscorlib}
361 %else
362 cp %{_reldir}/System.Private.CoreLib.dll       %{buildroot}%{_datadir}/%{netcoreappdir}
363 cp %{_reldir}/PDB/System.Private.CoreLib.pdb   %{buildroot}%{_datadir}/%{netcoreappdir}
364 %endif
365
366 %if 0%{skipnative}
367 %else
368 %files
369 %manifest %{name}.manifest
370 %dir %{_datadir}/%{dotnetdir}
371 %dir %{_datadir}/%{netcoreappdir}
372 %dir %{_datadir}/%{dotnettizendir}
373 %{_datadir}/%{netcoreappdir}/createdump
374 %{_datadir}/%{netcoreappdir}/crossgen
375 %{_datadir}/%{netcoreappdir}/*.so
376 %{_datadir}/%{dotnettizendir}/netcoreapp
377 %{_datadir}/%{netcoreappdir}/ilasm
378 %{_datadir}/%{netcoreappdir}/ildasm
379
380 # symlink to .NET version for compatibility
381 %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.0.0
382 %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.0
383 %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.1
384 %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.4
385 %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/3.0.0
386
387 %files test
388 %manifest %{name}.manifest
389 %dir %{dotnettestdir}
390 %{dotnettestdir}/*
391
392 %files devel
393 %manifest %{name}.manifest
394 %dir %{_datadir}/%{netcoreappdir}/lib
395 %dir %{_datadir}/%{netcoreappdir}/src
396 %dir %{_datadir}/%{netcoreappdir}
397 %{_datadir}/%{netcoreappdir}/lib/*
398 %{_datadir}/%{netcoreappdir}/src/*
399 %{_datadir}/%{netcoreappdir}/corerun
400 %{_datadir}/%{netcoreappdir}/coreconsole
401 %{_datadir}/%{netcoreappdir}/System.Private.CoreLib.pdb
402 %endif
403
404 %if 0%{skipmscorlib}
405 %else
406 %files -n mscorlib
407 %manifest %{name}.manifest
408 %{_datadir}/%{netcoreappdir}/*.dll
409
410 %post -n mscorlib
411 rm -f %{_datadir}/%{netcoreappdir}/*.Backup
412 %endif