Skip to content

新增 WoA (Windows ARM64) 支持#366

Merged
ccmywish merged 6 commits into
RubyMetric:devfrom
NewbieXvwu:dev
Jul 23, 2026
Merged

新增 WoA (Windows ARM64) 支持#366
ccmywish merged 6 commits into
RubyMetric:devfrom
NewbieXvwu:dev

Conversation

@NewbieXvwu

Copy link
Copy Markdown
Contributor

AI 使用披露:本 PR 使用了 AIGC 技术生成相关代码。虽已尽力进行认真人工审查,但限于个人能力,仍难免有所纰漏,恳请维护者斧正。

问题描述

  1. 此 PR 新增了 WoA 支持,并将 Windows ARM64 二进制编译添加到 Github Action 构建流程中
  2. 与此 PR 相关的 issue 或任务: N/A

已在 Apple Silicon 虚拟机中进行测试,可正确运行。测试系统版本为最新的 Windows 11 26H1,系近期出货的 WoA 产品预装的 Windows 版本。

PixPin_2026-07-21_22-50-40 PixPin_2026-07-21_22-54-15

方案与实现

  • 新增 .github/workflows/build-on-Windows-ARM64.yml:使用 GitHub 官方 windows-11-arm runner + MSYS2 CLANGARM64 原生工具链,复用现有的 make build-in-ci-release-mode 编译出 chsrc-aarch64-windows.exe,并上传至 pre release。

  • 重命名 build-on-Windows.ymlbuild-on-Windows-x64x86.yml:为获得更好的区分度,重命名了原构建 x64/x86 Windows 的工作流文件,并将 name 改为「构建于 Windows x64x86」,以与新增的 ARM64 workflow 区分。
    ⚠️ 此项更改为我个人拙见,如维护者有别的方案恳请指出。

  • Makefile / justfile:Windows 下 clang 的 target triple 不再硬编码 x86_64,改为按架构自适应(Makefile 依据 $MSYSTEM_CARCH,justfile 使用 arch()),使 CLANGARM64环境下也能正确编译,避免误建 x86_64。

  • src/framework/core.cchsrc_get_cpuarch() 增加 PROCESSOR_ARCHITECTURE_ARM64(→ aarch64)分支,并改用 GetNativeSystemInfo,避免原生 ARM64 构建检测失败退出,同时让 x64 版在 WoA 环境下模拟运行时也能报告真实架构。

  • src/recipe/os/pacman/MSYS2.c:补全 ucrt64 / clang64 / clangarm64(WoA 使用)三个 mirrorlist 的备份。

  • tool/installer.ps1:识别 ARM64(Win32_Processor.Architecture = 12)并映射到 aarch64,使一键安装脚本可用于 WoA。

  • README.md:Windows 下载区新增 ARM64/WoA 手动下载说明。


测试

  • 本机运行:Apple Silicon 虚拟机 + Windows 11 26H1,原生 ARM64 版 chsrc 运行正常(见上方截图)。
  • CI 构建build-on-Windows-ARM64.yml 已在 GitHub Actions 的 windows-11-arm runner 上构建通过,产物 chsrc-aarch64-windows.exe 正常生成并上传。

仍需项目维护者审查的

  • build-on-Windows.yml的重命名: 为与新增的build-on-Windows-ARM64.yml区分开来,我将其进行了重命名。若有更好方案,请随时指出。
  • winget、Scoop 分发:我对此不熟悉。希望能联系上这两个分发路径的维护者,请求他们添加对 ARM64 的支持。

- 新增 build-on-Windows-ARM64.yml: 使用 windows-11-arm runner + MSYS2
  CLANGARM64 工具链编译原生 aarch64 版 chsrc-aarch64-windows.exe
- 重命名 build-on-Windows.yml -> build-on-Windows-x64x86.yml 以区分
- Makefile/justfile: Windows 下 clang 的 target triple 改为按架构自适应,
  不再硬编码 x86_64,使 CLANGARM64 下也能正确编译
