Skip to content

xim: archs 不含当前架构时应直接拒绝,而不是下载到 404 #367

Description

@Sunrisepeak

现象

ci-aarch64-fresh-install 的 self-host 步在 aarch64 runner 上失败:

[error] download failed for xim:binutils@2.42: HTTP 404
[error] download failed for xim:gcc@16.1.0: HTTP 404
error: host toolchain for build.mcpp ('gcc@16.1.0'): xlings install of 'xim:gcc@16.1.0' failed

该 job 自 2026-08-03 起在 main 上一直红。此前它更早地死在自举 pin 上
(xlings: version '2026.8.5.3' not found for 'mcpp',已在 #366 修掉),
所以这一层是被那次修复暴露出来的,不是新引入的。

根因

xim-pkgindexpkgs/g/gcc.lua 声明 archs = { "x86_64" } —— gcc 这个包
本来就没有 aarch64 载荷,404 是必然的。

而 mcpp 在 aarch64 上仍然请求它,是因为 host 工具链只按 OS 选择:

[toolchain]
default = "gcc@16.1.0"     # ← 在 aarch64 上同样命中

[target.aarch64-linux-musl] 只决定 target 工具链(而且是 host-aware 的,
所以那一半是对的);build.mcpp 的 host 编译走 [toolchain],那张表的键是
default / macos / windows,没有 arch 这根轴

两个可分别处理的缺口

  1. 索引侧:xim 应当在 archs 不含当前 arch 时给出「本平台无此包」的
    诊断,而不是照常发起下载再 404。现在的报错要读三层才能知道原因。
  2. mcpp 侧:host 工具链的选择缺 arch 轴。一个包在 x86_64 上可用、在
    aarch64 上不存在,是常态而不是异常;[toolchain] 需要能表达它,否则
    aarch64 用户唯一的出路是改 manifest。

第 2 条是设计问题,不是一行修复:[toolchain] 的键空间目前是 OS,加 arch
要么走 cfg(...) 谓词(与 [target.'cfg(...)'] 同一套文法,一致但更重),
要么承认 host 工具链本身就该由 triple 索引。先记下来。

影响

不影响任何 x86_64 / macOS / Windows 路径,也不影响 aarch64 上已发布二进制
的使用 —— 只影响在 aarch64 上从源码自举。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions