本文档介绍了 Swift 如何支持构建不同平台的应用,重点关注 Windows 和 Android 环境。有关通用构建系统配置和脚本的信息,请参阅构建系统。
Swift 被设计为一个跨平台语言,可以在多种操作系统和架构上运行。构建系统为每个目标平台包含专门的配置和脚本,从而在各种环境中实现一致的编译和运行时行为。
来源:utils/build.ps1220-319 utils/update_checkout/update-checkout-config.json1-553
Swift目前支持以下平台组合
| 操作系统 | 支持的架构 | 目标三元组示例 |
|---|---|---|
| Windows | x86_64, ARM64, x86 | x86_64-unknown-windows-msvc |
| Linux | x86_64 | x86_64-unknown-linux-gnu |
| Android | ARM64, ARMv7, x86_64, x86 | aarch64-unknown-linux-android |
每个平台-架构组合都有特定的配置文件和构建设置。
来源:utils/build.ps1220-319 cmake/caches/Windows-x86_64.cmake1-156 cmake/caches/Windows-aarch64.cmake1-156 cmake/caches/Linux-x86_64.cmake1-167
Swift 构建系统使用 PowerShell 中的结构化模型来定义平台,该模型捕获了在特定平台上构建所需的所有必要信息。
每个平台定义包括
Windows 支持通过 PowerShell 构建脚本(build.ps1)和特定于 Windows 的 CMake 缓存文件来实现。
来源:utils/build.ps1442-584 utils/build-windows-toolchain.bat1-115
Windows 平台使用特定于架构的信息进行定义
每个平台都包括 Visual Studio 集成、CMake 设置和 LLVM 工具链的配置。
构建系统可以使用已安装的 Windows SDK,或从 NuGet 下载
这种方法确保了与开发人员环境的兼容性。
Swift 通过与 Android NDK 集成来支持为 Android 构建。
来源:utils/build.ps1267-305 utils/build.ps1499-507 cmake/caches/Runtime-Android-armv7.cmake1-25 cmake/caches/Runtime-Android-aarch64.cmake1-25
Android 平台通过特定于架构的配置进行定义
每个平台都包括 Android NDK、API 级别和 ABI 的配置。
构建脚本通过以下方式与 Android NDK 集成:
构建脚本支持不同的 NDK 版本,并提供自动下载和配置。
来源:utils/build.ps1499-507 utils/build.ps11018-1021
Swift 支持不同架构之间的交叉编译,这对于 Windows ARM64 开发尤为重要。
来源:utils/build.ps1402-416 utils/build.ps1647-666
构建系统通过比较主机和目标架构来检测交叉编译
对于交叉编译,构建系统会
每个平台都有专用的 CMake 缓存文件来配置构建系统。
Windows CMake 配置文件(Windows-x86_64.cmake、Windows-aarch64.cmake)设置了
这些配置启用了适当的目标三元组、LLVM 目标和 Swift 特定选项。
来源:cmake/caches/Windows-x86_64.cmake1-156 cmake/caches/Windows-aarch64.cmake1-156
Android 运行时通过像 Runtime-Android-aarch64.cmake 这样的文件进行配置
这些配置设置了适当的 SDK、架构和 API 级别设置。
来源:cmake/caches/Runtime-Android-aarch64.cmake1-25 cmake/caches/Runtime-Android-armv7.cmake1-25
构建系统支持同时为多个平台进行构建,这由命令行参数控制。
构建系统会将架构解析为特定的平台定义,并按顺序构建每个平台。
来源:utils/build.ps1186-196 utils/build.ps1421-430
Swift 在各个平台支持多种 Sanitizer,包括:
每个 Sanitizer 都有特定于平台的实现和配置。
来源:test/Driver/sanitize_recover.swift1-23 test/Driver/sanitize_coverage.swift1-43 test/Sanitizers/asan/asan.swift1-47
构建系统包含特定于平台的测试,以确保正常运行。
可以针对特定组件和平台运行测试,并可以跳过在某些平台上不支持的测试。
来源:utils/build-windows-toolchain.bat61-65
Swift 的跨平台支持使得在各种平台和架构上构建和运行 Swift 代码成为可能。灵活的构建系统,通过特定于平台的配置和交叉编译支持,在提供一致的 Swift 体验的同时,也能满足特定平台的需求。
平台定义、CMake 缓存文件、构建脚本和交叉编译支持的结合,使 Swift 成为一个真正的跨平台语言生态系统。
来源:utils/build.ps11-11076 utils/update_checkout/update-checkout-config.json1-553