菜单

跨平台支持

相关源文件

本文档涵盖了 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

特定于平台的构建选项

构建系统根据目标平台应用不同的编译设置

来源:build.zig566-610

特定于平台的依赖项和模块

Bun 的模块系统动态导入特定于平台的实现,以处理系统 API 和事件循环的差异。

事件循环实现选择

特定于平台的模块映射

平台事件循环模块Zlib 模块
Linuxsrc/async/posix_event_loop.zigsrc/deps/zlib.posix.zig
macOSsrc/async/posix_event_loop.zigsrc/deps/zlib.posix.zig
Windowssrc/async/windows_event_loop.zigsrc/deps/zlib.win32.zig
其他src/async/stub_event_loop.zig不适用

来源:build.zig659-677

遗留 Makefile 平台支持

虽然主要的构建系统使用 CMake 和 Zig,但遗留的 Makefile 系统也展示了全面的平台检测和配置模式。

平台检测逻辑

特定于平台的编译器和链接器配置

Makefile 系统根据检测到的平台应用不同的编译标志

平台编译器链接器标志特殊功能
macOSLLVM Clang-dead_strip, -dead_strip_dylibs代码签名、Homebrew 集成
Linux系统 Clang-fuse-ld=lld, --gc-sections静态链接、符号包装
WindowsMinGW/MSVC平台特定交叉编译支持

来源:Makefile10-49 Makefile117-195 Makefile453-517

跨平台构建验证

构建系统通过多个检查目标包含全面的跨平台验证,这些目标会验证所有支持的平台组合的编译情况。

多平台检查系统

来源:build.zig344-402 build.zig455-486