ITADN
bazelbuild/rules_swift
bazelbuild/rules_swift · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Bazel 的 Swift 规则

Build status

本仓库包含用于构建 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_binaryswift_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.0current
9.x3.5.0current
8.x1.14.0current
7.x1.8.03.6.1
6.x0.27.02.8.2
5.x0.25.01.14.0
4.x0.19.00.24.0
3.x0.14.00.18.0