Skip to content

partial c++20 module support - #2516

Merged
sylvestre merged 13 commits into
mozilla:mainfrom
TroyKomodo:troy/cxx20-modules
Feb 27, 2026
Merged

sylvestre merged 13 commits into
mozilla:mainfrom
TroyKomodo:troy/cxx20-modules

Conversation

@TroyKomodo

@TroyKomodo TroyKomodo commented Dec 18, 2025 •

Copy link
Copy Markdown
Contributor

Adds partial support for c++20 modules when using clang.

Also detects when modules are used in MSVC / GCC and disable cache for those calls.

fixes #2216

partially addresses #2095

the clang c++20 module implementation (as well as msvc) is rather easy to parse and understand so adding support for it is fairly trivial. GCC however is a mess. An entirely different approach will be needed to get GCC module support which is far out side of the scope for this initial PR.

I will submit future PRs to get MSVC / GCC.

Test with nix

(pkgs.sccache.overrideAttrs (final: old: {
  version = "troy/cxx20-modules";
  cargoHash = "sha256-tCQrZ6cPGJrxHgeSJ4ZqZs6otWvVu6Ys3svAiwvmSDc=";
  src = fetchFromGitHub {
    owner = "troykomodo";
    repo = "sccache";
    rev = "troy/cxx20-modules";
    sha256 = "sha256-A0n/nsNPTHRC0Z6ERwCpoR1w3O/xl6d1yCw/5GeqNd4=";
  };
  cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
    inherit (final) pname src version;
    hash = final.cargoHash;
  };
}))

@codecov-commenter

codecov-commenter commented Dec 18, 2025 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.70764% with 37 lines in your changes missing coverage. Please review.
✅ Project coverage is 73.39%. Comparing base (81954de) to head (7cba31c).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
src/compiler/clang.rs 84.45% 23 Missing ⚠️
src/compiler/gcc.rs 85.54% 12 Missing ⚠️
src/compiler/compiler.rs 33.33% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2516      +/-   ##
==========================================
+ Coverage   73.27%   73.39%   +0.12%     
==========================================
  Files          68       68              
  Lines       36907    37219     +312     
==========================================
+ Hits        27042    27316     +274     
- Misses       9865     9903      +38     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ChuanqiXu9

Copy link
Copy Markdown

FYI ccache/ccache#1523

@mathstuf mathstuf left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code looks good to me. I'll probably try to test it some time next week.

I can help out with GCC module map file parsing too (it will need to actually be parsed due to the $root meta-descriptor). However, the output path is also given by it…that may prove more difficult to "know".

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

The code looks good to me. I'll probably try to test it some time next week.

I can help out with GCC module map file parsing too (it will need to actually be parsed due to the $root meta-descriptor). However, the output path is also given by it…that may prove more difficult to "know".

Thanks! It was my first time contributing to sccache so I'm not too familiar with the process.

I will fix up the clippy issues + windows test issues :p

@mathstuf

Copy link
Copy Markdown
Contributor

It looks like BMI-only compilations are not properly considered:

467:    actual-stdout> [2-1->6/8@76.9] Building CXX object 'CMakeFiles/CXXModules__export_from_ninja@synth_cf4e03cd8b1e.dir/35a7889ff75f.bmi'          
467:    actual-stdout> FAILED: [code=254] CMakeFiles/CXXModules__export_from_ninja@synth_cf4e03cd8b1e.dir/35a7889ff75f.bmi 
467:    actual-stdout> /home/boeckb/code/depot/group-devel/sccache/src/target/debug/sccache  /usr/lib64/ccache/clang++   -g -std=gnu++20 --precompile -MD -MT 'CMakeFiles/CXXModules__
export_from_ninja@synth_cf4e03cd8b1e.dir/35a7889ff75f.bmi' -MF CMakeFiles/CXXModules__export_from_ninja@synth_cf4e03cd8b1e.dir/35a7889ff75f.bmi.d @CMakeFiles/CXXModules__export_from_
ninja@synth_cf4e03cd8b1e.dir/35a7889ff75f.bmi.modmap -o 'CMakeFiles/CXXModules__export_from_ninja@synth_cf4e03cd8b1e.dir/35a7889ff75f.bmi' -c /home/boeckb/misc/builds/cmake/build-cla
ng/Tests/RunCMake/CXXModulesCompile/exp-mods-from-ninja-ninja-install/lib/cxx/miu/importable.cxx
467:    actual-stdout> sccache: encountered fatal error
467:    actual-stdout> sccache: error: Failed to generate compile commands
467:    actual-stdout> sccache: caused by: Failed to generate compile commands
467:    actual-stdout> sccache: caused by: Missing object file output

