feat: promote riscv64-linux-musl from planned to verified cross target - #402
feat: promote riscv64-linux-musl from planned to verified cross target#402lildengzi wants to merge 2 commits into
Conversation
Review:代码侧正确,3 处要处理前置依赖已满足:openxlings/xim-pkgindex#585 已合入 main( 一、必须处理1. 与 main 冲突( 实测 trial merge:只有 2. 漏改两处文档
促级之后真实输出会变成 3. 仓库惯例是 二、建议(不阻塞)
三、已核对无误的部分
四、剩下的真实风险CI 这一行要交叉编译 mcpp 和 xlings 本身(两个完整的 C++23 module 工程),而 PR 里的本地实测是 toy_kernel + 我拿 #585 的工具链做了一轮针对性压测( 结论:rebase + 补两处文档 + CHANGELOG 之后可以合。 |
|
明白,这个改动涉及 CI 矩阵和完整交叉编译验证,影响面较大。我觉得还是先在日常使用中观察一下工具链稳定性,暂时搁置。工具链本身已在用,等后续确认没问题或有需要再继续推进。 |
- triple.cppm: mark riscv64-linux-musl verified, pin gcc@16.1.0 - cross-build-test.yml: add riscv64-linux-musl qemu matrix row - 103_target_vocabulary.sh: use aarch64-linux-gnu as the planned-tier example - test_linkmodel.cpp: assert riscv64 loader names (musl + glibc) - README/README.zh-CN: riscv64-linux-musl now verified with rv64gc/lp64d note Requires xim riscv64-linux-musl-gcc@16.1.0 (openxlings/xim-pkgindex#585).
`mcpp toolchain list`'s sample output in docs/03-toolchains.md (+ zh) still showed riscv64-linux-musl as `— / planned`; the real output after the promotion is `gcc 16.1.0 / available`. Verified against a built binary, not transcribed. The row that used to illustrate the `planned` status is replaced by aarch64-linux-gnu so the block still shows all three states. 103_target_vocabulary.sh now reads its planned-tier target out of `toolchain list` instead of hardcoding one. That assertion is about the TIER; with a hardcoded triple every promotion silently turns it into a test of something else (riscv64-linux-musl was the second target to go that way), and the check degrades to a skip once no planned target is left.
633b553 to
e811d8f
Compare
Review:代码侧全对,但 payload 不完整,这一行现在合不了按维护者要求接手做完:已 rebase 到 main(yml 冲突已解,README/triple/test 自动合)、补了漏改的两处文档、把 一、阻塞项:riscv64 payload 的 sysroot 里没有内核 UAPI 头本机 CI 同一处停下 —— job 93433367536, 根因在两个 payload 的 sysroot 对比里,很干净: # aarch64(已 verified 的那一行)
$ ls ~/.mcpp/registry/data/xpkgs/xim-x-aarch64-linux-musl-gcc/16.1.0/aarch64-linux-musl/include
... asm/ asm-generic/ drm/ linux/ ... # 内核 UAPI 头齐全
# riscv64(本 PR 要 verified 的那一行)
$ ls ~/.mcpp/registry/data/xpkgs/xim-x-riscv64-linux-musl-gcc/16.1.0/riscv64-linux-musl/include
... 只有 musl 自己的头 ...
$ find ~/.mcpp/registry/data/xpkgs/xim-x-riscv64-linux-musl-gcc -type d -name linux
(空)riscv64 那份是在没有把 Linux kernel headers 装进 sysroot 的情况下构建的(musl-cross-make 的 之前那轮 review 说「工具链本身实测通过」是真的,但验的是 toy_kernel + 修法在上游:重出
二、已经做完、等 payload 就绪即可用的部分
三、结论分支已更新到可合状态,但先不合:合进去等于让 main 常驻一个红的 (这也和作者自己「先观察一下工具链稳定性,暂时搁置」的判断一致 —— 只是现在有了具体的、可执行的解除条件。) 🤖 Generated with Claude Code |
内容
把
riscv64-linux-musl从planned提升为verified交叉目标,与已 verified 的aarch64-linux-musl对齐。src/toolchain/triple.cppm:riscv64-linux-musl状态planned → verified,约定工具链 pingcc@16.1.0。.github/workflows/cross-build-test.yml:cross 矩阵加riscv64-linux-musl行(qemu-riscv64-static,file断言UCB RISC-V),支持矩阵注释同步。tests/e2e/103_target_vocabulary.sh:planned-tier 断言示例改用仍为planned的aarch64-linux-gnu。tests/unit/test_linkmodel.cpp:补 riscv64 loader 断言(muslld-musl-riscv64.so.1+ glibcld-linux-riscv64-lp64d.so.1)。README.md/README.zh-CN.md:平台表riscv64-linux-musl标为 ✅,注明基础rv64gc/lp64dISA,可选扩展(-march=rv64gcv、Zb*)自行指定。前置依赖
本 PR 的 cross-build CI 需要
xim:riscv64-linux-musl-gcc@16.1.0能从索引拉到,该工具链包由 openxlings/xim-pkgindex#585 提供(musl-cross-make 源码构建,gcc 16.1.0,全静态)。两个 PR 联动:#585(工具链包)先合入,本 PR(mcpp 侧 planned→verified)随后。
验证
本地端到端实测(工具链手动装进本机 xpkgs,模拟 #585 合入后的状态):
mcpp build --target riscv64-linux-musl在 toy_kernel(RISC-V 64 freestanding)上完整跑通:riscv64-linux-musl-g++(从本地 payload,不再触发下载).cppm/.cpp/.S源码 →target/riscv64-linux-musl/下产物ELF 64-bit LSB relocatable, UCB RISC-V, RVC, double-float ABI-nostartfiles -nostdlib -static -T link.ld)→ELF 64-bit LSB executable, UCB RISC-V, statically linkedmcpp test linkmodel(12 passed)、mcpp test triple(16 passed)tests/e2e/103_target_vocabulary.sh:OK(planned 断言正确落在 aarch64-linux-gnu)未验证:可选 ISA 扩展集(V 向量、Zb* 位操作)不在本 PR 范围——工具链实测支持
-march=rv64gcv、rv64gc_zba_zbb等编译,但不属于基础三元组,需构建时显式指定,未做运行验证。范围 / 非目标
riscv64-linux-musl是 hosted RISC-V Linux 用户态目标(rv64gc/lp64d基础 ISA,musl),与aarch64-linux-musl同构。riscv64-none-elf、自定义 link.ld、qemu-kernel启动)——mcpp 嵌入式设计(决策 feat: lib-root convention (Levels 1+2) #15)已推迟,本 PR 不含。