Skip to main content
请使用 PowerShell 7 (pwsh.exe),而不是默认的 powershell.exe。如果遇到问题,请在我们的 Discord 上的 #contributing 频道 中提问。

前置条件

启用脚本执行

默认情况下,禁止运行未经验证的脚本。

系统依赖

Bun v1.1 或更高版本。构建过程使用 Bun 运行其自身的代码生成器。
Visual Studio,并安装“使用 C++ 的桌面开发”工作负载。安装过程中,如果尚未安装适用于 Windows 的 Git,也请一并安装。 使用图形化向导安装 Visual Studio,或通过 WinGet 安装:
安装 Visual Studio 后,需要安装以下工具:
  • LLVM 21.1.8
  • Go
  • Rust(通过 rustup)
  • NASM
  • Perl
  • Ruby
  • Node.js
rustup 会在首次构建时安装 rust-toolchain.toml 中固定的 Rust nightly 工具链。
使用 Scoop 来安装这些剩余工具。
Scoop (x64)
对于 Windows ARM64,请直接从 GitHub 发布页面下载 LLVM 21.1.8(这是首个包含 ARM64 Windows 构建的版本):
ARM64
不要使用 WinGet 或其他包管理器安装这些工具:你很可能会获得 Strawberry Perl,而不是更精简的 Perl 安装。Strawberry Perl 会向 $Env:PATH 添加许多其他实用工具,这些工具会与 MSVC 冲突并导致构建失败。
若要在本地构建 WebKit(可选,仅限 x64),请安装以下软件包:
Scoop
ARM64 构建不需要 Cygwin,因为 WebKit 以预构建二进制文件的形式提供。
从现在开始,请使用已加载 .\scripts\vs-shell.ps1 的 PowerShell 终端。运行以下命令加载该脚本:
要进行验证,请检查 mt.exe 等仅限 MSVC 的命令:
避免将 ninja / cmake 安装到全局路径中:否则你可能会在未加载 .\scripts\vs-shell.ps1 的情况下构建 Bun。

构建

成功构建后,会将 bun-debug.exe 写入 build/debug 文件夹。
将此文件夹添加到 $Env:PATH:打开“开始”菜单,输入“Path”,然后使用环境变量菜单,将 C:\.....\bun\build\debug 添加到用户环境变量 PATH 中。然后重新启动编辑器(如果仍未生效,请注销后重新登录)。

额外路径

  • WebKit 已提取到 build/debug/cache/webkit/

测试

使用 bun test <path> 运行测试套件,或使用包装脚本 bun node:test <path>bun node:test 命令会在 bun.exe 的单独实例中运行每个测试文件,因此测试运行器崩溃不会导致整个测试套件停止。

故障排查

.rc 文件构建失败

llvm-rc.exe 很奇怪;不要使用它。请改用 rc.exe:确保你处于 Visual Studio 开发人员终端中,并检查 rc /?,确认它是 Microsoft Resource Compiler

输出写入失败 ‘bun-debug.exe’: 权限被拒绝

bun-debug.exe 处于打开状态时无法覆盖它。你可能有一个正在运行的实例,也可能是在 VS Code 调试器中运行。

从 Linux 交叉编译

您也可以在 Linux 主机上构建 Windows 二进制文件(包括 x64 和 arm64)。构建会使用主机 LLVM 中的 clang-cllld-linkllvm-libllvm-rc(每个 LLVM 发行版都包含这些工具),以及用于提供头文件和导入库的 MSVC CRT/STL 与 Windows SDK 的“xwin splat”。

前置条件

  1. 与本机构建使用的相同 LLVM 版本(参见 scripts/bootstrap.sh 中的 llvm_version_exact),并确保已安装 clang-cllld-linkllvm-libllvm-rc。在 Debian/Ubuntu 上,apt.llvm.org 提供的程序包包含所有这些工具。
  2. nasm(仅 Windows x64 需要;BoringSSL 的 x64 汇编使用 NASM 语法)。
  3. Windows 目标所需的 Rust std(rust-toolchain.toml 中列出了这些目标;如果缺少,请运行 rustup target add x86_64-pc-windows-msvc aarch64-pc-windows-msvc)。
  4. Windows sysroot:一个包含 MSVC CRT、Windows SDK 和 ATL,并按照 Visual Studio 安装布局组织的 xwin splat。下载这些组件即表示接受 Microsoft 针对这些组件的许可条款。
构建会自动在 /opt/winsysroot(或 /opt/xwin)查找 sysroot;如果放在其他位置,请设置 WINDOWS_SYSROOT=<path> 或传入 --winsysroot=<path>(使用可由用户写入的路径也能让 configure 为您管理这些别名)。configure 会在每次交叉构建开始时验证该 splat。CI 代理会将相同的 splat 烘焙到它们的镜像中(.buildkite/Dockerfilescripts/bootstrap.sh);当某个代理没有该 splat 时,构建会在 configure 时将其下载到缓存目录中。

构建

输出文件位于 build/debug-windows-x64/bun-debug.exebuild/release-windows-aarch64/bun-profile.exe + bun.exe 等路径中。等效的原始参数为:bun run build --os=windows --arch=aarch64 交叉编译出的可执行文件不会在主机上运行(会跳过 --revision 冒烟测试),因此请在 Windows 机器上或在 Wine 下测试它们。

LTO

x64 Release 交叉构建支持带跨语言(Rust↔C++)LTO 的 ThinLTO。该功能默认关闭,需要显式启用:
--lto=on 会使用 -flto=thin 编译 Bun 的 C/C++ 代码,使 rustc 生成 LLVM bitcode(-Clinker-plugin-lto),拉取 bun-webkit-windows-amd64-lto ThinLTO 预构建版本,并使用 rustc 自带的 lld-link 链接所有内容(其 LLVM 版本足够新,可以读取两种编译器生成的 bitcode)。arm64 不支持 LTO(没有 -lto WebKit 预构建版本:在 LTO 代码生成期间,LLVM 的 CodeView 发射器无法处理 ARM64 NEON 元组寄存器),--baseline 也不支持 LTO。