This is from running CMake's CXXModules tests:

export SCCACHE_SERVER_PORT=23448 # unique to avoid ambient re-usage
export CXX="$(which sccache) $(which clang++)"
ctest -R CXXModules

@mathstuf

Copy link
Copy Markdown
Contributor

You can ignore the tests failing about JSON argument list mismatches; it is not robust against mutli-argument compilers like here. If you do the "symlink trick" (ln -s $(which sccache) clang++ && export CXX="$PWD/clang++", that probably avoids the issue).

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

Hmm, i think this is just me forgetting to change it somewhere. I will fix

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

Okay so it seems i think we should always treat it as an object even if it really isnt...

@TroyKomodo

This comment was marked as outdated.

@sylvestre

Copy link
Copy Markdown
Collaborator

could you please add an integration test ? ie high level which integrates into cmake and uses C++ module.
see
tests/cmake/ tests/sccache_args.rs tests/sccache_cargo.rs tests/sccache_rustc.rs

@mathstuf

Copy link
Copy Markdown
Contributor

I tried the cmake tests and they ran fine for me but there were only 2...

There are dozens of test cases within each CTest-level test. These are the relevant ones, thanks!

Can you inspect the cache state (--show-stats) on an initial run and a subsequent run to see how well caching itself is working?

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

could you please add an integration test ? ie high level which integrates into cmake and uses C++ module.

see

tests/cmake/ tests/sccache_args.rs tests/sccache_cargo.rs tests/sccache_rustc.rs

Yes!

@TroyKomodo

This comment was marked as outdated.

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

@sylvestre

Copy link
Copy Markdown
Collaborator

are you sure ?

Run ${SCCACHE_PATH} --show-stats
Compile requests                      4
Compile requests executed             4
Cache hits                            2
Cache hits (C/C++)                    2
Cache misses                          2
Cache misses (C/C++)                  2
Cache hits rate                   50.00 %
Cache hits rate (C/C++)           50.00 %

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

That seems right no? the first time we invoke the compiler not cached yet then we invoke again and its cached.

There are only 2 files to compile, so i expected it to be 4 requests 2 hit 2 misses.

@sylvestre

Copy link
Copy Markdown
Collaborator

oh yeah, my bad, i thought we were doing a reset

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

oh yeah, my bad, i thought we were doing a reset

I just copied the other cmake test example, but I can reset the stats if that makes it easier to follow

@mathstuf

Copy link
Copy Markdown
Contributor

Gah, module compilation in the tests doesn't really happen without a setting. For clang, this should work:

-DCMake_TEST_MODULE_COMPILATION=named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database,import_std23

Comment thread src/compiler/gcc.rs Outdated
Comment thread src/compiler/gcc.rs Outdated
}

