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