本文档涵盖了 Bun 的构建系统架构,包括 CMake 配置、Zig 集成、依赖管理和编译管道。构建系统协调多种语言(Zig、C++、JavaScript),管理 WebKit 等外部依赖,并支持跨平台编译。
有关 CI/CD 管道和自动化构建的信息,请参阅 CI/CD 管道。有关特定于平台的构建细节,请参阅 跨平台支持。
Bun 使用混合构建系统,其中 CMake 作为编排器,Zig 用于核心运行时,传统的 C++ 编译用于绑定和外部集成。
构建系统遵循多阶段方法,其中依赖关系被解析,代码被生成,然后编译成目标文件,最后链接成可执行文件。
来源:CMakeLists.txt1-58 cmake/targets/BuildBun.cmake1-50 build.zig154-437
CMake 配置是模块化的,为构建过程的不同方面提供专用脚本。
关键配置选项通过 optionx() 宏定义,包括 WEBKIT_VERSION、ZIG_TARGET、ZIG_OPTIMIZE 和 CODEGEN_PATH。
来源:CMakeLists.txt1-58 cmake/tools/SetupZig.cmake23-99 cmake/tools/SetupWebKit.cmake1-102
Zig 将核心运行时编译为目标文件,并与 C++ 组件链接。Zig 构建系统通过 build.zig 配置,并由 CMake 调用。
Zig 编译过程包括 BunBuildOptions 结构中配置的多个构建选项,包括 target、optimize、os、arch、version 以及 enable_logs 和 enable_asan 等功能标志。
来源:build.zig39-110 cmake/targets/BuildBun.cmake555-591 cmake/tools/SetupZig.cmake23-99
Bun 的构建系统管理着多个关键的外部依赖,其中 WebKit 是最复杂的。
WebKit 下载按提交哈希进行版本控制,并包含特定于平台的优化。该系统支持本地构建和预编译二进制文件。
来源:cmake/tools/SetupWebKit.cmake1-102 Makefile212-235
构建系统还管理
来源:cmake/scripts/DownloadZig.cmake1-72 cmake/targets/BuildBun.cmake617-631
Bun 包含大量的代码生成,在编译前运行,生成 C++、Zig 和 JavaScript 文件。
代码生成步骤按依赖关系仔细排序。例如,ZigGeneratedClasses 必须在 ObjectLUT 生成处理结果查找表文件之前完成。
来源:cmake/targets/BuildBun.cmake45-476
构建系统支持多种配置和目标,以适应不同的使用场景。
| 目标 | 描述 | 输出 |
|---|---|---|
bun-debug | 调试模式构建,包含断言 | bun-debug |
bun-profile | 发布模式构建,包含符号 | bun-profile → bun |
bun-asan | AddressSanitizer 构建 | bun-asan |
bun-test | 测试可执行文件 | bun-test |
| 配置 | CMake 类型 | Zig 优化 | 用例 |
|---|---|---|---|
| 调试 | 调试 | 调试 | 开发 |
| 发布 | 发布 | ReleaseFast | 生产 |
| RelWithDebInfo | RelWithDebInfo | ReleaseSafe | 性能分析 |
| MinSizeRel | MinSizeRel | ReleaseSmall | 尺寸优化 |
构建的主要入口点定义在 package.json 中。
build:debug:使用 CMake + Ninja 进行调试构建build:release:发布构建build:asan:AddressSanitizer 构建build:assert:发布模式,启用断言来源:cmake/targets/BuildBun.cmake3-27 package.json25-42 cmake/tools/SetupZig.cmake26-48
构建系统通过检测和条件配置来处理特定于平台的构建需求。
特定平台处理包括
来源:cmake/tools/SetupZig.cmake8-21 cmake/targets/BuildBun.cmake646-666 build.zig112-152
本文档涵盖了 Bun 的构建系统架构,包括 CMake 配置、Zig 集成、依赖管理和编译管道。构建系统协调多种语言(Zig、C++、JavaScript),管理 WebKit 等外部依赖,并支持跨平台编译。
有关 CI/CD 管道和自动化构建的信息,请参阅 CI/CD 管道。有关特定于平台的构建细节,请参阅 跨平台支持。
Bun 使用混合构建系统,其中 CMake 作为编排器,Zig 用于核心运行时,传统的 C++ 编译用于绑定和外部集成。
构建系统遵循多阶段方法,其中依赖关系被解析,代码被生成,然后编译成目标文件,最后链接成可执行文件。
来源:CMakeLists.txt1-58 cmake/targets/BuildBun.cmake1-50 build.zig154-437
CMake 配置是模块化的,为构建过程的不同方面提供专用脚本。
关键配置选项通过 optionx() 宏定义,包括 WEBKIT_VERSION、ZIG_TARGET、ZIG_OPTIMIZE 和 CODEGEN_PATH。
来源:CMakeLists.txt1-58 cmake/tools/SetupZig.cmake23-99 cmake/tools/SetupWebKit.cmake1-102
Zig 将核心运行时编译为目标文件,并与 C++ 组件链接。Zig 构建系统通过 build.zig 配置,并由 CMake 调用。
Zig 编译过程包括 BunBuildOptions 结构中配置的多个构建选项,包括 target、optimize、os、arch、version 以及 enable_logs 和 enable_asan 等功能标志。
来源:build.zig39-110 cmake/targets/BuildBun.cmake555-591 cmake/tools/SetupZig.cmake23-99
Bun 的构建系统管理着多个关键的外部依赖,其中 WebKit 是最复杂的。
WebKit 下载按提交哈希进行版本控制,并包含特定于平台的优化。该系统支持本地构建和预编译二进制文件。
来源:cmake/tools/SetupWebKit.cmake1-102 Makefile212-235
构建系统还管理
来源:cmake/scripts/DownloadZig.cmake1-72 cmake/targets/BuildBun.cmake617-631
Bun 包含大量的代码生成,在编译前运行,生成 C++、Zig 和 JavaScript 文件。
代码生成步骤按依赖关系仔细排序。例如,ZigGeneratedClasses 必须在 ObjectLUT 生成处理结果查找表文件之前完成。
来源:cmake/targets/BuildBun.cmake45-476
构建系统支持多种配置和目标,以适应不同的使用场景。
| 目标 | 描述 | 输出 |
|---|---|---|
bun-debug | 调试模式构建,包含断言 | bun-debug |
bun-profile | 发布模式构建,包含符号 | bun-profile → bun |
bun-asan | AddressSanitizer 构建 | bun-asan |
bun-test | 测试可执行文件 | bun-test |
| 配置 | CMake 类型 | Zig 优化 | 用例 |
|---|---|---|---|
| 调试 | 调试 | 调试 | 开发 |
| 发布 | 发布 | ReleaseFast | 生产 |
| RelWithDebInfo | RelWithDebInfo | ReleaseSafe | 性能分析 |
| MinSizeRel | MinSizeRel | ReleaseSmall | 尺寸优化 |
构建的主要入口点定义在 package.json 中。
build:debug:使用 CMake + Ninja 进行调试构建build:release:发布构建build:asan:AddressSanitizer 构建build:assert:发布模式,启用断言来源:cmake/targets/BuildBun.cmake3-27 package.json25-42 cmake/tools/SetupZig.cmake26-48
构建系统通过检测和条件配置来处理特定于平台的构建需求。
特定平台处理包括
来源:cmake/tools/SetupZig.cmake8-21 cmake/targets/BuildBun.cmake646-666 build.zig112-152