构建编译Codewhale的Windows on Arm版本的教程

如题:最近我打算在我的matebook e go,一台win on arm的设备上写代码。但突然发现,在Codewhale的GitHub仓库中,并没有提供winarm版本。于是我决定自己进行编译。作为Rust项目,Codewhale其实还是很好编译的。但其实也有很多小坑。笔者把编译当中遇到的问题记在这里。

当然,你也可以到我的仓库当中下载已经编译好的二进制exe:
https://github.com/sakuraflows/codewhale_winarm

问题:

cd到仓库目录,执行cargo build --release,出现如下报错:



warning: aws-lc-sys@0.41.0: Environment Variable found 'CARGO_ENCODED_RUSTFLAGS': ''
warning: aws-lc-sys@0.41.0: Emitting configuration: cargo:rustc-cfg=universal
warning: aws-lc-sys@0.41.0: Building with: CC
warning: aws-lc-sys@0.41.0: Symbol Prefix: Some("aws_lc_0_41_0")
warning: aws-lc-sys@0.41.0: Target platform: 'aarch64-pc-windows-msvc'
warning: aws-lc-sys@0.41.0: Windows ARM64 (aarch64-pc-windows-msvc) requires clang-cl. Install the 'C++ Clang Compiler for Windows' component in Visual Studio Build Tools, or set CC to a working clang-cl. See User Guide: https://aws.github.io/aws-lc-rs/index.html
warning: aws-lc-sys@0.41.0: Compilation of 'stdalign_check.c' failed - Err(Error { kind: ToolExecError, message: "command did not execute successfully (status code exit code: 2): \"C:\\\\Program Files\\\\Microsoft Visual 
。。。。。
warning: build failed, waiting for other jobs to finish...
error: failed to compile `deepseek-tui v0.8.39`, intermediate artifacts can be found at `C:\Users\***\AppData\Local\Temp\cargo-installuYij5Y`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_BUILD_BUILD_DIR` to that path.

从报错中可以看出,问题出在aws-lc-sys这个crate的编译上。我的系统是Windows ARM64 (aarch64-pc-windows-msvc),而aws-lc-sys编译所需的ARM汇编文件(.S)和某些 GCC/Clang专有选项(如 -march=armv8.4-a+sha3),微软的 MSVC 编译器(cl.exe)无法处理。

这属于Rust编译不便的经典问题了,但其实锅也不能让Rust全背.而且编译器里都已经给你写出来问题出在哪里了.

解决方案

这里给出两种方案,供大家选择,我使用的是方案一:

首先,无论使用哪种方案,你都要安装rust.关于安装rust的教程,请参看在Windows上入门Rust的第一步

方案一:Visual Studio Installer 添加组件

此方案较简单,但安装的依赖较多.

首先要下载如下内容:

  • Codewhale
  • 下载并安装rust
  • 下载visual studio installer

然后打开vs installer—–单个组件,安装如下组件:

  • 适用于x64/x86的MSVC生成工具(最新版)
  • 适用于ARM64/ARM64EC的MSVC生成工具
  • 适用于Windows的C++Clang 编译器
  • Windows 11 SDK

cd到你下载的Codewhale源码路径,然后执行cargo build --release,输出的编译结果会提示你编译好的exe所在的路径.

或者你直接运行cargo install Codewhale也可以,cargo会为你配置一切,这样做你就可以直接打开powershell执行codewhale就可以使用了.

方法二:单独安装 LLVM(包含 clang-cl)

此方案较复杂,但此方案使用的是开源工具链,编译出的二进制可以应用于商业环境中,而不必担心通过微软visualstudioinstaller安装build tools造成的可能侵权的问题.(当然你前期配置rust环境也要使用gun工具链)

首先需前往llvm project,在release中下载clang+llvm-22.1.6-aarch64-pc-windows-msvc.tar.

将压缩包解压,确保bin\\clang-cl.exe存在.

现在有两个小方案:
1.直接在设备上安装Codewhale:
临时设置变量

$env:CC = "C:\Users\fulde\projects\Codewhale\llvm\bin\clang-cl.exe"
$env:CXX = "C:\Users\fulde\projects\Codewhale\llvm\bin\clang-cl.exe"
$env:PATH = "C:\Users\fulde\projects\Codewhale\llvm\bin;$env:PATH"  # 可选,方便 clang-cl 被调用

执行:cargo cleancargo install



2.或者可以先克隆deepseektui源代码,cd到下载目录,执行cargo build --release.

完成.