bazel: bump bazel-orfs to 05bbceb for cacheable gnumake#10487
bazel: bump bazel-orfs to 05bbceb for cacheable gnumake#10487openroad-ci wants to merge 1 commit into
Conversation
|
clang-tidy review says "All clean, LGTM! 👍" |
|
@mliberty FIY |
|
@oharboe @hzeller — flagging you both since this bumps over your gnumake Appreciate any sanity check on the picked-up |
Pin moved from 78f19f25 (PR The-OpenROAD-Project#699 era) to 05bbceb (PR The-OpenROAD-Project#717 final). At the old pin, @gnumake's repo rule downloaded the Zig toolchain (~80 MB) and bootstrapped GNU Make 4.4.1 inside repository_ctx.execute via `zig cc -static -target x86_64-linux-musl`, gated by a 300s configure timeout. That setup put GNU Make's build outside Bazel's action graph, so it was not cacheable in the disk/remote action cache and re-ran on every fresh output base. Under load -- 16 parallel jobs on a 16-CPU CI pod with a cold Zig cache -- the configure step occasionally exceeded the 300s timeout. Jenkins build PR-10338-merge The-OpenROAD-Project#21 hit exactly this failure mode in the Bazel Test stage; the retry with --keep_going passed because the partial Zig cache from the first attempt was warm. https://jenkins.openroad.tools/job/OpenROAD-Public/job/PR-10338-merge/21/ PR The-OpenROAD-Project#717 (merged 2026-05-10) refactored the rule on hzeller's review: download GNU Make sources, overlay a vendored config.h and a cc_binary BUILD file, and let the registered @llvm_toolchain clang build make as a normal cc_binary action. No repository_ctx.execute, no Zig, no timeout. Determinism on a fixed host preserved via `-Wl,--build-id=none -Wl,-s`. Net for CI: the gmake binary becomes a cacheable Bazel action -- first build populates the remote action cache, every subsequent fresh pod hits the cache instead of re-running the upstream build. Closes the last non-cacheable repo-rule execution in our Bazel graph (verified: all other repo rules either download prebuilt blobs or push work into actions, e.g. aspect_rules_js npm extracts). Commits between old and new pin that the bump also picks up: b10bca4 private/stages.bzl: register SYNTH_NUM_PARTITIONS f37bae8 synth_partition.sh: fix SYNTH_SKIP_KEEP truthy check 1ac6af9 synth_partition.sh: parse kept_modules.json without greedy sed 5c89e35 orfs_design: forward user_arguments to orfs_flow 6f3719b deps: bump orfs to 523bbbb4, openroad to 07427ed 3e1dc5e feat: support archive_override for ORFS pin f1e817f fix: add missing self-archive fixture to bump_test data 943cae5 gnumake: drop zig bootstrap, build with cc_binary 8e8ade8 gnumake: address hzeller PR The-OpenROAD-Project#717 review 05bbceb gnumake: document --override_repository host-make escape hatch ORFS and OpenROAD pin bumps inside bazel-orfs do not propagate to this repo: OpenROAD is the root module and overrides ORFS via archive_override (ORFS_COMMIT=10a2baea), so bazel-orfs's internal pins are irrelevant. Real risk surface is the synth_partition.sh tweaks (could shift mock-array gold). Watch CI for diffs in MockArray_4x4_flat_test. Signed-off-by: Joao Luis Sombrio <sombrio@sombrasoft.dev>
22f6fd3 to
7fbabdd
Compare
|
This is a very old PR...? |
@oharboe It's old but not stale — master is still pinned to I scoped this PR deliberately narrow — |
|
Everything is different now.... in a good way #10812 I'm preparing a bazel-orfs PR, these problems should now go away. |
|
Ah, #10812 landing changes the calculus — with hermetic-llvm now registered, the cc_binary gnumake path has a real clang toolchain to build against, which is exactly what bazel-orfs#717 needed. That's better folded into your upcoming bazel-orfs bump than landed as a standalone pin bump you'd just roll past. Sounds like this PR has served its purpose — OK to close it and let your PR carry the fix forward? |
|
Hopefully pr-head/merge will work here now #10841, there's a CI outage on the tidy build. |
|
I don't think the hermetic tool chain includes make, am I wrong? |
gnumake for bazel-orfs is compiled with LLVM hermetic toolchain, so caching works better in bazel-orfs across workstations/CI. |
|
It doesn't cache at all as it is a repo rule. In fact I was looking at a CI run where it failed this morning. In bazel 8 we would need to move it to a build action to get caching. In bazel9 there is a new option to cover repo rules (--experimental_remote_repo_contents_cache) but it is new/experimental. |
What doesn't cache? I'm talking about .odb files. I don't care if we have to rebuild gnumake, fast. |
|
I mean, it would be nice if gnumake builds(and all the other various dependencies) cached, but my main concern is that .odb files (ORFS flows in bazel-orfs) cache, that's where the time goes... |
|
Fast isn't the problem - it is flaky as it depends on random servers being up. |
|
I have Claude writing a PR to change this to a build action so it will be cacheable |
Right... bazel can add mirrors, I've used it occasionally. Relevant here? |
Interesting... My head is too full right now :-) too many things in flight. |
Summary
BAZEL_ORFS_COMMITfrom78f19f25(bazel-orfs PR #699 era) to05bbceb(bazel-orfs PR #717 final).@gnumakefrom a Zig + configure bootstrap insiderepository_ctx.executeto a plaincc_binaryaction built with the registered@llvm_toolchainclang.Why now — CI benefits
Old pin built GNU Make inside the repo rule via
zig cc, gated by a 300s configure timeout. Repo-rule work is outside the Bazel action graph, so it never hits the disk/remote action cache and re-runs every fresh output base (i.e. every fresh CI pod).Under load — 16 parallel jobs on the 16-CPU CI pod with a cold Zig cache — the configure step exceeded 300s and failed the build.
We hit this exact failure mode in Jenkins build PR-10338-merge #21 (Bazel Test stage):
Note that the asset-cache
--repository_cachedownloads succeeded — the failure is inrepository_ctx.execute()running./configureon the extracted source, not in any network fetch. The retry with--keep_goingpassed because the partial Zig cache from the first attempt was warm.After the bump, GNU Make builds as a normal
cc_binaryaction. First build populates the remote action cache; every subsequent fresh pod hits the cache instead of re-running the upstream build. Deterministic on a fixed host via-Wl,--build-id=none -Wl,-s.What else the bump picks up (78f19f25..05bbceb)
b10bca4f37bae81ac6af95c89e356f3719barchive_override, OpenROAD root3e1dc5ef1e817f943cae58e8ade805bbcebReal risk surface = synth_partition.sh tweaks (could shift
MockArray_4x4_flat_testgold). Watch that test in CI.Test plan
@@bazel-orfs++orfs_repositories+gnumakefetch timeout.//test/orfs/mock-array:MockArray_4x4_flat_testand siblings still pass.@gnumake//:makeas a remote action cache hit.