keith/bazel-cc-sysroot-generator · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
bazel-cc-sysroot-generator
这是一个用于为 bazel 生成 Ubuntu 和 macOS 类型封闭式系统根目录的 CLI 工具。
使用方法
先决条件
请确保已安装至少 Python 3.12、tar、zstd 和 xz-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