菜单

构建系统和基础设施

相关源文件

本文档涵盖了 Bun 的构建系统架构、依赖管理、跨平台编译以及持续集成基础设施。有关 JavaScript 处理管道的信息,请参阅 JavaScript 处理引擎。有关运行时架构的详细信息,请参阅 核心 JavaScript 运行时

目的与范围

Bun 的构建系统协调使用不同语言(Zig、C++、JavaScript/TypeScript)编写的多个组件的编译,形成一个统一的可执行文件。该系统管理复杂的依赖项,包括 WebKit/JavaScriptCore,支持 Linux、macOS 和 Windows 的跨平台构建,并与 CI/CD 管道集成以进行自动化测试和发布。

构建系统架构

构建系统使用 CMake 作为主要协调器,负责编排 Zig 编译、C++ 链接、JavaScript 打包和依赖项管理。

Sources: CMakeLists.txt1-58 package.json25-82 build.zig154-437

CMake 配置

CMake 作为构建系统协调器,负责跨平台管理编译器设置、依赖项解析和构建目标定义。

核心 CMake 结构

构建目标配置

CMake 系统通过 BunBuildOptions 结构和构建模式定义了多个构建配置

构建模式CMake 类型Zig 优化用例
调试调试调试开发、调试
发布发布ReleaseFast生产构建
RelWithDebInfoRelWithDebInfoReleaseFast带调试信息的产品版本
MinSizeRelMinSizeRelReleaseSmall尺寸优化构建

Sources: CMakeLists.txt1-58 build.zig39-110 package.json31-42

Zig 构建系统

Zig 构建系统(build.zig)负责 Bun 核心运行时的编译,并提供跨平台目标管理。

Zig 构建目标和选项

跨平台支持

构建系统通过 TargetDescription 结构支持多种架构和操作系统

平台架构ABI特殊处理
Linuxx86_64, aarch64GNU, muslglibc 版本限制
macOSx86_64, aarch64不适用Apple M1 基线
Windowsx86_64GNUWindows 10 RS5 最低要求

Sources: build.zig112-152 build.zig439-453 src/env.zig65-140

依赖管理

Bun 管理多个外部依赖项,每个依赖项都有特定的构建需求和集成点。

核心依赖项架构

版本管理

依赖项在 `src/generated_versions_list.zig` 文件中通过特定的提交哈希进行跟踪。

  • boringssl: 29a2cd359458c9384694b75456026e4b57e3e567
  • webkit: 13bb88da0b791154dca60910f301dcd70c321f72
  • mimalloc: 4c283af60cdae205df5a872530c77e2a6a307d43
  • zlib: 886098f3f339617b4243b286f5ed364b9989e245

Sources: src/generated_versions_list.zig1-16 Makefile157-196 Makefile615-631

跨平台支持

构建系统处理特定于平台的编译需求和目标配置。

特定平台构建配置

CPU 架构目标

构建系统包含特定的 CPU 目标以获得最佳性能

  • Linux aarch64: cortex_a35 基线,用于云兼容性
  • macOS aarch64: apple_m1 显式目标
  • x86_64: 可通过 CMake 配置基线/原生选项

Sources: build.zig137-152 src/env.zig65-173 build.zig669-677

构建模式和配置

构建系统提供了多种针对不同用例优化的构建配置。

构建模式矩阵

配置脚本命令CMake 类型Zig 优化特性
build:debugbun run build:debug调试调试完整调试,速度较慢
build:releasebun run build:release发布ReleaseFast优化,无调试信息
build:assertbun run build:assertRelWithDebInfoReleaseFast断言 + 日志
build:asanbun run build:asan发布ReleaseFastAddressSanitizer
build:safebun run build:safe发布ReleaseSafe安全优化
build:smolbun run build:smolMinSizeRelReleaseSmall尺寸优化

开发版与生产版构建

Sources: package.json31-42 build.zig75-77 build.zig566-610

CI/CD 流水线

持续集成系统使用 Buildkite 对多个平台进行自动化构建、测试和发布。

Buildkite 集成

发布流程

发布管道协调版本管理、资产生成和分发

  1. 版本号更新: `scripts/bump.ts` 会更新版本号
  2. 资产生成: 多平台构建会生成特定于平台的二进制文件
  3. 类型定义: `packages/bun-types` 会生成 TypeScript 定义
  4. 分发: 二进制文件通过 GitHub Releases 和 npm 包进行分发

来源: package.json48 CMakeLists.txt39-41 build.zig221-265

开发工作流

该构建系统支持高效的开发工作流程,具有快速迭代和全面的工具。

开发命令

构建性能优化

该系统包含多项优化,可加快开发构建速度

  • ccache:C++ 构建的编译器缓存(`cmake/tools/SetupCcache.cmake`)
  • 增量编译:Zig 的增量编译支持
  • 并行构建:用于并行执行的 Ninja 生成器
  • 引用跟踪:为增量构建减小的引用跟踪深度

来源: package.json25-82 build.zig203-204 Makefile102-112