C and C++ cache keys now refuse hits that would restore the wrong object, and they accept a few more compiles that used to pass through. Rust entries are unchanged. After upgrade, existing C/C++ entries are rebuilt once.
cargo install kacheHighlights
- Objects that embed a checkout path in a string literal no longer restore into a different tree.
- Compiles whose assembler reads files the key cannot see (
.incbin,.include) are not cached. - macOS static archives with DWARF (
ringand similar) hash as structure, not as a path-bound archive. - Native macOS cache keys work when
SDKROOTis a filesystem SDK (nixpkgs Darwin). - Several C flags that only needed a classifier row now cache:
-mavxvnni, the stack-protector family,-f[no-]unroll-loops,-f[no-]asynchronous-unwind-tables, and--.
Fixes
- C/C++ string literals:
-ffile-prefix-mapdoes not rewrite ordinary strings. If a preprocessor expansion still contains the checkout root, that compile is keyed to this checkout. (#1012) - Assembler inputs:
.incbin/ assembler.includeare not in the depfile. Those translation units compile uncached instead of serving a stale object. (#1022) - Mach-O DWARF archives: members with clang-shaped DWARF join the portable archive hash, so rlibs stop re-keying per checkout. (#1021)
- macOS SDK identity: if
xcrun --sdk <path>fails and the path is an SDK directory, kache readsSystemVersion.plistinstead of failing closed. (#1025) - Classifier: nightly-unsupported flags listed above are now
CC_FLAGSrows. Link mode,-Eto stdout, and Windows linker identity are still passthrough. (#1031)
Full changelog: v0.19.0...v0.20.0