本文的目的
宣傳龍芯團隊的工作,對於關心進度、希望嘗試的朋友提供參考
- 6月中下旬,龍芯團隊釋出 coreclr 倉庫
- 7月7日,龍芯團隊釋出 corefx、core-setup 倉庫
- 7月9日,龍芯團隊釋出 dotnet 運行時、aspnet core 運行時與 sdk 的 EA 版本,見 loongson-dotnet/releases
寫在開始前
我們的主要業務基於 dotnet core 2.x 與 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架構列表中還不包含龍芯,且在 gitlab issue 中表示官方當前沒有對 MIPS 的支持計划。
官方支持的具體操作系統與 CPU 架構列表見 [Download .NET Core 3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1
6月下旬,龍芯團隊宣布在 dotnet/coreclr 基礎上完成了MIPS64 的移植工作 Open-sourcing CoreCLR MIPS64 Port #38069,計划實現 3.x 版本並貢獻到上游 dotnet/runtime。
按照相關 issue 里的指引,這里對移值倉庫進行了編譯和一些測試。
具體的進度
作為下游開發者,想知道距離生產環境使用還有多遠,必須先提及 dotnet core 應用程序的發布/部署方式
1. dotnet core 支持兩種方式的發布/部署
- 獨立應用(self-contained)
- 依賴於運行時(runtime-dependent)
前者包含可執行文件(exe),無法跨平台;后者生成了跨平台的二進制文件(dll),需要運行環境預先安裝好運行時。關於部署策略的詳細信息,可以參考.NET Core application publishing overview。
發布獨立應用需要針對特定操作系統及 CPU 架構編譯並包含相應運行時,實際開發中我們以依賴於運行時的方式交付,配合預先准備的包含運行時(runtime)的 docker 鏡像完成部署。
微軟官方 aspnet core 示例中的 Dockerfile
# ...
FROM mcr.microsoft.com/dotnet/core/runtime:3.1
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet","dotnetapp.dll"]
2. dotnet core 的組成部分
作為編譯型語言,和 Java 源代碼被 javac 編譯為字節碼再交由 JVM 運行一樣,csharp/vb.net 等源代碼被編譯為內容主要是 IL(中間語言,平台無關)的 Windows PE 文件(可用於所有操作系統),然后交由 CLR 運行。
dotnet core 由以下若干部分組成:
- 運行時與框架庫,包含 .NET Core Runtime 與 ASP.NET Core Runtime,平台特定
- SDK 和編譯器:開發相關
- dotnet 命令:啟動 dotnet 應用及作為交互式工具鏈
mono,unity3d 都是運行時實現,在此略提及
由前文的 Dockerfile 可以看到,依賴於運行時的 dotnet core 應用通過 dotnet xxxx.dll
運行,這里有若干層意義:
- dotnet 提供了 Host(宿主/主機)能力,因為依賴於運行時(runtime-dependent)的 dotnet core 應用並不是可執行文件,需要類似 JVM 的機制運行起來
- dotnet 以交互式命令將 runtime 與 sdk 集合在一起,成為完整的工具鏈
而 dotnet/coreclr 編譯結果並不包含可執行的 dotnet 命令,運行/測試已發布的 dotnet core 應用有以下選擇
- 編寫本機/原生代碼,參考 Write a custom .NET Core host to control the .NET runtime from your native code。
- 使用編譯得到的 corerun,參考 Using CoreRun To Run .NET Core Application。
當前的交付/部署體驗都是通過 dotnet 命令進行的,獲取該命令需要更多的工作,接下來是龍芯團隊的移值工作的說明。
龍芯團隊的工作
龍芯團隊的工作在 19 年 7 月份開始,當時的 dotnet core源碼結構、功能與現在的變更如下表。
原倉庫 | 移值倉庫 | 功能 | 釋出 | 變更 |
---|---|---|---|---|
dotnet/coreclr | gsvm/coreclr | 運行時源碼 | 合並入 dotnet/runtime | |
dotnet/corefx | gsvm/corefx | 標准庫源碼 | 2020/7/7 | 合並入 dotnet/runtime |
dotnet/core-setup | gsvm/core-setup | 編譯倉庫 | 2020/7/7 | 合並入 dotnet/runtime |
dotnet/core-setup 比較特殊,它是用來用來編譯 runtime,類庫和宿主程序的倉庫,注意直到這一步 dotnet 命令才終於可用。
具體的編譯相關命令已從這里移除,避免過時信息產生誤導,更及時准確的文檔請自行前往 github 倉庫 獲取。
- 7月7日,龍芯團隊釋出 corefx、core-setup 倉庫
- 7月9日,龍芯團隊釋出 dotnet 運行時、aspnet core 運行時與 sdk 的 EA 版本,見 loongson-dotnet/releases
在龍芯操作系統上下載 sdk 文件 dotnet-sdk-3.0.101-ea-20200709-linux-loongson3a.tar.gz ,解壓並設置 PATH
$ wget https://github.com/gsvm/loongson-dotnet/releases/download/ea-20200709/dotnet-sdk-3.0.101-ea-20200709-linux-loongson3a.tar.gz
$ mkdir dotnet-sdk
$ tar -xzf dotnet-sdk-3.0.101-ea-20200709-linux-loongson3a.tar.gz -C dotnet-sdk
$ export PATH=$(pwd)/dotnet-sdk:$PATH
接下來是我們使用 dotnet 進行一次 hello world 演示。
熟悉的輸出,恭喜龍芯團隊!!!
leoninew 原創,轉載請注明來自博客園