zoukankan      html  css  js  c++  java
  • dotnet core 在 MIPS64 下的移值进度:EA 版本已经发布

    本文的目的

    宣传龙芯团队的工作,对于关心进度、希望尝试的朋友提供参考

    • 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 由以下若干部分组成:

    mono,unity3d 都是运行时实现,在此略提及

    由前文的 Dockerfile 可以看到,依赖于运行时的 dotnet core 应用通过 dotnet xxxx.dll 运行,这里有若干层意义:

    1. dotnet 提供了 Host(宿主/主机)能力,因为依赖于运行时(runtime-dependent)的 dotnet core 应用并不是可执行文件,需要类似 JVM 的机制运行起来
    2. dotnet 以交互式命令将 runtime 与 sdk 集合在一起,成为完整的工具链

    而 dotnet/coreclr 编译结果并不包含可执行的 dotnet 命令,运行/测试已发布的 dotnet core 应用有以下选择

    当前的交付/部署体验都是通过 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 原创,转载请注明来自博客园

  • 相关阅读:
    产品开源了(discuz!nt 2.0),顺便将前些时候发的文章做个总结
    一个曾经的"愤青梦"弥衡
    推荐两个web菜单控件(右击和顶部主菜单)
    一本晚看了两年半的书蓝海战略
    Discuz!NT 在线用户功能简介
    我的2007
    ajax.net调用session和cookie
    最新(2010年)搜索引擎优化(SEO)专家工具集合
    Android学习资料大全
    基于.net的aop实现技术
  • 原文地址:https://www.cnblogs.com/leoninew/p/13267314.html
Copyright © 2011-2022 走看看