%{!?dotnet_buildtype: %define dotnet_buildtype Release} %define skipnative 0 %define skipmscorlib 0 %define pgo_instrument 0 %define pgo_optimize 1 %ifarch %{ix86} %define dotnet_buildtype Release %endif %define dotnet_version 3.0.0 Name: coreclr Version: 3.0.0 Release: 0 Summary: Microsoft .NET Runtime, Coreclr Group: Development/Languages License: MIT URL: http://github.com/dotnet/coreclr Source0: %{name}-%{version}.tar.gz Source1: %{name}.manifest Source2: %{name}.conf ExcludeArch: aarch64 BuildRequires: python BuildRequires: python-xml # libcoreclr.so BuildRequires: pkgconfig(libunwind) BuildRequires: pkgconfig(uuid) # System.Globalization.Native.so BuildRequires: libicu-devel BuildRequires: tizen-release # No matter what tizen-release package you use in any profile AutoReq: 0 Requires: glibc Requires: libgcc Requires: libstdc++ Requires: libunwind Requires: libuuid # Accelerate python, clang %ifarch %{arm} BuildRequires: python-accel-armv7l-cross-arm BuildRequires: clang-accel-armv7l-cross-arm %endif %ifarch aarch64 BuildRequires: python-accel-aarch64-cross-aarch64 BuildRequires: clang-accel-aarch64-cross-aarch64 %endif BuildRequires: cmake BuildRequires: llvm >= 3.8 BuildRequires: llvm-devel >= 3.8 BuildRequires: clang >= 3.8 BuildRequires: clang-devel >= 3.8 BuildRequires: lldb >= 3.8 BuildRequires: lldb-devel >= 3.8 BuildRequires: gettext-tools BuildRequires: libopenssl-devel # C include headers BuildRequires: libstdc++-devel BuildRequires: pkgconfig(lttng-ust) %if 0%{skipmscorlib} %else %ifarch %{arm} BuildRequires: patchelf %endif %ifarch %{ix86} BuildRequires: patchelf BuildRequires: glibc-64bit BuildRequires: libgcc-64bit BuildRequires: libstdc++-64bit BuildRequires: libunwind-64bit BuildRequires: libuuid-64bit BuildRequires: zlib-64bit BuildRequires: libopenssl-64bit %endif %endif %if 0%{pgo_instrument} || 0%{pgo_optimize} BuildRequires: binutils-gold BuildRequires: compiler-rt %endif %description 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. %package test Summary: Dotnet Core Unit Test Requires: coreclr %description test Unit Test objs %package devel Summary: Dotnet Core Development package Requires: coreclr %description devel Headers and static libraries %package -n mscorlib Summary: Core Library for MS .NET Requires: coreclr %description -n mscorlib The MSCORLIB.DLL for .NET Core Runtime (coreclr) %prep %setup -q -n %{name}-%{version} cp %{SOURCE1} . cp %{SOURCE2} . %if 0%{skipmscorlib} %else %ifarch %{arm} %{ix86} %ifarch %{arm} # Detect interpreter name from cross-gcc LD_INTERPRETER=$(patchelf --print-interpreter /emul/usr/bin/gcc) LD_RPATH=$(patchelf --print-rpath /emul/usr/bin/gcc) for file in $( find ./Tools -name "dotnet" -type f) do patchelf --set-interpreter ${LD_INTERPRETER} ${file} patchelf --set-rpath ${LD_RPATH}:%{_builddir}/%{name}-%{version}/libicu-57.1/ ${file} done for file in $( find ./Tools ./libicu-57.1 -iname "*.so" -or -iname "*.so.*" ) do patchelf --set-rpath ${LD_RPATH}:%{_builddir}/%{name}-%{version}/libicu-57.1/ ${file} done %endif %ifarch %{ix86} for file in $( find ./Tools ./libicu-57.1 -iname "*.so" -or -iname "*.so.*" ) do patchelf --set-rpath %{_builddir}/%{name}-%{version}/libicu-57.1/ ${file} done %endif %endif %endif %build # disable asan build when global forced asan build %{?asan:export ASAN_OPTIONS=use_sigaltstack=false:`cat /ASAN_OPTIONS`} %{?asan:/usr/bin/gcc-unforce-options} %{?asan:export LD_LIBRARY_PATH=`pwd`/libicu-57.1} export CFLAGS=" --target=%{_host} " export CXXFLAGS=" --target=%{_host} " %ifarch x86_64 # Even though build architectur is x86_64, it will be running on arm board. # So we need to pass the arch argument as arm. %define _barch %{?cross:%{cross}}%{!?cross:x64} %else %ifarch aarch64 %define _barch arm64 %else %ifarch %{ix86} %define _barch x86 export CLANG_NO_LIBDIR_SUFFIX=1 export CFLAGS=$(echo $CFLAGS | sed -e 's/--target=i686/--target=i586/') export CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/--target=i686/--target=i586/') %else %ifarch %{arm} %define _barch armel export CLANG_NO_LIBDIR_SUFFIX=1 %else %endif %endif %endif %endif %define _buildtype %{dotnet_buildtype} %define _reldir bin/Product/Linux.%{_barch}.%{_buildtype} %define _numproc %(getconf _NPROCESSORS_ONLN) %ifarch %{arm} %if %{dotnet_buildtype} == "Release" export CXXFLAGS+="-fstack-protector-strong -D_FORTIFY_SOURCE=2" %else export CXXFLAGS+="-fstack-protector-strong" %endif %endif %if 0%{skipnative} %else %if 0%{pgo_instrument} %define _pgo_flags -pgoinstrument %else %if 0%{pgo_optimize} # pgo optimization is enabled by default %define _pgo_flags "" %else %define _pgo_flags -nopgooptimize %endif %endif %endif %if 0%{skipmscorlib} %if 0%{skipnative} # No build native and mscorlib. %else # Build native only. ./build.sh -%{_barch} -%{_buildtype} -numproc %{_numproc} -skipmscorlib -skipgenerateversion -skipnuget -msbuildonunsupportedplatform -cmakeargs "-DFEATURE_GDBJIT=TRUE -DCLR_ADDITIONAL_LINKER_FLAGS=-Wl,-z,relro" %{_pgo_flags} %endif %else %if 0%{skipnative} # Build mscorlib only. ./build.sh -%{_barch} -%{_buildtype} -numproc %{_numproc} -skiprestore -skipnative -skipnuget -skipcrossgen -msbuildonunsupportedplatform %else # Build native and mscorlib. ./build.sh -%{_barch} -%{_buildtype} -numproc %{_numproc} -skipgenerateversion -skiprestore -skipnuget -skipcrossgen -msbuildonunsupportedplatform -cmakeargs "-DFEATURE_GDBJIT=TRUE -DCLR_ADDITIONAL_LINKER_FLAGS=-Wl,-z,relro" %{_pgo_flags} %endif %endif %install # .NET Core Runtime %define dotnetdir dotnet %define netshareddir %{dotnetdir}/shared %define netcoreappdir %{netshareddir}/Microsoft.NETCore.App/%{dotnet_version} mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir} # .NET Tizen Runtime %define dotnettizendir dotnet.tizen %define dotnetfwdir %{dotnettizendir}/framework %define dotnettestdir %{dotnettizendir}/test mkdir -p %{buildroot}%{_datadir}/%{dotnettizendir} mkdir -p %{buildroot}%{_datadir}/%{dotnetfwdir} mkdir -p %{buildroot}%{_datadir}/%{dotnettestdir} ln -sf %{_datadir}/%{netcoreappdir} %{buildroot}%{_datadir}/%{dotnettizendir}/netcoreapp mkdir -p %{buildroot}/etc/tmpfiles.d install -m 0644 %{name}.conf %{buildroot}/etc/tmpfiles.d/%{name}.conf # symlink to .NET version for compatibility ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.0.0 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.0 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.1 ln -sf %{dotnet_version} %{buildroot}%{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.4 %if 0%{skipnative} %else cp %{_reldir}/corerun %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libclrjit.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libcoreclr.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libdbgshim.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libmscordaccore.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libmscordbi.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libsos.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libsosplugin.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libcoreclrtraceptprovider.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/libdnetmemoryenum.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/System.Globalization.Native.so %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/coreconsole %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/crossgen %{buildroot}%{_datadir}/%{netcoreappdir} # .NET Core Headers and static libraries mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/src/ mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/ mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/dlls/ mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/coreclr/hosts/ mkdir -p %{buildroot}%{_datadir}/%{netcoreappdir}/src/ToolBox/SOS/ cp -rf src/inc %{buildroot}%{_datadir}/%{netcoreappdir}/src/ cp -rf src/pal/inc %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/ cp -rf src/pal/prebuilt %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/ cp -rf src/debug/inc %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/ cp -rf src/debug/shim %{buildroot}%{_datadir}/%{netcoreappdir}/src/debug/ cp -rf src/dlls/dbgshim %{buildroot}%{_datadir}/%{netcoreappdir}/src/dlls/ cp -rf src/coreclr/hosts/inc %{buildroot}%{_datadir}/%{netcoreappdir}/src/coreclr/hosts/ cp -rf src/ToolBox/SOS/Strike %{buildroot}%{_datadir}/%{netcoreappdir}/src/ToolBox/SOS cp -rf src/pal/src/include %{buildroot}%{_datadir}/%{netcoreappdir}/src/pal/src cp -rf %{_reldir}/lib %{buildroot}%{_datadir}/%{netcoreappdir} # extra ln -sf %{_datadir}/%{netcoreappdir}/crossgen %{buildroot}%{_datadir}/%{dotnetfwdir}/crossgen ln -sf %{_datadir}/%{netcoreappdir}/coreconsole %{buildroot}%{_datadir}/%{dotnetfwdir}/coreconsole ln -sf ../%{netcoreappdir}/corerun %{buildroot}%{_datadir}/%{dotnetdir}/corerun # devel cp %{_reldir}/ilasm %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/ildasm %{buildroot}%{_datadir}/%{netcoreappdir} # test cp -rf bin/obj/Linux.%{_barch}.%{_buildtype}/tests/src %{buildroot}%{_datadir}/%{dotnettestdir} cp %{_reldir}/superpmi %{buildroot}%{_datadir}/%{dotnettestdir} cp %{_reldir}/mcs %{buildroot}%{_datadir}/%{dotnettestdir} cp %{_reldir}/libsuperpmi-shim-collector.so %{buildroot}%{_datadir}/%{dotnettestdir} cp %{_reldir}/libsuperpmi-shim-counter.so %{buildroot}%{_datadir}/%{dotnettestdir} cp %{_reldir}/libsuperpmi-shim-simple.so %{buildroot}%{_datadir}/%{dotnettestdir} %endif %if 0%{skipmscorlib} %else cp %{_reldir}/System.Private.CoreLib.dll %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/SOS.NETCore.dll %{buildroot}%{_datadir}/%{netcoreappdir} %endif %if 0%{skipnative} %else %files %manifest %{name}.manifest %dir %{_datadir}/%{dotnetdir} %dir %{_datadir}/%{netcoreappdir} %dir %{_datadir}/%{dotnettizendir} %{_datadir}/%{netcoreappdir}/crossgen %{_datadir}/%{dotnetfwdir}/crossgen %{_datadir}/%{netcoreappdir}/*.so %{_datadir}/%{dotnettizendir}/netcoreapp /etc/tmpfiles.d/%{name}.conf # symlink to .NET version for compatibility %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.0.0 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.0 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.1 %dir %{_datadir}/%{netshareddir}/Microsoft.NETCore.App/2.1.4 %files test %manifest %{name}.manifest %dir %{_datadir}/%{dotnettestdir} %{_datadir}/%{dotnettestdir}/* %files devel %manifest %{name}.manifest %dir %{_datadir}/%{netcoreappdir}/lib %dir %{_datadir}/%{netcoreappdir}/src %dir %{_datadir}/%{dotnetfwdir} %{_datadir}/%{netcoreappdir}/lib/* %{_datadir}/%{netcoreappdir}/src/* %{_datadir}/%{netcoreappdir}/ilasm %{_datadir}/%{netcoreappdir}/ildasm %{_datadir}/%{netcoreappdir}/corerun %{_datadir}/%{netcoreappdir}/coreconsole %{_datadir}/%{dotnetdir}/corerun %{_datadir}/%{dotnetfwdir}/coreconsole %endif %if 0%{skipmscorlib} %else %files -n mscorlib %manifest %{name}.manifest %{_datadir}/%{netcoreappdir}/*.dll %endif