- installer.ps1: 识别 ARM64 (架构值 12) 并映射到 aarch64
- README: 增加 ARM64/WoA 手动下载说明
chsrc_get_cpuarch() 的 Windows 分支:
- 增加 PROCESSOR_ARCHITECTURE_ARM64 分支,映射为 aarch64,
  避免原生 ARM64 构建走到 default 分支报错退出
- 改用 GetNativeSystemInfo,使 x64 版在 WoA 上模拟运行时
  也能报告真实的原生架构,而非被模拟的 x86_64
原先只备份 mingw32/mingw64/msys,遗漏了 ucrt64/clang64/clangarm64
(clangarm64 为 WoA 上使用的环境)。sed 替换本就通过 mirrorlist* 通配
覆盖了这些文件,此处补齐备份以保证可完整还原。
@github-actions

Copy link
Copy Markdown

Hi @NewbieXvwu,

❤️ 感谢你的贡献!你的 PR 当前基于 main 分支,请修改使用 dev 分支

@NewbieXvwu
NewbieXvwu changed the base branch from main to dev July 21, 2026 15:56

@ccmywish ccmywish left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍👍👍非常好的PR,十分全面,欢迎你参与项目!

还需要做几个小的修订即可:

  1. 根据文档,第一次贡献者需要在这里添加信息

  2. 所有你修改的文件,都在文件头(若有)/ recipe 里的 ..set_saucier() 函数里增加你的个人信息

  3. 根据微软的这篇文章,术语均采用 Arm64,因此所有相关位置、文件名都需要规范书写

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个文件还预编译了安卓,所以改名不必要

@ccmywish ccmywish added the Windows Windows相关 label Jul 22, 2026
@ccmywish ccmywish added this to the v0.2.6 milestone Jul 22, 2026
with:
tag_name: pre
files: |
chsrc-aarch64-windows.exe

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

由于 Windows 的消费者面对的大部分是 Arm64 这个称呼,应该考虑直接使用 arm64 这个名称。

Comment thread README.md Outdated
# x86
curl -L https://gitee.com/RubyMetric/chsrc/releases/download/pre/chsrc-x86-windows.exe -o chsrc.exe

# arm64/aarch64 (WoA, Windows on ARM)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同理

@NewbieXvwu

Copy link
Copy Markdown
Contributor Author

@ccmywish 已进行修改,请麻烦审阅。

@ccmywish ccmywish left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍👍👍

@ccmywish
ccmywish merged commit b800da5 into RubyMetric:dev Jul 23, 2026
@ccmywish

Copy link
Copy Markdown
Contributor

@NewbieXvwu

代码都非常全面,没有遗漏的细节,感谢你付出的时间和精力,欢迎你成为我们30多个贡献者中的一员! Happy changing source~ ❤️

已经预编译好了,可在 pre release 查看: https://github.com/RubyMetric/chsrc/releases#release-pre

@ccmywish

Copy link
Copy Markdown
Contributor

Hi, @niheaven 有没有空帮我们给 scoop 增加新的 Arm64 支持?

@ccmywish

ccmywish commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Hi, @rocascent

你是之前的 @Gn3po4g吗 ?从README中看到曾经是 @Gn3po4g 和 @niheaven 帮助在 scoop 上添加了分发渠道,但是现在找不到 @Gn3po4g 了。

有空帮忙给 scoop 增加新的 Arm64 支持吗?

并且,chsrc-main.c 中记录了你的贡献信息,你可修改一下。

chef_register_contributor ("@Gn3po4g",        "Peng Gao",       "gn3po4g@outlook.com",            NULL);

@ccmywish

Copy link
Copy Markdown
Contributor

Hi, @YU-7

好久没见,有没有空帮忙对 winget 增加一下新的 Arm64 支持?

@ccmywish

ccmywish commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Hi, @MindFlowLab

刚才 @ 错你了,许多文件记录了你的贡献信息,但是我不知道你原来的 ID 叫什么了,你可统一在 chsrc-main.c 中修改一下。

@MindFlowLab

MindFlowLab commented Jul 23, 2026 via email

