菜单

构建系统

相关源文件

本页面概述了 Swift 编译器的构建系统,解释了其组织方式以及如何使用它来构建 Swift 编译器和相关工具。构建系统基于 CMake,并辅以自定义的 Python 和 Bash 脚本,在不同平台提供简化的构建体验。

构建系统架构

Swift 构建系统由多个关键组件组成,它们协同工作以配置、构建和测试 Swift 编译器及其组件。

来源

构建入口点

Swift 构建系统的主要入口点是:

  1. build-script - 一个 Python 脚本,提供构建 Swift 组件的高级接口,带有合理的默认设置。
  2. build-script-impl - 一个 Bash 脚本,实现了实际的构建逻辑,由 build-script 调用。
  3. build.ps1 - 一个用于在 Windows 平台上构建的 PowerShell 脚本。

build-script

build-script 是构建 Swift 的推荐方式。它处理命令行参数,处理预设配置,并使用适当的选项调用 build-script-impl

swift/utils/build-script [options]

主要功能

  • 为复杂的 build-script-impl 选项提供了更简单的接口
  • 处理来自 utils/build-presets.ini 的构建预设
  • 设置构建环境
  • 验证依赖项和工具链
  • 可以构建单个组件或整个 Swift 生态系统

来源

build-script-impl

这个 Bash 脚本是 Swift 构建系统的主要执行者,包含了构建过程的详细实现。通常不直接调用它,而是通过 build-script 来调用。

主要职责

  • 定义了一套全面的配置变量
  • 处理特定于平台的构建配置
  • 设置构建目录
  • 调用 CMake 生成构建文件
  • 运行构建工具
  • 处理测试、安装和打包

来源

构建配置

构建系统提供了多种配置 Swift 构建的方式

命令行参数

build-scriptbuild-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 - 使用轻量级断言构建

来源

CMake 构建系统

Swift 使用 CMake 作为其构建系统,并包含用于 Swift 特定构建任务的自定义扩展。

关键 CMake 模块

  1. AddSwift.cmake - 定义了构建 Swift 编译器组件的函数
  2. AddSwiftStdlib.cmake - 用于构建 Swift 标准库的函数
  3. SwiftSource.cmake - 用于处理 Swift 源文件的函数
  4. SwiftConfigureSDK.cmake - Swift 构建的 SDK 配置

来源

跨平台支持

Swift 构建系统通过 CMake 中的特定于平台的配置支持多个平台。

平台支持表

平台主构建脚本SDK配置特殊要求
Darwin/macOSbuild-scriptSWIFT_DARWIN_PLATFORMSXcode,macOS SDK
Linuxbuild-scriptSWIFT_SDK_LINUXClang,Ninja
Windowsbuild.ps1SWIFT_SDK_WINDOWSVisual Studio,CMake,Ninja
Androidbuild-scriptSWIFT_SDK_ANDROIDAndroid NDK
WebAssemblybuild-scriptSWIFT_SDK_WASIWASI SDK

来源

目标三元组和架构配置

构建系统为每个平台配置目标三元组和架构

示例目标三元组

  • x86_64-apple-macosx
  • aarch64-linux-android
  • x86_64-unknown-windows-msvc
  • wasm32-unknown-wasi

来源

构建 Swift 组件

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 上

常见构建场景

  1. 带断言的调试构建:
  1. 用于部署的发布构建:
  1. 仅构建编译器:
  1. 为 iOS/tvOS/watchOS 构建:
  1. 用于开发的增量构建:

来源

高级配置

自定义 CMake 选项

对于高级用户,可以通过 build-script 传递自定义 CMake 选项

特定组件的 CMake 选项

交叉编译

交叉编译 Swift 需要指定主机和目标架构

对于 Windows 交叉编译

来源

构建流程管道

下图说明了完整的 Swift 构建流程管道

来源

结论

Swift 构建系统通过 CMake 基础,提供了跨多个平台构建 Swift 编译器和相关组件的灵活且强大的方式。通过在 CMake 基础上使用 Python 和 Bash 脚本,它提供了统一的构建体验,并具有大量的配置选项,以满足不同的开发需求。

有关 Swift SDK 配置的更多信息,请参阅 模块系统;有关测试的详细信息,请参阅 编译器测试基础设施

来源