tg-xtask 技术文档
路径:
xtask类型:二进制 crate 分层:工具层 / 根工作区统一命令入口 版本:0.3.0-preview.3文档依据:Cargo.toml、src/main.rs、src/arceos/mod.rs、src/arceos/build.rs、src/arceos/run.rs、src/starry/mod.rs、src/starry/build.rs、src/starry/run.rs、src/axvisor/mod.rs
tg-xtask 是整个 TGOSKits 根工作区的宿主侧命令入口。它不负责底层构建实现,也不属于任何目标镜像;它的核心职责是把 ArceOS、StarryOS、Axvisor 的常用构建/运行/测试操作收敛成统一 CLI,并把实际执行委托给 axbuild 或少量工作区内辅助逻辑。
1. 架构设计分析
1.1 设计定位
从 src/main.rs 可以看出,tg-xtask 是一个非常典型的“命令分发器”:
- 负责解析 CLI
- 负责发现工作区包和测试包
- 负责组装各子系统需要的参数
- 负责把真正构建执行交给
axbuild或子模块
因此它更接近“统一前台入口”,而不是“构建后端”。
1.2 顶层命令结构
当前 CLI 只有三个顶层动作族:
teststdaxvisorstarryarceos
arceosbuildrun
starrybuildrunrootfsimg(已废弃,转发到rootfs)
可以看到,tg-xtask 主要覆盖“根工作区统一维护任务”和“ArceOS/StarryOS 的用户常用动作”;Axvisor 目前只在 test axvisor 上接入。
1.3 真实执行链路
不同子命令背后的真实实现路径并不相同:
这张图说明了一个关键事实:tg-xtask 本身并不直接处理构建细节,除了 std 测试这类非常简单的循环调用。
1.4 test std 的真实行为
run_std_test_command() 的实现非常具体:
- 通过
cargo_metadata获取当前工作区成员 - 读取
scripts/test/std_crates.csv - 校验 CSV 中的包名是否都属于当前工作区,且没有重复
- 对每个包顺序执行
cargo test -p <package> - 汇总失败列表并最终返回错误
这说明 test std 不是“跑所有支持 std 的 crate”,而是“跑 CSV 白名单中的 crate”。
1.5 test arceos 的真实行为
run_arceos_test_command() 会:
- 通过
cargo_metadata自动发现test-suit/arceos下的工作区包 - 可选按 target triple 解析目标架构
- 为每个包构造
arceos::RunArgs - 对 AArch64 测试自动倾向启用
plat_dyn - 使用
RunScope::PackageRoot逐个执行 QEMU 测试
这意味着 ArceOS 测试不是写死的包列表,而是“目录发现 + 统一运行模板”。
1.6 StarryOS 路径的特殊性
StarryOS 子命令在复用 axbuild 的同时,增加了两层 Starry 专属逻辑:
rootfs:根据架构准备默认磁盘镜像Starry::test_qemu():为starryos-test注入默认 success/fail 正则,并在必要时自动准备 rootfs
所以 tg-xtask 在 StarryOS 侧并不是简单转发,而是做了少量系统特定编排。
2. 核心功能说明
2.1 主要功能
- 作为根工作区统一 CLI 入口
- 统一封装 ArceOS 的构建、运行和测试动作
- 统一封装 StarryOS 的构建、运行、rootfs 准备和测试动作
- 驱动 Axvisor 的标准 QEMU 测试入口
- 维护
stdcrate 白名单测试流程
2.2 与 axbuild 的关系
tg-xtask 和 axbuild 容易一起提,但二者职责完全不同:
tg-xtask:命令行入口、参数解析、目录发现、工作区级调度axbuild:真正的宿主侧构建库、QEMU 编排库、配置生成后端
一般来说:
- 要改 CLI 体验,优先看
tg-xtask - 要改底层构建与 QEMU 行为,优先看
axbuild
2.3 构建期与运行期边界
tg-xtask 是纯宿主侧工具:
- 只在开发机/CI 上运行
- 不会被编入 ArceOS、StarryOS、Axvisor 目标镜像
- 不参与运行时初始化和系统服务提供
这是理解它定位的最关键一点。
3. 依赖关系图谱
3.1 关键直接依赖
axbuild:绝大多数构建/运行能力都委托给它。cargo_metadata:工作区包发现与验证。clap:CLI 参数解析。tokio:异步主入口,用于执行异步构建/测试路径。