[clang] [Doc] Update documentation for no-transitive-change (PR #96453)

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 1 08:00:07 PDT 2024


================
@@ -652,6 +652,141 @@ in the future. The expected roadmap for Reduced BMIs as of Clang 19.x is:
    comes, the term BMI will refer to the Reduced BMI and the Full BMI will only
    be meaningful to build systems which elect to support two-phase compilation.
 
+Experimental No Transitive Change
+---------------------------------
+
+This section is primarily for build system vendors. For end compiler users,
----------------
ilya-biryukov wrote:

That's what I thought is happening, thanks for confirming my intuition.
I think it'd be great to spell this out in the documentation, because I believe this mode of operation is something that the build system vendors might need to infer from the whole text right now.

Adding something like the following should do the trick:

```
We encourage build systems to add an experimental mode that
reuses the cached BMI when **direct** dependencies did not change,
even if **transitive** dependencies did change.
```

PS My 2 cents on Bazel: I suspect this actually goes against its design. Bazel has very strong capabilities to avoid recompilations when inputs don't change, but it relies on stable hashes for all inputs (including transitive dependencies). 
At the same time I suspect that other build systems (`CMake` + `ccache` / `sccache`) are more flexible in that regard.

PPS I am not a build system expert, so take that with a grain of salt. I'm also happy to loop in Bazel folks I work with to confirm or rebut my claims about Bazel's design, if that's useful.

https://github.com/llvm/llvm-project/pull/96453


More information about the cfe-commits mailing list