本页面概述了 Swift 编译器的构建系统,解释了其组织方式以及如何使用它来构建 Swift 编译器和相关工具。构建系统基于 CMake,并辅以自定义的 Python 和 Bash 脚本,在不同平台提供简化的构建体验。
Swift 构建系统由多个关键组件组成,它们协同工作以配置、构建和测试 Swift 编译器及其组件。
来源
Swift 构建系统的主要入口点是:
build-script 是构建 Swift 的推荐方式。它处理命令行参数,处理预设配置,并使用适当的选项调用 build-script-impl。
swift/utils/build-script [options]
主要功能
utils/build-presets.ini 的构建预设来源
这个 Bash 脚本是 Swift 构建系统的主要执行者,包含了构建过程的详细实现。通常不直接调用它,而是通过 build-script 来调用。
主要职责
来源
构建系统提供了多种配置 Swift 构建的方式
build-script 和 build-script-impl 都接受大量的命令行参数来控制构建过程。
常用参数示例
--release - 以发布模式构建--debug - 以调试模式构建--skip-build-{component} - 跳过构建特定组件--ios/--tvos/--watchos - 为 Apple 平台构建--build-subdir - 指定自定义构建目录来源
构建预设提供预定义的配置,可以使用 `--preset` 选项进行选择。它们定义在 `utils/build-presets.ini` 中。
预设使用示例
预设可以继承自其他预设
常见的预设包括:
buildbot_linux - CI 使用的 Linux 构建配置buildbot_incremental - 用于更快开发增量构建mixin_lightweight_assertions - 使用轻量级断言构建来源
Swift 使用 CMake 作为其构建系统,并包含用于 Swift 特定构建任务的自定义扩展。
关键 CMake 模块
来源
Swift 构建系统通过 CMake 中的特定于平台的配置支持多个平台。
| 平台 | 主构建脚本 | SDK配置 | 特殊要求 |
|---|---|---|---|
| Darwin/macOS | build-script | SWIFT_DARWIN_PLATFORMS | Xcode,macOS SDK |
| Linux | build-script | SWIFT_SDK_LINUX | Clang,Ninja |
| Windows | build.ps1 | SWIFT_SDK_WINDOWS | Visual Studio,CMake,Ninja |
| Android | build-script | SWIFT_SDK_ANDROID | Android NDK |
| WebAssembly | build-script | SWIFT_SDK_WASI | WASI SDK |
来源
构建系统为每个平台配置目标三元组和架构
示例目标三元组
来源
Swift 构建系统可以构建 Swift 生态系统的各种组件
常见的组件构建选项
--build-swift - 构建 Swift 编译器--build-stdlib - 构建 Swift 标准库--build-swift-dynamic-stdlib - 构建 Swift 标准库的动态变体--build-swift-static-stdlib - 构建 Swift 标准库的静态变体--build-swift-dynamic-sdk-overlay - 构建 Swift SDK 覆盖的动态变体--build-llvm - 构建 LLVM(默认构建 Clang)来源
Swift 使用 LLVM 的 lit(LLVM 集成测试器)进行测试
通过 build-script 运行测试
测试类型
test/ 目录)validation-test/ 目录)--long-test 启用)--stress-test 启用)来源
要在 macOS/Linux 上构建 Swift
在 Windows 上
来源
对于高级用户,可以通过 build-script 传递自定义 CMake 选项
特定组件的 CMake 选项
交叉编译 Swift 需要指定主机和目标架构
对于 Windows 交叉编译
来源
下图说明了完整的 Swift 构建流程管道
来源
Swift 构建系统通过 CMake 基础,提供了跨多个平台构建 Swift 编译器和相关组件的灵活且强大的方式。通过在 CMake 基础上使用 Python 和 Bash 脚本,它提供了统一的构建体验,并具有大量的配置选项,以满足不同的开发需求。
有关 Swift SDK 配置的更多信息,请参阅 模块系统;有关测试的详细信息,请参阅 编译器测试基础设施。
来源