08aca0b617d6d6ab7e53106874a4cb1d805a615c
[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
152 # enable ASan support for only external libs
153 export TIZEN_ASAN_ENVIRONMENT=1
154 }
155
156 export CFLAGS=" --target=%{_host} "
157 export CXXFLAGS=" --target=%{_host} "
158
159 %ifarch x86_64
160 # Even though build architectur is x86_64, it will be running on arm board.
161 # So we need to pass the arch argument as arm.
162 %define _barch  %{?cross:%{cross}}%{!?cross:x64}
163 %else
164 %ifarch aarch64
165 %define _barch  arm64
166 %else
167 %ifarch %{ix86}
168 %define _barch  x86
169 export CLANG_NO_LIBDIR_SUFFIX=1
170 export CFLAGS=$(echo $CFLAGS | sed -e 's/--target=i686/--target=i586/')
171 export CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/--target=i686/--target=i586/')
172 %else
173 %ifarch %{arm}
174 %define _barch  armel
175 export CLANG_NO_LIBDIR_SUFFIX=1
176 %else
177
178 %endif
179 %endif
180 %endif
181 %endif
182
183 %define _buildtype  %{dotnet_buildtype}
184 %define _reldir     bin/Product/Linux.%{_barch}.%{_buildtype}
185 %define _numproc    %(getconf _NPROCESSORS_ONLN)
186
187 %ifarch %{arm}
188 %if %{dotnet_buildtype} == "Release"
189 export CXXFLAGS+="-fstack-protector-strong -D_FORTIFY_SOURCE=2"
190 %else
191 export CXXFLAGS+="-fstack-protector-strong"
192 %endif
193 %endif
194
195 %if 0%{skipnative}
196 %else
197 %if 0%{pgo_instrument}
198 %define _pgo_flags -pgoinstrument
199 %else
200 %if 0%{pgo_optimize}
201 # pgo optimization is enabled by default
202 %define _pgo_flags ""
203 %else
204 %define _pgo_flags -nopgooptimize
205 %endif
206 %endif
207 %endif
208
209 %ifarch %{arm}
210 %define _ngen_relocs_opts cmakeargs "-DFEATURE_NGEN_RELOCS_OPTIMIZATIONS=true"
211 %else
212 %define _ngen_relocs_opts ""
213 %endif
214
215 %if 0%{skipmscorlib}
216 %if 0%{skipnative}
217 # No build native and mscorlib.
218 %else
219 # Build native only.
220 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
221 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
222 ./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}
223 %endif
224 %else
225 %if 0%{skipnative}
226 # Build mscorlib only.
227 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
228 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
229 ./build.sh -%{_barch} -%{_buildtype} -numproc %{_numproc} -skiprestore -skiprestoreoptdata -skipnative -skipnuget -skipcrossgen -msbuildonunsupportedplatform
230 %else
231 # Build native and mscorlib.
232 export NUGET_PACKAGES=%{_builddir}/%{name}-%{version}/.packages/
233 export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/libicu-57.1/
234 ./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}
235 %endif
236 %endif
237
238 %install
239 # .NET Core Runtime
240 %define dotnetdir       dotnet
241 %define netshareddir    %{dotnetdir}/shared
242 %define netcoreappdir   %{netshareddir}/Microsoft.NETCore.App/%{dotnet_version}
243 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}
244
245 # .NET Tizen Runtime
246 %define dotnettizendir  dotnet.tizen
247 %define dotnetfwdir     %{dotnettizendir}/framework
248 %define dotnettestdir   %{dotnettizendir}/test
249 mkdir -p %{buildroot}%{_datadir}/%{dotnettizendir}
250 mkdir -p %{buildroot}%{_datadir}/%{dotnetfwdir}
251 mkdir -p %{buildroot}%{_datadir}/%{dotnettestdir}
252 ln -sf %{_datadir}/%{netcoreappdir} %{buildroot}%{_datadir}/%{dotnettizendir}/netcoreapp
253
254 # symlink to .NET version for compatibility
255 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.0.0
256 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.0
257 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.1
258 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.4
259 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/3.0.0
260
261 %if 0%{skipnative}
262 %else
263 cp %{_reldir}/corerun   %{buildroot}%{_datadir}/%{netcoreappdir}
264 cp %{_reldir}/libclrjit.so  %{buildroot}%{_datadir}/%{netcoreappdir}
265 cp %{_reldir}/libcoreclr.so %{buildroot}%{_datadir}/%{netcoreappdir}
266 cp %{_reldir}/libdbgshim.so %{buildroot}%{_datadir}/%{netcoreappdir}
267 cp %{_reldir}/libmscordaccore.so  %{buildroot}%{_datadir}/%{netcoreappdir}
268 cp %{_reldir}/libmscordbi.so  %{buildroot}%{_datadir}/%{netcoreappdir}
269 cp %{_reldir}/libcoreclrtraceptprovider.so %{buildroot}%{_datadir}/%{netcoreappdir}
270 cp %{_reldir}/libdnetmemoryenum.so %{buildroot}%{_datadir}/%{netcoreappdir}
271 cp %{_reldir}/System.Globalization.Native.so  %{buildroot}%{_datadir}/%{netcoreappdir}
272 cp %{_reldir}/coreconsole %{buildroot}%{_datadir}/%{netcoreappdir}
273 cp %{_reldir}/crossgen %{buildroot}%{_datadir}/%{netcoreappdir}
274
275 # .NET Core Headers and static libraries
276 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/src/
277 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/
278 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/dlls/
279 mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/coreclr/hosts/
280 cp -rf src/inc                %{buildroot}%{_datadir}/%{netcoreappdir}/src/
281 cp -rf src/pal/inc            %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/
282 cp -rf src/pal/prebuilt       %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/
283 cp -rf src/debug/inc          %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/
284 cp -rf src/debug/shim         %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/
285 cp -rf src/dlls/dbgshim       %{buildroot}%{_datadir}/%{netcoreappdir}/src/dlls/
286 cp -rf src/coreclr/hosts/inc  %{buildroot}%{_datadir}/%{netcoreappdir}/src/coreclr/hosts/
287 cp -rf src/pal/src/include    %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/src
288 cp -rf %{_reldir}/lib         %{buildroot}%{_datadir}/%{netcoreappdir}
289
290 # extra
291 ln -sf %{_datadir}/%{netcoreappdir}/crossgen    %{buildroot}%{_datadir}/%{dotnetfwdir}/crossgen
292 ln -sf %{_datadir}/%{netcoreappdir}/coreconsole %{buildroot}%{_datadir}/%{dotnetfwdir}/coreconsole
293 ln -sf ../%{netcoreappdir}/corerun    %{buildroot}%{_datadir}/%{dotnetdir}/corerun
294
295 # devel
296 cp %{_reldir}/ilasm   %{buildroot}%{_datadir}/%{netcoreappdir}
297 cp %{_reldir}/ildasm  %{buildroot}%{_datadir}/%{netcoreappdir}
298
299 # test
300 # cp -rf bin/obj/Linux.%{_barch}.%{_buildtype}/tests/src %{buildroot}%{_datadir}/%{dotnettestdir}
301 cp %{_reldir}/superpmi %{buildroot}%{_datadir}/%{dotnettestdir}
302 cp %{_reldir}/mcs %{buildroot}%{_datadir}/%{dotnettestdir}
303 cp %{_reldir}/libsuperpmi-shim-collector.so %{buildroot}%{_datadir}/%{dotnettestdir}
304 cp %{_reldir}/libsuperpmi-shim-counter.so %{buildroot}%{_datadir}/%{dotnettestdir}
305 cp %{_reldir}/libsuperpmi-shim-simple.so %{buildroot}%{_datadir}/%{dotnettestdir}
306 cp %{_reldir}/bin/*.so %{buildroot}%{_datadir}/%{dotnettestdir}
307 %endif
308
309 %if 0%{skipmscorlib}
310 %else
311 cp %{_reldir}/System.Private.CoreLib.dll  %{buildroot}%{_datadir}/%{netcoreappdir}
312 %endif
313
314 %if 0%{skipnative}
315 %else
316 %files
317 %manifest %{name}.manifest
318 %dir %{_datadir}/%{dotnetdir}
319 %dir %{_datadir}/%{netcoreappdir}
320 %dir %{_datadir}/%{dotnettizendir}
321 %{_datadir}/%{netcoreappdir}/crossgen
322 %{_datadir}/%{dotnetfwdir}/crossgen
323 %{_datadir}/%{netcoreappdir}/*.so
324 %{_datadir}/%{dotnettizendir}/netcoreapp
325
326 # symlink to .NET version for compatibility
327 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.0.0
328 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.0
329 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.1
330 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.4
331 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/3.0.0
332
333 %files test
334 %manifest %{name}.manifest
335 %dir %{_datadir}/%{dotnettestdir}
336 %{_datadir}/%{dotnettestdir}/*
337
338 %files devel
339 %manifest %{name}.manifest
340 %dir %{_datadir}/%{netcoreappdir}/lib
341 %dir %{_datadir}/%{netcoreappdir}/src
342 %dir %{_datadir}/%{dotnetfwdir}
343 %{_datadir}/%{netcoreappdir}/lib/*
344 %{_datadir}/%{netcoreappdir}/src/*
345 %{_datadir}/%{netcoreappdir}/ilasm
346 %{_datadir}/%{netcoreappdir}/ildasm
347 %{_datadir}/%{netcoreappdir}/corerun
348 %{_datadir}/%{netcoreappdir}/coreconsole
349 %{_datadir}/%{dotnetdir}/corerun
350 %{_datadir}/%{dotnetfwdir}/coreconsole
351 %endif
352
353 %if 0%{skipmscorlib}
354 %else
355 %files -n mscorlib
356 %manifest %{name}.manifest
357 %{_datadir}/%{netcoreappdir}/*.dll
358
359 %post -n mscorlib
360 rm -f %{_datadir}/%{netcoreappdir}/*.Backup
361 %endif
362