本文档涵盖了 Bun 的跨平台构建系统、目标平台支持和平台抽象机制。它详细介绍了 Bun 如何处理不同操作系统和架构的编译、平台检测以及实现跨平台一致行为的基础设施。
有关构建系统配置本身的更多信息,请参阅 构建配置。有关 CI/CD 流水线详情,请参阅 CI/CD 流水线。
Bun 通过构建系统中定义的综合平台矩阵支持多种操作系统和 CPU 架构组合。
来源:build.zig347-402 src/env.zig65-172
Bun 使用集中的平台检测系统,提供编译时常量和运行时实用程序来处理特定于平台的行为。
OperatingSystem 枚举提供了一个统一的平台标识接口
| 平台 | displayString() | nameString() | npmName() |
|---|---|---|---|
| macOS | "macOS" | "darwin" | "darwin" |
| Linux | "Linux" | "linux" | "linux" |
| Windows | "Windows" | "win32" | "windows" |
| WebAssembly | "WASM" | "wasm" | "wasm" |
来源:src/env.zig65-128 src/env.zig130-172
构建系统通过多个层处理特定于平台的配置,从高级目标选择到低级编译器标志。
来源:build.zig112-152 build.zig154-190
构建系统根据目标平台应用不同的编译设置
Bun 的模块系统动态导入特定于平台的实现,以处理系统 API 和事件循环的差异。
| 平台 | 事件循环模块 | Zlib 模块 |
|---|---|---|
| Linux | src/async/posix_event_loop.zig | src/deps/zlib.posix.zig |
| macOS | src/async/posix_event_loop.zig | src/deps/zlib.posix.zig |
| Windows | src/async/windows_event_loop.zig | src/deps/zlib.win32.zig |
| 其他 | src/async/stub_event_loop.zig | 不适用 |
虽然主要的构建系统使用 CMake 和 Zig,但遗留的 Makefile 系统也展示了全面的平台检测和配置模式。
Makefile 系统根据检测到的平台应用不同的编译标志
| 平台 | 编译器 | 链接器标志 | 特殊功能 |
|---|---|---|---|
| macOS | LLVM Clang | -dead_strip, -dead_strip_dylibs | 代码签名、Homebrew 集成 |
| Linux | 系统 Clang | -fuse-ld=lld, --gc-sections | 静态链接、符号包装 |
| Windows | MinGW/MSVC | 平台特定 | 交叉编译支持 |
来源:Makefile10-49 Makefile117-195 Makefile453-517
构建系统通过多个检查目标包含全面的跨平台验证,这些目标会验证所有支持的平台组合的编译情况。