Flutter-Dart-loong64 项目的实际状态。> 项目地址: https://github.com/Flutter-Dart-loong64>> 本文主要根据当前源码、实际维护分支、近期提交和 Release 整理。部分 README 的更新速度可能落后于代码,因此涉及当前实现状态时,以代码和发布产物为准。## 为什么会有这么多仓库?Flutter-Dart-loong64 现在已经不是一个“给 Flutter 加个 LoongArch 判断”的小补丁集合。要让 Flutter 真正在 LoongArch Linux 上从开发工具一路跑到最终应用,需要打通的链路实际上是: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:这不是简单增加一个架构字符串整个移植最底层也是最关键的仓库是:textFlutter-Dart-loong64/sdk目前主要维护:textloong64-mainloong64-nextoldworld/loongarch64-mainoldworld/loongarch64oldworld-loongarch64也就是说,新世界和旧世界从源码分支层面就是两条独立维护线。## Dart VM 已经有完整的 LoongArch 后端当前 loong64-main 中可以直接看到:textruntime/platform/globals.hruntime/vm/constants_loong64.hruntime/vm/compiler/assembler/ assembler_loong64.h assembler_loong64.ccruntime/vm/compiler/backend/ il_loong64.ccruntime/vm/compiler/ stub_code_compiler_loong64.cc这意味着项目所做的并不是:cppif (arch == "loong64") // 当成别的 CPU而是真正加入了 Dart VM 的 LoongArch 机器后端。### 架构识别 Dart Platform 层已经识别:cpp__loongarch64HOST_ARCH_LOONG64TARGET_ARCH_LOONG64并进入 Dart 自己的 Host/Target 架构体系。### 寄存器和 ABIconstants_loong64.h 中定义了 LoongArch:* 通用寄存器* 浮点寄存器* SIMD/向量寄存器* Dart VM 专用寄存器* 参数寄存器* 返回值寄存器* 栈指针* Frame Pointer* Thread Register* Calling Convention 因此 JIT/AOT 生成出来的已经是真正的 LoongArch 机器码。### Assemblerassembler_loong64.* 实现了 Dart VM 使用的 LoongArch 汇编生成层,包括:* 分支* Load / Store* 位移* 算术运算* Frame 操作* 寄存器保存/恢复* 对象分配相关操作* 内存屏障* VM Runtime 调用辅助### IL Backendil_loong64.cc 则负责把 Dart Compiler IR 转换成 LoongArch 指令。所以 Dart:textDart Source ↓Kernel ↓Dart Compiler IR ↓LoongArch IL Backend ↓LoongArch Assembler ↓LoongArch Machine Code这条链路已经存在。### Stub CompilerDart VM 中还有大量不能简单交给普通 C++ 编译器完成的 Stub ,例如:* 对象快速分配* Runtime 调用* Write Barrier* GC 相关路径*