Copy link
Copy Markdown
Contributor

@ccmywish

Copy link
Copy Markdown
Contributor

@Dragon1573

看到你对 winget 生态许多的贡献,应该相当熟悉 winget。我不知道 @YU-7 是否有时间处理对 Arm64 的支持以及是否需要你的协助或帮助,所以提前 @ 你一下。

并且,你可以直接提交一个PR在 README 中的 winget 安装方式那里添加你的信息,以及在 chsrc-main.c 中添加你的信息。

@Dragon1573

Copy link
Copy Markdown

我不知道 YU-7 是否有时间处理对 Arm64 的支持以及是否需要你的协助或帮助,所以提前 @ 你一下。

21:04:59 D:\...\winget-pkgs  [master ≡] 0ms pwsh
$ gh pr list --state all --repo microsoft/winget-pkgs --search 'RubyMetric.chsrc' --json number --json author --json title --json state --json headRepositoryOwner --json headRefName |
> ConvertFrom-Json | ForEach-Object { $_.author = $_.author.login; $_.headRepositoryOwner = $_.headRepositoryOwner.login; $_ } | Sort-Object -Property number | Format-Table

author     headRefName                                                 headRepositoryOwner number state  title
------     -----------                                                 ------------------- ------ -----  -----
YU-7       RubyMetric.chsrc-0.1.9-34423fd4-61ab-4e12-92c0-23b109d838d4 YU-7                199510 MERGED New package: RubyMetric.chsrc version 0.1.9
Dragon1573 issues/243759                                               Dragon1573          243880 MERGED New package: RubyMetric.chsrc version 0.2.0
Dvd-Znf    RubyMetric.chsrc-0.2.2-F71C0B17A1A14F9CBF686D7884871443     Dvd-Znf             286843 CLOSED New version: RubyMetric.chsrc version 0.2.2
Dvd-Znf    RubyMetric.chsrc-0.2.2-ED6578FA9D6F4D89A64B9849C474C769     Dvd-Znf             287864 MERGED New version: RubyMetric.chsrc version 0.2.2
ccmywish   RubyMetric.chsrc-0.2.3-5D8A9B44AE4B4443A04957EEC3F99FEB     RubyMetric          301646 MERGED New version: RubyMetric.chsrc version 0.2.3
ccmywish   RubyMetric.chsrc-0.2.4-823E1349599B4297B84042F8B04E3893     RubyMetric          327079 MERGED New version: RubyMetric.chsrc version 0.2.4
ccmywish   RubyMetric.chsrc-0.2.5-1B8B0EA7807E43DB9CF39319E7686DE8     RubyMetric          351987 MERGED New version: RubyMetric.chsrc version 0.2.5

v0.2.3 起,新版本发布已经被 @RubyMetric 正式接管维护。根据 pre 发布的所有 Assets , Windows 下的所有构建产物都是 .exe ,因此 GitHub Workflows 配置文件无需任何更改。

但在 v0.2.6 被自动化发布后可能需要一个人工 Update manifest 过程把 arm64 架构文件追加进去, Komac 貌似不会在 komac update 过程中把额外的安装程序添加到 manifests 中。完成追加后自 v0.2.7 开始应该就能自动地更新 arm64 / x64 / x86 全架构了。

@Dragon1573

Copy link
Copy Markdown

有空帮忙给 scoop 增加新的 Arm64 支持吗?

我在 叛逃 到 WinGet 之前也是用 Scoop 的, chsrc 自身的 App Manifest 不涉及复杂的 Pre/Post installation script ,添加一个 updater URL 应该还是很简单的。

@Dragon1573

Copy link
Copy Markdown

添加一个 updater URL 应该还是很简单的。

Scoop 那边需要同时增加 arm64 Installer URL 和 Updater URL ,等待 v0.2.6 正式发布才能继续进行。

@YU-7

YU-7 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Hi, @YU-7

好久没见,有没有空帮忙对 winget 增加一下新的 Arm64 支持?

我转移到 macOS 了,没 Windows 系统可以测试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Windows Windows相关

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants