%{!?dotnet_buildtype: %define dotnet_buildtype Release} %define support_test 1 %define skipnative 0 %define skipmscorlib 0 %ifarch %{ix86} %define dotnet_buildtype Debug %endif %define dotnet_version 2.0.0 # git rev-parse --verify HEAD %define CORECLR_GIT_HASH 8b1595b74c943b33fa794e63e440e6f4c9679478 Name: coreclr Version: 2.0.0.11599 Release: 0 Summary: Microsoft .NET Runtime, Coreclr Group: Development/Languages License: MIT URL: http://github.com/dotnet/coreclr Source0: %{name}-%{version}.tar.gz Source1000: downloaded_files.tar.gz Source1001: %{name}.manifest Source1002: libicu.tar.gz Source1003: dep_libs.tar.gz # Gbp-Ignore-Patches: 0 1 2 3 Patch0: Add-project.lock.json-files.patch Patch1: Add-Tizen-RuntimeID-case.patch Patch2: Change-O3-build-in-clang3.8.patch Patch3: Enable_build_with_FEATURE_DBGIPC.patch 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 %if 0%{skipnative} %else 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 %ifarch x86_64 BuildRequires: pkgconfig(lttng-ust) %endif %endif %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 %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 extra Summary: Dotnet Core Extra Files Requires: coreclr %description extra Libsosplugin and others %package test Summary: Dotnet Core Unit Test Requires: coreclr %description test Unit Test objs %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 %{SOURCE1001} . %if 0%{skipmscorlib} %else # Gbp-Patch-Macros %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 cp %{SOURCE1000} ./ tar xf %{SOURCE1000} %ifarch %{arm} %{ix86} %setup -T -D -a 1002 %setup -T -D -a 1003 %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" ) do patchelf --set-interpreter ${LD_INTERPRETER} ${file} patchelf --set-rpath ${LD_RPATH}:%{_builddir}/%{name}-%{version}/libicu/ ${file} done for file in $( find ./Tools ./libicu -iname "*.so" -or -iname "*.so.*" ) do patchelf --set-rpath ${LD_RPATH}:%{_builddir}/%{name}-%{version}/libicu/ ${file} done %endif %ifarch %{ix86} for file in $( find ./Tools ./libicu -iname "*.so" -or -iname "*.so.*" ) do patchelf --set-rpath %{_builddir}/%{name}-%{version}/libicu/ ${file} done %endif %endif %endif %build # Detect paths to toolchain headers in universal way export GCC_INSTALL_DIR=$(gcc -print-search-dirs | sed -ne '/install: /s/install: //p') export LLVM_LIBDIR=$(llvm-config --libdir) export LLVM_INCLUDEDIR=$(llvm-config --includedir) export GPP_INCLUDE_PATHS=$(cpp -xc++ -v < /dev/null 2>&1 | \ awk '/search starts here:/{flag=1;next}/End of search list/{flag=0}flag' | \ sed -e "s/^ //" | tr '\n' ':' | sed -e 's/.$//') export CLANG_INCLUDE_PATHS=$(clang++ -E -xc++ - -v < /dev/null 2>&1 | \ awk '/search starts here:/{flag=1;next}/End of search list/{flag=0}flag' | \ sed -e "s/^ //" | tr '\n' ':' | sed -e 's/.$//') export CLANG_HEADERS=$(clang++ -print-search-dirs 2>&1 | sed -ne '/libraries: /s/libraries: =//p' | sed -ne 's|:.*|/include|p') # NOTHING to build %if 0%{skipnative} %else export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${LLVM_LIBDIR}:${GCC_INSTALL_DIR} export LIBRARY_PATH=$LIBRARY_PATH:${LLVM_LIBDIR}:${GCC_INSTALL_DIR} export CFLAGS=" -B${LLVM_LIBDIR} -B${GCC_INSTALL_DIR} -Wno-deprecated-declarations -D__extern_always_inline=inline" export CPPFLAGS=" -B${LLVM_LIBDIR} -B${GCC_INSTALL_DIR} -Wno-deprecated-declarations -D__extern_always_inline=inline" export CXXFLAGS=" -B${LLVM_LIBDIR} -B${GCC_INSTALL_DIR} -Wno-deprecated-declarations -D__extern_always_inline=inline" export CPLUS_INCLUDE_PATH="${LLVM_INCLUDEDIR}/llvm/:${LLVM_INCLUDEDIR}/llvm-c/:${CLANG_HEADERS}:${GPP_INCLUDE_PATHS}:${CLANG_INCLUDE_PATHS}" export C_INCLUDE_PATH="${LLVM_INCLUDEDIR}/llvm-c/:%{_includedir}" %endif %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 %else %ifarch %{arm} %define _barch armel %if 0%{skipnative} %else export CFLAGS="${CFLAGS} -U__GNUC_MINOR__ -D__GNUC_MINOR__=3 -O2 --param=ssp-buffer-size=32 -fdiagnostics-color=never -march=armv7-a -mtune=cortex-a8 -mlittle-endian -mfpu=neon -mfloat-abi=softfp -Wp,-D__SOFTFP__ -Wno-error=inline-asm -integrated-as -Wno-ignored-attributes -Wno-switch-enum -Wno-switch -Wno-error=switch -Wno-error=switch-enum -w" export CPPFLAGS="${CPPFLAGS} -U__GNUC_MINOR__ -D__GNUC_MINOR__=3 -O2 --param=ssp-buffer-size=32 -fdiagnostics-color=never -march=armv7-a -mtune=cortex-a8 -mlittle-endian -mfpu=neon -mfloat-abi=softfp -Wp,-D__SOFTFP__ -Wno-error=inline-asm -integrated-as -Wno-ignored-attributes -Wno-switch-enum -Wno-switch -Wno-error=switch -Wno-error=switch-enum -w" export CXXFLAGS="${CXXFLAGS} -U__GNUC_MINOR__ -D__GNUC_MINOR__=3 -O2 --param=ssp-buffer-size=32 -fdiagnostics-color=never -march=armv7-a -mtune=cortex-a8 -mlittle-endian -mfpu=neon -mfloat-abi=softfp -Wp,-D__SOFTFP__ -Wno-error=inline-asm -integrated-as -Wno-ignored-attributes -Wno-switch-enum -Wno-switch -Wno-error=switch -Wno-error=switch-enum -w" %endif %else # write the paths in general! %endif %endif %endif %endif %define _buildtype %{dotnet_buildtype} %define _reldir bin/Product/Linux.%{_barch}.%{_buildtype} %define _clrdebug 0 %define _paldebug 0 %if 0%{support_test} %define testopt '' %else %define testopt 'skiptests' %endif %if 0%{_clrdebug} export COMPlus_LogEnable=1 export COMPlus_LogLevel=10 export COMPlus_LogToFile=1 export COMPlus_LogFile="clr.log" %else export COMPlus_LogEnable=0 %endif %if 0%{_paldebug} export PAL_DBG_CHANNELS="+all.all" export PAL_DBG_CHANNELS="+PAL.TRACE:-FILE.ERROR" export PAL_API_TRACING="pal.log" %else export PAL_DBG_CHANNELS="" %endif %if 0%{skipmscorlib} %if 0%{skipnative} # No build native and mscorlib. %else # Build native only. ./build.sh %{_barch} %{_buildtype} clang3.8 skipmscorlib skipgenerateversion skipnuget %{testopt} cmakeargs -DFEATURE_GDBJIT=TRUE cmakeargs -DFEATURE_DBGIPC=0 %endif %else %if 0%{skipnative} # Build mscorlib only. ./build.sh %{_barch} %{_buildtype} -skiprestore skipnative skipnuget %{testopt} %else # Build native and mscorlib. ./build.sh %{_barch} %{_buildtype} clang3.8 skipgenerateversion -skiprestore skipnuget %{testopt} cmakeargs -DFEATURE_GDBJIT=TRUE cmakeargs -DFEATURE_DBGIPC=0 %endif %endif echo %{CORECLR_GIT_HASH} > .clrinfo %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} # .NET & Mono CoreOverlay %define tizennetdir tizen.net mkdir -p %{buildroot}%{_datadir}/%{tizennetdir} %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}/System.Globalization.Native.so %{buildroot}%{_datadir}/%{netcoreappdir} ln -sf ../%{netcoreappdir}/corerun %{buildroot}%{_datadir}/%{dotnetdir}/corerun # make link for .NET CoreOverlay ln -sf ../%{netcoreappdir}/corerun %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libclrjit.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libcoreclr.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libdbgshim.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libmscordaccore.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libmscordbi.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libsos.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/libsosplugin.so %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/System.Globalization.Native.so %{buildroot}%{_datadir}/%{tizennetdir} # extra cp %{_reldir}/coreconsole %{buildroot}%{_datadir}/%{dotnetfwdir} cp %{_reldir}/crossgen %{buildroot}%{_datadir}/%{dotnetfwdir} cp %{_reldir}/ilasm %{buildroot}%{_datadir}/%{dotnetfwdir} cp %{_reldir}/ildasm %{buildroot}%{_datadir}/%{dotnetfwdir} # test cp -rf bin/obj/Linux.%{_barch}.%{_buildtype}/tests/src %{buildroot}%{_datadir}/%{dotnettestdir} # info cp -rf .clrinfo %{buildroot}%{_datadir}/%{tizennetdir} %endif %if 0%{skipmscorlib} %else cp %{_reldir}/System.Private.CoreLib.dll %{buildroot}%{_datadir}/%{netcoreappdir} cp %{_reldir}/SOS.NETCore.dll %{buildroot}%{_datadir}/%{netcoreappdir} # make link for .NET CoreOverlay ln -sf ../%{netcoreappdir}/System.Private.CoreLib.dll %{buildroot}%{_datadir}/%{tizennetdir} ln -sf ../%{netcoreappdir}/SOS.NETCore.dll %{buildroot}%{_datadir}/%{tizennetdir} %endif %if 0%{skipnative} %else %files %manifest %{name}.manifest %dir %{_datadir}/%{dotnetdir} %dir %{_datadir}/%{netcoreappdir} %dir %{_datadir}/%{tizennetdir} %{_datadir}/%{netcoreappdir}/corerun %{_datadir}/%{netcoreappdir}/*.so %{_datadir}/%{tizennetdir}/* %{_datadir}/%{tizennetdir}/.clrinfo %{_datadir}/%{dotnetdir}/corerun %files extra %manifest %{name}.manifest %dir %{_datadir}/%{dotnetfwdir} %{_datadir}/%{dotnetfwdir}/* %files test %manifest %{name}.manifest %dir %{_datadir}/%{dotnettestdir} %{_datadir}/%{dotnettestdir}/* %endif %if 0%{skipmscorlib} %else %files -n mscorlib %manifest %{name}.manifest %{_datadir}/%{netcoreappdir}/*.dll %{_datadir}/%{tizennetdir}/*.dll %endif %changelog * Fri Jan 22 2016 MyungJoo Ham - 0.0.1-1 - Initial spec file for corerun