菜单

构建配置

相关源文件

本文档涵盖了 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 配置结构

CMake 配置是模块化的,为构建过程的不同方面提供专用脚本。

关键配置选项通过 optionx() 宏定义,包括 WEBKIT_VERSIONZIG_TARGETZIG_OPTIMIZECODEGEN_PATH

来源:CMakeLists.txt1-58 cmake/tools/SetupZig.cmake23-99 cmake/tools/SetupWebKit.cmake1-102

Zig 集成与编译

Zig 将核心运行时编译为目标文件,并与 C++ 组件链接。Zig 构建系统通过 build.zig 配置,并由 CMake 调用。

Zig 编译过程包括 BunBuildOptions 结构中配置的多个构建选项,包括 targetoptimizeosarchversion 以及 enable_logsenable_asan 等功能标志。

来源:build.zig39-110 cmake/targets/BuildBun.cmake555-591 cmake/tools/SetupZig.cmake23-99

依赖管理

Bun 的构建系统管理着多个关键的外部依赖,其中 WebKit 是最复杂的。

WebKit 集成

WebKit 下载按提交哈希进行版本控制,并包含特定于平台的优化。该系统支持本地构建和预编译二进制文件。

来源:cmake/tools/SetupWebKit.cmake1-102 Makefile212-235

其他依赖项

构建系统还管理

  • Zig 编译器:根据提交哈希自动下载
  • Node.js 头文件:用于 N-API 兼容性
  • vendor/ 库:BoringSSL、mimalloc、zstd 等
  • picohttpparser:HTTP 解析库

来源: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-profilebun
bun-asanAddressSanitizer 构建bun-asan
bun-test测试可执行文件bun-test

构建配置

配置CMake 类型Zig 优化用例
调试调试调试开发
发布发布ReleaseFast生产
RelWithDebInfoRelWithDebInfoReleaseSafe性能分析
MinSizeRelMinSizeRelReleaseSmall尺寸优化

Package.json 构建脚本

构建的主要入口点定义在 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

跨平台考量

构建系统通过检测和条件配置来处理特定于平台的构建需求。

平台检测

特定平台处理包括

  • Windows:资源文件、MSVC 兼容性、可执行文件 Shim
  • macOS:代码签名、通用二进制文件、最低 OS 版本
  • Linux:符号导出控制、musl/glibc 变体、基础 CPU 支持

来源: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 配置结构

CMake 配置是模块化的,为构建过程的不同方面提供专用脚本。

关键配置选项通过 optionx() 宏定义,包括 WEBKIT_VERSIONZIG_TARGETZIG_OPTIMIZECODEGEN_PATH

来源:CMakeLists.txt1-58 cmake/tools/SetupZig.cmake23-99 cmake/tools/SetupWebKit.cmake1-102

Zig 集成与编译

Zig 将核心运行时编译为目标文件,并与 C++ 组件链接。Zig 构建系统通过 build.zig 配置,并由 CMake 调用。

Zig 编译过程包括 BunBuildOptions 结构中配置的多个构建选项,包括 targetoptimizeosarchversion 以及 enable_logsenable_asan 等功能标志。

来源:build.zig39-110 cmake/targets/BuildBun.cmake555-591 cmake/tools/SetupZig.cmake23-99

依赖管理

Bun 的构建系统管理着多个关键的外部依赖,其中 WebKit 是最复杂的。

WebKit 集成

WebKit 下载按提交哈希进行版本控制,并包含特定于平台的优化。该系统支持本地构建和预编译二进制文件。

来源:cmake/tools/SetupWebKit.cmake1-102 Makefile212-235

其他依赖项

构建系统还管理

  • Zig 编译器:根据提交哈希自动下载
  • Node.js 头文件:用于 N-API 兼容性
  • vendor/ 库:BoringSSL、mimalloc、zstd 等
  • picohttpparser:HTTP 解析库

来源: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-profilebun
bun-asanAddressSanitizer 构建bun-asan
bun-test测试可执行文件bun-test

构建配置

配置CMake 类型Zig 优化用例
调试调试调试开发
发布发布ReleaseFast生产
RelWithDebInfoRelWithDebInfoReleaseSafe性能分析
MinSizeRelMinSizeRelReleaseSmall尺寸优化

Package.json 构建脚本

构建的主要入口点定义在 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

跨平台考量

构建系统通过检测和条件配置来处理特定于平台的构建需求。

平台检测

特定平台处理包括

  • Windows:资源文件、MSVC 兼容性、可执行文件 Shim
  • macOS:代码签名、通用二进制文件、最低 OS 版本
  • Linux:符号导出控制、musl/glibc 变体、基础 CPU 支持

来源:cmake/tools/SetupZig.cmake8-21 cmake/targets/BuildBun.cmake646-666 build.zig112-152