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

bazel-cc-sysroot-generator

这是一个用于为 bazel 生成 Ubuntu 和 macOS 类型封闭式系统根目录的 CLI 工具。

使用方法

先决条件

请确保已安装至少 Python 3.12、tarzstdxz-utils

生成系统根目录

创建一个名为 sysroot-config.toml(或 .json)的配置文件,用于定义您的系统根目录:

[[platforms]]
os = "jammy"
archs = ["aarch64", "x86_64"]
packages = [
  "libstdc++-11-dev",
  "libstdc++6",
]
deleted_patterns = [
  "etc",
  "usr/bin",
]

[[platforms]]
os = "macos"
deleted_patterns = [
  "*Swift*",
  "*iOSSupport*",
  "usr/share",
  "usr/libexec",
]

对于 Ubuntu,您可以选择指定要从中拉取内容的仓库:

[[platforms]]
os = "jammy"
repositories = ["main", "universe"]
...

运行 ./bazel-cc-sysroot-generator(可选地传递 --config path/to/sysroot-config.toml)。

此示例配置会在当前目录中生成 3 个 sysroots。

[!NOTE] macOS 的 sysroots 只能在 macOS 上生成,并且会复制当前选定的 SDK 目录。

在 bazel 中引入

生成 sysroots 后,你可以将它们上传到某个位置,然后通过类似以下方式在 bazel 中引用它们:

# MODULE.bazel
bazel_dep(name = "sysroot-jammy-x86_64")
archive_override(
    module_name = "sysroot-jammy-x86_64",
    integrity = "...",
    urls = [
        "https://...",
    ],
)

并将它们与诸如 toolchains_llvm 这样的封闭式 CC 工具链一起使用,搭配类似以下的配置:

# MODULE.bazel
llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm")
llvm.toolchain(
    name = "llvm_toolchain",
    llvm_versions = {"": "19.1.9"},
    stdlib = {"": "dynamic-stdc++"},
)

llvm.sysroot(
    name = "llvm_toolchain",
    label = "@sysroot-jammy-x86_64",
    targets = ["linux-x86_64"],
)
use_repo(llvm, "llvm_toolchain")

register_toolchains("@llvm_toolchain//:all")

可选地,您可以在.bazelrc中添加以下内容,以禁用 bazel 内置的 CC 工具链,从而确保在意外使用该工具链时会出现错误:

common --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1

[!TIP] 在遍历所需的软件包时,您可以使用 --override_module=sysroot-jammy-x86_64=path/to/sysroot-jammy-x86_64