Bazel 的 Swift 规则
本仓库包含用于构建 macOS 和 Linux 上的 Swift 库、测试和可执行文件的 Bazel 规则。
若要为 Apple 的所有平台(macOS、iOS、tvOS、visionOS 和 watchOS)构建应用程序,可以将其与 Apple Rules 结合使用。
如果您在使用这些规则时遇到任何问题,请 提交 issue!
基本示例
创建一个可在 macOS、Linux 或 Windows 上运行的简单 CLI:
load("@rules_swift//swift:swift_binary.bzl", "swift_binary")
swift_binary(
name = "cli",
srcs = ["CLI.swift"],
)
创建一个可被构建中其他目标使用的单一库目标:
load("@rules_swift//swift:swift_library.bzl", "swift_library")
swift_library(
name = "MyLibrary",
srcs = ["MyLibrary.swift"],
tags = ["manual"],
)
参考文档
点击此处 查看本仓库中规则及其他定义的参考文档。
快速设置
1. 安装 Swift
在开始之前,请确保已安装 Swift 工具链。
Apple 用户: 安装 Xcode。 如果是首次安装,请在安装后打开一次,以确保命令行工具正确配置。
Linux 用户: 按照 Swift 下载页面 上的说明下载并安装 适用于你平台的相应 Swift 工具链。请注意确保已安装 Swift 的所有依赖项(如 ICU、Clang 等), 并确保 Swift 编译器在系统路径中可用。
2. 配置你的工作区
从 发布页面 复制 MODULE.bazel 代码片段。
3. 额外配置(仅限 Linux)
swift_binary 和 swift_test 规则期望使用 clang 作为链接的驱动程序,
它们会查询 Bazel C++ API 和 CROSSTOOL 以确定应传递给链接器的参数。默认情况下,
Bazel 使用的 C++ 工具链是 gcc,因此 Linux 上的 Swift 用户需要在调用 Bazel 时
设置环境变量 CC=clang 来覆盖此设置。
macOS 用户无需执行此步骤,因为 Xcode 工具链始终
使用 clang。
使用独立 Swift 工具链进行构建
作为主机 Swift 安装的替代方案,rules_swift 可以从 swift.org 下载并注册一个独立的 Swift 工具链。请参阅
doc/standalone_toolchain.md 获取设置
说明。
使用自定义工具链构建
macOS 主机: 你可以使用自定义的 Swift 工具链(从 https://swift.org/download 下载)代替 Xcode 的默认工具链进行构建。为此, 请将以下标志传递给 Bazel:
--action_env=TOOLCHAINS=toolchain.id
其中 toolchain.id 是工具链 Info.plist 文件中 CFBundleIdentifier 键的值。
要列出可用的工具链及其 bundle 标识符,您可以运行:
bazel run @rules_swift//tools/dump_toolchains
Linux 主机: 此时,Bazel 会使用在您的 PATH 上最先遇到的 swift 可执行文件。
支持调试
要使可缓存构建在调试时正常工作,请参阅 此文档。
Swift Package Manager 支持
要下载、构建并引用外部 Swift 包作为 Bazel 目标,请查看 rules_swift_package_manager。
支持的 bazel 版本
rules_apple 和 rules_swift 通常会受到 bazel 本身变更的影响。这意味着当您 更新 bazel 时,通常也需要更新这些规则。
您还可以在 releases 页面 的每个版本说明中查看支持的 bazel 版本。
除了这些约束之外,自 1.0.0 版本发布以来,本仓库尽可能遵循 semver。
| Bazel 版本 | 最低支持的 rules 版本 | 最终支持的 rules 版本 |
|---|---|---|
| 10.x (最新滚动版本) | 3.5.0 | current |
| 9.x | 3.5.0 | current |
| 8.x | 1.14.0 | current |
| 7.x | 1.8.0 | 3.6.1 |
| 6.x | 0.27.0 | 2.8.2 |
| 5.x | 0.25.0 | 1.14.0 |
| 4.x | 0.19.0 | 0.24.0 |
| 3.x | 0.14.0 | 0.18.0 |