if !module_only_flag {
if let Some(module_output_path) = module_output_path {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you please move this into a function?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can, however this function is ~550 lines, I think it would be better if in a followup PR we break up this function rather than doing a half job here by breaking up just this one conditional.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i still want this to be a new function, sorry

Comment thread tests/cmake-modules/CMakeLists.txt Outdated
Comment thread tests/cmake-modules/mymodule.cppm Outdated
@TroyKomodo

Copy link
Copy Markdown
Contributor Author

Gah, module compilation in the tests doesn't really happen without a setting. For clang, this should work:

-DCMake_TEST_MODULE_COMPILATION=named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database,import_std23

Ah, I see. Okay I will try again i think i need to setup my env to have support for import std.

@TroyKomodo

Copy link
Copy Markdown
Contributor Author

Gah, module compilation in the tests doesn't really happen without a setting. For clang, this should work:
-DCMake_TEST_MODULE_COMPILATION=named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly,build_database,import_std23

Ah, I see. Okay I will try again i think i need to setup my env to have support for import std.

let
  pkgs = import <nixpkgs> {
    overlays = [
      (final: prev: {
        llvmPackages_21 = prev.llvmPackages_21 // {
          libcxx = prev.llvmPackages_21.libcxx.overrideAttrs (old: {
            postInstall = (old.postInstall or "") + ''
              substituteInPlace $out/lib/libc++.modules.json \
                --replace-fail '"../share' "\"$out/share"
            '';
          });
        };
      })
    ];
  };

  llvm = pkgs.llvmPackages_21;

  wrappedClangScanDeps = pkgs.writeShellScriptBin "clang-scan-deps" ''
    newargs=()
    inject_next=false
    for arg in "$@"; do
      if $inject_next; then
        newargs+=("$arg")
        newargs+=("-isystem" "${llvm.libcxx.dev}/include/c++/v1")
        inject_next=false
      elif [[ "$arg" == "--" ]]; then
        newargs+=("$arg")
        inject_next=true
      else
        newargs+=("$arg")
      fi
    done
    exec ${llvm.clang-tools}/bin/clang-scan-deps "''${newargs[@]}"
  '';

  sccache = "/home/troy/github/troy/sccache/result/bin/sccache";

  clangWrapper = pkgs.writeShellScriptBin "clang" ''
    exec ${sccache} "${llvm.libcxxClang}/bin/clang" "''${@}"
  '';
  clangxxWrapper = pkgs.writeShellScriptBin "clang++" ''
    exec ${sccache} "${llvm.libcxxClang}/bin/clang++" "''${@}"
  '';
in
pkgs.mkShell {
  hardeningDisable = [ "all" ];

  buildInputs = [
    pkgs.cmake
    pkgs.mold
    pkgs.ninja
    pkgs.openssl
    llvm.libcxxClang
    llvm.clang-tools
    wrappedClangScanDeps
  ];

  shellHook = ''
    export CC="${clangWrapper}/bin/clang"
    export CXX="${clangxxWrapper}/bin/clang++"
    export LD_LIBRARY_PATH="${llvm.libcxx.out}/lib:${pkgs.openssl.out}/lib:''${LD_LIBRARY_PATH:-}"
    export NIX_CFLAGS_COMPILE="-B${llvm.libcxx.out}/lib -isystem ${llvm.libcxx.dev}/include/c++/v1"
    export PATH="${wrappedClangScanDeps}/bin:''${PATH:-}"
  '';
}

A huge pain...

troy@troy-thinkpad ~/g/t/CMake (master) [SIGINT]> ctest -R CXXModules -j$(nproc) --test-dir=build   nix-shell 
Test project /home/troy/github/troy/CMake/build
Guessing configuration NoConfig
    Start 536: RunCMake.CXXModulesCompile
    Start 535: RunCMake.CXXModules
1/2 Test #535: RunCMake.CXXModules ..............   Passed   18.90 sec
2/2 Test #536: RunCMake.CXXModulesCompile .......   Passed  116.80 sec

100% tests passed, 0 tests failed out of 2

Label Time Summary:
CXXModules    = 135.70 sec*proc (2 tests)

Total Test time (real) = 116.81 sec
troy@troy-thinkpad ~/g/t/CMake (master)> ctest -R CXXModules -j$(nproc) --test-dir=build            nix-shell 
Test project /home/troy/github/troy/CMake/build
Guessing configuration NoConfig
    Start 536: RunCMake.CXXModulesCompile
    Start 535: RunCMake.CXXModules
1/2 Test #535: RunCMake.CXXModules ..............   Passed   19.94 sec
2/2 Test #536: RunCMake.CXXModulesCompile .......   Passed  104.62 sec

100% tests passed, 0 tests failed out of 2

Label Time Summary:
CXXModules    = 124.55 sec*proc (2 tests)

Total Test time (real) = 104.63 sec
troy@troy-thinkpad ~/g/t/CMake (master)>                                                            nix-shell 
Every 2.0s: /home/troy/github/troy/sccache/result/bin/sccache -s       troy-thinkpad: Mon Dec 22 12:47:11 2025

Compile requests                   1976
Compile requests executed           830
Cache hits                          756
Cache hits (C/C++)                  756
Cache misses                         72
Cache misses (C/C++)                 72
Cache hits rate                   91.30 %
Cache hits rate (C/C++)           91.30 %
Cache timeouts                        0
Cache read errors                     0
Forced recaches                       0
Cache write errors                    0
Cache errors                          0
Compilations                         72
Compilation failures                  2
Non-cacheable compilations            0
Non-cacheable calls                 244
Non-compilation calls               902
Unsupported compiler calls            0
Average cache write               0.001 s
Average compiler                  0.217 s
Average cache read hit            0.000 s
Failed distributed compilations       0

Non-cacheable reasons:
-E                                  244

Cache location                  Local disk: "/home/troy/github/troy/CMake/build/Tests/CMakeFiles/TestHome/.cac
he/sccache"
Use direct/preprocessor mode?   yes
Version (client)                0.12.0
Cache size                          155 MiB
Max cache size                       10 GiB



@sylvestre

Copy link
Copy Markdown
Collaborator

Integration tests fail because this branch is from a fork.

why do you think that ?

@mathstuf mathstuf left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems fine as a stepping stone towards actual support. Just one minor request.

Comment thread src/compiler/msvc.rs
@TroyKomodo

Copy link
Copy Markdown
Contributor Author

Integration tests fail because this branch is from a fork.

why do you think that ?

Initially it spoke about missing an auth token when uploading. I think that was fixed in some other PR, after a rebase i think you (or me) resolved a merge incorrectly and it included additional ci jobs which were removed/changed which is why CI was failing before my last commit.

@sylvestre
sylvestre merged commit 3ad5944 into mozilla:main Feb 27, 2026
49 of 50 checks passed
@TroyKomodo
TroyKomodo deleted the troy/cxx20-modules branch February 27, 2026 13:29
@avikivity

Copy link
Copy Markdown
Contributor

Thanks a lot for implementing this feature.

eleboucher pushed a commit to eleboucher/towonel that referenced this pull request May 22, 2026
….0) (#40)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [mozilla/sccache](https://github.com/mozilla/sccache) | minor | `0.14.0` → `0.15.0` |

---

### Release Notes

<details>
<summary>mozilla/sccache (mozilla/sccache)</summary>

### [`v0.15.0`](https://github.com/mozilla/sccache/releases/tag/v0.15.0)

[Compare Source](mozilla/sccache@v0.14.0...v0.15.0)

##### sccache 0.15.0

##### Summary

sccache 0.15.0 brings several notable improvements:

- **Multi-tier caching**: New support for layered caches with fallback and automatic backfilling between tiers ([#&#8203;2581](mozilla/sccache#2581)).
- **C++20 modules**: Initial (partial) support for compiling C++20 modules ([#&#8203;2516](mozilla/sccache#2516)).
- **Expanded MSVC support**: New flags handled including `d1nodatetime`, `await:strict` ([#&#8203;2617](mozilla/sccache#2617)), `Y-`, `YI`, `Zf` ([#&#8203;2663](mozilla/sccache#2663)), and the default `.pdb` extension for `/Fd` ([#&#8203;2621](mozilla/sccache#2621)).
- **New platforms**: loongarch64 support ([#&#8203;2669](mozilla/sccache#2669)) and `crt-static` for riscv64 musl targets ([#&#8203;2683](mozilla/sccache#2683)).
- **ccache interop**: Avoid double-caching when ccache is also installed in `PATH` ([#&#8203;2524](mozilla/sccache#2524)).
- **Cargo integration**: `CARGO_ENCODED_RUSTFLAGS` is now excluded from the env var hash to prevent spurious cache misses ([#&#8203;2651](mozilla/sccache#2651)), and dep-info handling correctly skips directories ([#&#8203;2676](mozilla/sccache#2676)).
- **Distribution**: cargo-binstall metadata for prebuilt binary installation ([#&#8203;2647](mozilla/sccache#2647)).
- **Reliability fixes**: GCS initialization ([#&#8203;2637](mozilla/sccache#2637)), Windows `Win32_Security` feature ([#&#8203;2627](mozilla/sccache#2627)), and retries for dist docker image builds ([#&#8203;2677](mozilla/sccache#2677)).

This release also includes a large round of clippy-driven cleanups and several CI fixes. Welcome to 7 new contributors!

##### Features

- Avoid double-caching when ccache is installed in PATH by [@&#8203;avikivity](https://github.com/avikivity) in [#&#8203;2524](mozilla/sccache#2524)
- partial c++20 module support by [@&#8203;TroyKomodo](https://github.com/TroyKomodo) in [#&#8203;2516](mozilla/sccache#2516)
- Add support for `d1nodatetime` & `await:strict` MSVC flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2617](mozilla/sccache#2617)
- msvc: Append the default .pdb extension for the /Fd argument by [@&#8203;ikolomiko](https://github.com/ikolomiko) in [#&#8203;2621](mozilla/sccache#2621)
- msvc: add support for Y-, YI, Zf flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2663](mozilla/sccache#2663)
- Implement multiple tiers caching with fallback and backfilling by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2581](mozilla/sccache#2581)
- feat: Add loongarch64 support by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2669](mozilla/sccache#2669)
- Add cargo-binstall metadata for prebuilt binary installation by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2647](mozilla/sccache#2647)

##### Fixes

- fix: add Win32\_Security feature to windows-sys dependency by [@&#8203;JulienCote](https://github.com/JulienCote) in [#&#8203;2627](mozilla/sccache#2627)
- Fix GCS initialization by [@&#8203;msuozzo](https://github.com/msuozzo) in [#&#8203;2637](mozilla/sccache#2637)
- fix: exclude `CARGO_ENCODED_RUSTFLAGS` from env var hash by [@&#8203;weihanglo](https://github.com/weihanglo) in [#&#8203;2651](mozilla/sccache#2651)
- fix: handle directories in dep-info source file hashing by [@&#8203;mmastrac](https://github.com/mmastrac) in [#&#8203;2676](mozilla/sccache#2676)

##### CI

- Revert "actions: add security audit workflow" by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2603](mozilla/sccache#2603)
- ci: fix artifact\_failure action when target dir does not exist by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2635](mozilla/sccache#2635)
- ci: set crt-static for riscv64 musl targets by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2683](mozilla/sccache#2683)
- Add retry for dists docker image build by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2677](mozilla/sccache#2677)

##### Clippy & cleanup

- clippy: fix cloned\_ref\_to\_slice\_refs lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2602](mozilla/sccache#2602)
- clippy: fix semicolon\_if\_nothing\_returned lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2601](mozilla/sccache#2601)
- clippy: fix cloned\_instead\_of\_copied lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2605](mozilla/sccache#2605)
- clippy: fix explicit\_into\_iter\_loop lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2616](mozilla/sccache#2616)
- clippy: fix unnecessary\_semicolon lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2615](mozilla/sccache#2615)
- clippy: fix manual\_string\_new lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2609](mozilla/sccache#2609)
- clippy: fix ptr\_as\_ptr lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2611](mozilla/sccache#2611)
- clippy: fix ref\_option lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2608](mozilla/sccache#2608)
- clippy: fix from\_iter\_instead\_of\_collect lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2614](mozilla/sccache#2614)
- Move PreprocessorCacheModeConfig to src/config.rs by [@&#8203;xis19](https://github.com/xis19) in [#&#8203;2604](mozilla/sccache#2604)
- Remove benchmark normalize\_win\_path\_utf8 by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2634](mozilla/sccache#2634)
- Move cmake-modules to integration tests by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2649](mozilla/sccache#2649)

##### Docs

- docs(Rust.md): Add caveats from README by [@&#8203;TheJanzap](https://github.com/TheJanzap) in [#&#8203;2684](mozilla/sccache#2684)

##### Dependencies

- chore: switch thirtyfour\_sync to thirtyfour by [@&#8203;tottoto](https://github.com/tottoto) in [#&#8203;2613](mozilla/sccache#2613)
- build(deps): bump actions/upload-artifact from 4 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2632](mozilla/sccache#2632)
- build(deps): bump actions/download-artifact from 5 to 8 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2631](mozilla/sccache#2631)
- chore(deps): update rust crate quinn-proto to v0.11.14 by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2645](mozilla/sccache#2645)

##### New Contributors

- [@&#8203;ikolomiko](https://github.com/ikolomiko) made their first contribution in [#&#8203;2621](mozilla/sccache#2621)
- [@&#8203;JulienCote](https://github.com/JulienCote) made their first contribution in [#&#8203;2627](mozilla/sccache#2627)
- [@&#8203;msuozzo](https://github.com/msuozzo) made their first contribution in [#&#8203;2637](mozilla/sccache#2637)
- [@&#8203;weihanglo](https://github.com/weihanglo) made their first contribution in [#&#8203;2651](mozilla/sccache#2651)
- [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) made their first contribution in [#&#8203;2669](mozilla/sccache#2669)
- [@&#8203;TheJanzap](https://github.com/TheJanzap) made their first contribution in [#&#8203;2684](mozilla/sccache#2684)
- [@&#8203;mmastrac](https://github.com/mmastrac) made their first contribution in [#&#8203;2676](mozilla/sccache#2676)

**Full Changelog**: <mozilla/sccache@v0.14.0...v0.15.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9naXRodWItcmVsZWFzZSIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/towonel/pulls/40
eleboucher pushed a commit to eleboucher/towonel that referenced this pull request May 22, 2026
….0) (#40)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [mozilla/sccache](https://github.com/mozilla/sccache) | minor | `0.14.0` → `0.15.0` |

---

### Release Notes

<details>
<summary>mozilla/sccache (mozilla/sccache)</summary>

### [`v0.15.0`](https://github.com/mozilla/sccache/releases/tag/v0.15.0)

[Compare Source](mozilla/sccache@v0.14.0...v0.15.0)

##### sccache 0.15.0

##### Summary

sccache 0.15.0 brings several notable improvements:

- **Multi-tier caching**: New support for layered caches with fallback and automatic backfilling between tiers ([#&#8203;2581](mozilla/sccache#2581)).
- **C++20 modules**: Initial (partial) support for compiling C++20 modules ([#&#8203;2516](mozilla/sccache#2516)).
- **Expanded MSVC support**: New flags handled including `d1nodatetime`, `await:strict` ([#&#8203;2617](mozilla/sccache#2617)), `Y-`, `YI`, `Zf` ([#&#8203;2663](mozilla/sccache#2663)), and the default `.pdb` extension for `/Fd` ([#&#8203;2621](mozilla/sccache#2621)).
- **New platforms**: loongarch64 support ([#&#8203;2669](mozilla/sccache#2669)) and `crt-static` for riscv64 musl targets ([#&#8203;2683](mozilla/sccache#2683)).
- **ccache interop**: Avoid double-caching when ccache is also installed in `PATH` ([#&#8203;2524](mozilla/sccache#2524)).
- **Cargo integration**: `CARGO_ENCODED_RUSTFLAGS` is now excluded from the env var hash to prevent spurious cache misses ([#&#8203;2651](mozilla/sccache#2651)), and dep-info handling correctly skips directories ([#&#8203;2676](mozilla/sccache#2676)).
- **Distribution**: cargo-binstall metadata for prebuilt binary installation ([#&#8203;2647](mozilla/sccache#2647)).
- **Reliability fixes**: GCS initialization ([#&#8203;2637](mozilla/sccache#2637)), Windows `Win32_Security` feature ([#&#8203;2627](mozilla/sccache#2627)), and retries for dist docker image builds ([#&#8203;2677](mozilla/sccache#2677)).

This release also includes a large round of clippy-driven cleanups and several CI fixes. Welcome to 7 new contributors!

##### Features

- Avoid double-caching when ccache is installed in PATH by [@&#8203;avikivity](https://github.com/avikivity) in [#&#8203;2524](mozilla/sccache#2524)
- partial c++20 module support by [@&#8203;TroyKomodo](https://github.com/TroyKomodo) in [#&#8203;2516](mozilla/sccache#2516)
- Add support for `d1nodatetime` & `await:strict` MSVC flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2617](mozilla/sccache#2617)
- msvc: Append the default .pdb extension for the /Fd argument by [@&#8203;ikolomiko](https://github.com/ikolomiko) in [#&#8203;2621](mozilla/sccache#2621)
- msvc: add support for Y-, YI, Zf flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2663](mozilla/sccache#2663)
- Implement multiple tiers caching with fallback and backfilling by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2581](mozilla/sccache#2581)
- feat: Add loongarch64 support by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2669](mozilla/sccache#2669)
- Add cargo-binstall metadata for prebuilt binary installation by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2647](mozilla/sccache#2647)

##### Fixes

- fix: add Win32\_Security feature to windows-sys dependency by [@&#8203;JulienCote](https://github.com/JulienCote) in [#&#8203;2627](mozilla/sccache#2627)
- Fix GCS initialization by [@&#8203;msuozzo](https://github.com/msuozzo) in [#&#8203;2637](mozilla/sccache#2637)
- fix: exclude `CARGO_ENCODED_RUSTFLAGS` from env var hash by [@&#8203;weihanglo](https://github.com/weihanglo) in [#&#8203;2651](mozilla/sccache#2651)
- fix: handle directories in dep-info source file hashing by [@&#8203;mmastrac](https://github.com/mmastrac) in [#&#8203;2676](mozilla/sccache#2676)

##### CI

- Revert "actions: add security audit workflow" by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2603](mozilla/sccache#2603)
- ci: fix artifact\_failure action when target dir does not exist by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2635](mozilla/sccache#2635)
- ci: set crt-static for riscv64 musl targets by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2683](mozilla/sccache#2683)
- Add retry for dists docker image build by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2677](mozilla/sccache#2677)

##### Clippy & cleanup

- clippy: fix cloned\_ref\_to\_slice\_refs lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2602](mozilla/sccache#2602)
- clippy: fix semicolon\_if\_nothing\_returned lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2601](mozilla/sccache#2601)
- clippy: fix cloned\_instead\_of\_copied lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2605](mozilla/sccache#2605)
- clippy: fix explicit\_into\_iter\_loop lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2616](mozilla/sccache#2616)
- clippy: fix unnecessary\_semicolon lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2615](mozilla/sccache#2615)
- clippy: fix manual\_string\_new lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2609](mozilla/sccache#2609)
- clippy: fix ptr\_as\_ptr lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2611](mozilla/sccache#2611)
- clippy: fix ref\_option lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2608](mozilla/sccache#2608)
- clippy: fix from\_iter\_instead\_of\_collect lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2614](mozilla/sccache#2614)
- Move PreprocessorCacheModeConfig to src/config.rs by [@&#8203;xis19](https://github.com/xis19) in [#&#8203;2604](mozilla/sccache#2604)
- Remove benchmark normalize\_win\_path\_utf8 by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2634](mozilla/sccache#2634)
- Move cmake-modules to integration tests by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2649](mozilla/sccache#2649)

##### Docs

- docs(Rust.md): Add caveats from README by [@&#8203;TheJanzap](https://github.com/TheJanzap) in [#&#8203;2684](mozilla/sccache#2684)

##### Dependencies

- chore: switch thirtyfour\_sync to thirtyfour by [@&#8203;tottoto](https://github.com/tottoto) in [#&#8203;2613](mozilla/sccache#2613)
- build(deps): bump actions/upload-artifact from 4 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2632](mozilla/sccache#2632)
- build(deps): bump actions/download-artifact from 5 to 8 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2631](mozilla/sccache#2631)
- chore(deps): update rust crate quinn-proto to v0.11.14 by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2645](mozilla/sccache#2645)

##### New Contributors

- [@&#8203;ikolomiko](https://github.com/ikolomiko) made their first contribution in [#&#8203;2621](mozilla/sccache#2621)
- [@&#8203;JulienCote](https://github.com/JulienCote) made their first contribution in [#&#8203;2627](mozilla/sccache#2627)
- [@&#8203;msuozzo](https://github.com/msuozzo) made their first contribution in [#&#8203;2637](mozilla/sccache#2637)
- [@&#8203;weihanglo](https://github.com/weihanglo) made their first contribution in [#&#8203;2651](mozilla/sccache#2651)
- [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) made their first contribution in [#&#8203;2669](mozilla/sccache#2669)
- [@&#8203;TheJanzap](https://github.com/TheJanzap) made their first contribution in [#&#8203;2684](mozilla/sccache#2684)
- [@&#8203;mmastrac](https://github.com/mmastrac) made their first contribution in [#&#8203;2676](mozilla/sccache#2676)

**Full Changelog**: <mozilla/sccache@v0.14.0...v0.15.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9naXRodWItcmVsZWFzZSIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/towonel/pulls/40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

sccache doesn't support c++module well

7 participants