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