菜单

跨平台支持

相关源文件

本文档介绍了 Swift 如何支持构建不同平台的应用,重点关注 Windows 和 Android 环境。有关通用构建系统配置和脚本的信息,请参阅构建系统

概述

Swift 被设计为一个跨平台语言,可以在多种操作系统和架构上运行。构建系统为每个目标平台包含专门的配置和脚本,从而在各种环境中实现一致的编译和运行时行为。

来源:utils/build.ps1220-319 utils/update_checkout/update-checkout-config.json1-553

支持的平台

Swift目前支持以下平台组合

操作系统支持的架构目标三元组示例
Windowsx86_64, ARM64, x86x86_64-unknown-windows-msvc
Linuxx86_64x86_64-unknown-linux-gnu
AndroidARM64, ARMv7, x86_64, x86aarch64-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 中的结构化模型来定义平台,该模型捕获了在特定平台上构建所需的所有必要信息。

每个平台定义包括

  • OS:操作系统类型(Windows、Android)
  • Triple:目标三元组(例如,“x86_64-unknown-windows-msvc”)
  • Architecture:各种工具使用的特定于架构的名称
  • BinaryDir:二进制文件的目录(例如,“bin64”、“bin64a”)
  • Cache:构建过程中平台特定数据的缓存

来源:utils/build.ps1220-319

Windows 支持

Windows 支持通过 PowerShell 构建脚本(build.ps1)和特定于 Windows 的 CMake 缓存文件来实现。

Windows 构建架构

来源:utils/build.ps1442-584 utils/build-windows-toolchain.bat1-115

Windows 平台定义

Windows 平台使用特定于架构的信息进行定义

  • WindowsX64:64 位 Intel 架构 (bin64)
  • WindowsARM64:64 位 ARM 架构 (bin64a)
  • WindowsX86:32 位 Intel 架构 (bin32)

每个平台都包括 Visual Studio 集成、CMake 设置和 LLVM 工具链的配置。

来源:utils/build.ps1228-252

Windows SDK 集成

构建系统可以使用已安装的 Windows SDK,或从 NuGet 下载

这种方法确保了与开发人员环境的兼容性。

来源:utils/build.ps1791-1056

Android 支持

Swift 通过与 Android NDK 集成来支持为 Android 构建。

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 平台通过特定于架构的配置进行定义

  • AndroidARM64:64 位 ARM (bin64a)
  • AndroidARMv7:32 位 ARM (bin32a)
  • AndroidX64:64 位 Intel (bin64)
  • AndroidX86:32 位 Intel (bin32)

每个平台都包括 Android NDK、API 级别和 ABI 的配置。

来源:utils/build.ps1267-305

NDK 集成

构建脚本通过以下方式与 Android NDK 集成:

构建脚本支持不同的 NDK 版本,并提供自动下载和配置。

来源:utils/build.ps1499-507 utils/build.ps11018-1021

交叉编译支持

Swift 支持不同架构之间的交叉编译,这对于 Windows ARM64 开发尤为重要。

交叉编译配置

来源:utils/build.ps1402-416 utils/build.ps1647-666

构建系统通过比较主机和目标架构来检测交叉编译

对于交叉编译,构建系统会

  1. 设置主机和目标平台
  2. 配置适合交叉编译的工具
  3. 管理两个环境的特定于平台的依赖项

来源:utils/build.ps1402-416

CMake 配置

每个平台都有专用的 CMake 缓存文件来配置构建系统。

Windows CMake 配置

Windows CMake 配置文件(Windows-x86_64.cmakeWindows-aarch64.cmake)设置了

这些配置启用了适当的目标三元组、LLVM 目标和 Swift 特定选项。

来源:cmake/caches/Windows-x86_64.cmake1-156 cmake/caches/Windows-aarch64.cmake1-156

Android CMake 配置

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

Sanitizer 支持

Swift 在各个平台支持多种 Sanitizer,包括:

  • Address Sanitizer (ASan):内存错误检测
  • Thread Sanitizer (TSan):数据竞争检测
  • Coverage Instrumentation:代码覆盖率分析

每个 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