diff --git a/bazel-cc-sysroot-generator b/bazel-cc-sysroot-generator index 748f41f..834c1b1 100755 --- a/bazel-cc-sysroot-generator +++ b/bazel-cc-sysroot-generator @@ -220,7 +220,7 @@ def _cleanup_linux_sysroot( def _write_bazel_files(sysroot_dir: Path) -> None: name = sysroot_dir.name - (sysroot_dir / "BUILD.bazel").write_text(f"""\ + (sysroot_dir / "BUILD.bazel").write_text("""\ load("@bazel_skylib//rules/directory:directory.bzl", "directory") directory( @@ -229,8 +229,15 @@ directory( visibility = ["//visibility:public"], ) +# NOTE: Using this is better for merkle tree performance filegroup( - name = "{name}", + name = "directory", + srcs = ["."], + visibility = ["//visibility:public"], +) + +filegroup( + name = "all_files", srcs = glob(["**"]), visibility = ["//visibility:public"], ) @@ -242,6 +249,16 @@ bazel_dep(name = "bazel_skylib", version = "1.7.1") """) +# https://github.com/bazelbuild/bazel/issues/27028 +def _nest_all_files(sysroot_dir: Path) -> None: + nested_dir = sysroot_dir / "sysroot" + nested_dir.mkdir() + for item in sysroot_dir.iterdir(): + if item.name in {"sysroot", "MODULE.bazel"}: + continue + shutil.move(item, nested_dir / item.name) + + def _archive(sysroot_dir: Path) -> None: # https://stackoverflow.com/questions/1094841/get-a-human-readable-version-of-a-file-size def sizeof_fmt(num: float) -> str: @@ -335,6 +352,7 @@ def _generate_ubuntu_sysroot(os_name: str, platform: dict[str, Any]) -> None: _download_packages(os_name, arch, repositories, packages, sysroot_dir) _cleanup_linux_sysroot(arch, deleted_patterns, sysroot_dir) _write_bazel_files(sysroot_dir) + _nest_all_files(sysroot_dir) _archive(sysroot_dir) @@ -359,6 +377,7 @@ def _generate_macos_sysroot(platform: dict[str, Any]) -> None: _validate_relative_symlinks(sysroot_dir) _write_bazel_files(sysroot_dir) + _nest_all_files(sysroot_dir) _archive(sysroot_dir)