用 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)
本文记录截至 **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)
评论
暂无评论。