While working on a GLIBC related problem, i realized that rules_distroless could have made hermetic cc compilation so much easier by generating a sysroot out of the debian packages that are being fetched.
This is great for one single reason, what's actually going into the container is also what you are linking against!
I can imagine a bzlmod only API, as such
# Generate a sysroot using the apt extensions
apt = use_extension("@rules_distroless//apt:extensions.bzl", "apt")
apt.install("libc6-dev")
apt.sysroot(
name = "sysroot_amd64"
arch = "amd64"
)
apt.sysroot(
name = "sysroot_arm64"
arch = "arm64"
)
use_repo(apt, "sysroot_amd64", "sysroot_arm64")
# Use with toolchains_llvm
llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm")
llvm.sysroot(
name = "llvm_toolchain_with_sysroot",
targets = ["linux-x86_64"],
label = "@sysroot_amd64//:sysroot",
)
llvm.sysroot(
name = "llvm_toolchain_with_sysroot",
targets = ["linux-arm64"],
label = "@sysroot_arm64//:sysroot",
)
While working on a GLIBC related problem, i realized that rules_distroless could have made hermetic cc compilation so much easier by generating a sysroot out of the debian packages that are being fetched.
This is great for one single reason, what's actually going into the container is also what you are linking against!
I can imagine a bzlmod only API, as such