用 GPT-5 完成 Flutter/Dart 的 LoongArch 全栈移植:从 Dart VM 到 Flutter Engine 与 eLinux

发布于

# Flutter/Dart LoongArch 移植现状:从 Dart VM 到 Flutter Engine 、eLinux 与新旧世界 ABI

本文记录截至 **2026 年 8 月 7 日** `Flutter-Dart-loong64` 项目的实际状态。

项目地址: [https://github.com/Flutter-Dart-loong64](https://github.com/Flutter-Dart-loong64)

本文主要根据当前源码、实际维护分支、近期提交和 Release 整理。部分 README 的更新速度可能落后于代码,因此涉及当前实现状态时,以代码和发布产物为准。

## 为什么会有这么多仓库?

`Flutter-Dart-loong64` 现在已经不是一个“给 Flutter 加个 LoongArch 判断”的小补丁集合。要让 Flutter 真正在 LoongArch Linux 上从开发工具一路跑到最终应用,需要打通的链路实际上是:

```plaintext
textDart VM

Dart JIT / AOT / FFI

Flutter Tool

Flutter Engine

Linux GTK / Sony eLinux Embedder

Skia / Impeller / OpenGL ES / Vulkan 构建依赖

Native Assets / Rust / C/C++ 原生依赖

Flutter 应用
```

其中任何一层不认识 LoongArch,最终结果都可能只是“源码能编译一点”,而不是一个真正能开发、构建和运行 Flutter 应用的平台。目前组织下一共有 **20 个公开仓库**,大致可以分成六组。

| 分类 | 仓库 | 作用 |
| ------------ | ----------------------------------------------- | ------------------------------------------------ |
| 核心 | `sdk` | Dart SDK、Dart VM LoongArch 后端 |
| 核心 | `flutter` | Flutter Framework、Flutter Tool,以及当前随 Flutter 仓库维护的 Engine 代码 |
| 核心/历史 | `engine` | 早期独立 Flutter Engine Loong64 移植 |
| eLinux | `flutter-elinux` | Flutter eLinux CLI、构建和产物管理 |
| eLinux | `flutter-embedded-linux` | Sony Embedded Linux Embedder、X11/Wayland/GBM 后端 |
| 发布 | `flutter-loong64-releases` | 新世界 Loong64 Flutter/Dart/Engine SDK |
| 发布 | `flutter-loongarch64-releases` | 旧世界 LoongArch64 / UOS 20 SDK |
| 发布 | `flutter-kylin-v10-loongarch64-releases` | 麒麟 V10 SP1 旧世界 SDK |
| Native Assets | `native` | Dart Native Assets、hooks、code_assets 等 Loong64 适配 |
| Native Assets | `pub-packages` | 临时 Loong64 Native Assets 包镜像 |
| 图形 | `skia` | Skia 构建适配 |
| 图形 | `SPIRV-Cross` | SPIR-V 转换依赖及旧世界兼容 |
| 图形 | `vulkan-deps` | Vulkan/SPIR-V 全套依赖 revision 管理 |
| 应用验证 | `rustdesk` | RustDesk LoongArch Linux 适配 |
| 应用验证 | `flutter-linglong-store` | Flutter Linux 实际应用及早期验证 |
| Rust 依赖 | `nix` | Rust `nix` crate 的 LoongArch 兼容 |
| Rust 依赖 | `mozjpeg` | MozJPEG 原生库 |
| Rust 依赖 | `mozjpeg-sys` | MozJPEG Rust FFI |
| Rust 依赖 | `mozjpeg-rust` | MozJPEG Rust 封装 |
| 项目说明 | `.github` | GitHub Organization 首页及公共说明 |

下面按实际技术链路展开。

---

# 一、Dart SDK:这不是简单增加一个架构字符串

整个移植最底层也是最关键的仓库是:`Flutter-Dart-loong64/sdk`

目前主要维护:`loong64-main` `loong64-next` `oldworld/loongarch64-main` `oldworld/loongarch64`

也就是说,新世界和旧世界从源码分支层面就是两条独立维护线。

## Dart VM 已经有完整的 LoongArch 后端

当前 `loong64-main` 中可以直接看到:

```plaintext
runtime/platform/globals.h
runtime/vm/constants_loong64.h
runtime/vm/compiler/assembler/assembler_loong64.h
runtime/vm/compiler/assembler/assembler_loong64.cc
runtime/vm/compiler/backend/il_loong64.cc
```

这意味着项目所做的并不是:

```c
cppif (arch == "loong64") // 当成别的 CPU
```

而是真正加入了 Dart VM 的 LoongArch 机器后端。

### 架构识别

Dart Platform 层已经识别:

```c
cpp__loongarch64
HOST_ARCH_LOONG64
TARGET_ARCH_LOONG64
```

并进入 Dart 自己的 Host/Target 架构体系。

### 寄存器和 ABI

`constants_loong64.h` 中定义了 LoongArch:

* 通用寄存器
* 浮点寄存器
* SIMD/向量寄存器
* Dart VM 专用寄存器
* 参数寄存器
* 返回值寄存器
* 栈指针
* Frame Pointer
* Thread Register
* Calling Convention

因此 JIT/AOT 生成出来的已经是真正的 LoongArch 机器码。

### Assembler

`assembler_loong64.*` 实现了 Dart VM 使用的 LoongArch 汇编生成层,包括:

* 分支
* Load / Store
* 位移
* 算术运算
* Frame 操作
* 寄存器保存/恢复
* 对象分配相关操作
* 内存屏障
* VM Runtime 调用辅助

### IL Backend

`il_loong64.cc` 则负责把 Dart Compiler IR 转换成 LoongArch 指令。

所以 Dart:

```plaintext
Dart Source

Kernel

Dart Compiler IR

LoongArch IL Backend

LoongArch Assembler

LoongArch Machine Code
```

这条链路已经存在。

### Stub Compiler

Dart VM 中还有大量不能简单交给普通 C++ 编译器完成的 Stub,例如:

* 对象快速分配
* Runtime 调用
* Write Barrier
* GC 相关路径

---

原文链接:[点击查看](https://www.v2ex.com/t/1234712)

评论

暂无评论。

0.059249s