Repository navigation
partial c++20 module support - #2516
Conversation
8f46985 to
930732c
Compare
Codecov Report❌ Patch coverage is
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. 🚀 New features to boost your workflow:
|
mathstuf
left a comment
There was a problem hiding this comment.
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 |
489600b to
71e9190
Compare
|
It looks like BMI-only compilations are not properly considered: This is from running CMake's export SCCACHE_SERVER_PORT=23448 # unique to avoid ambient re-usage
export CXX="$(which sccache) $(which clang++)"
ctest -R CXXModules |
|
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" ( |
|
Hmm, i think this is just me forgetting to change it somewhere. I will fix |
|
Okay so it seems i think we should always treat it as an object even if it really isnt... |
c0a57b6 to
8841d54
Compare
This comment was marked as outdated.
This comment was marked as outdated.
|
could you please add an integration test ? ie high level which integrates into cmake and uses C++ module. |
There are dozens of test cases within each CTest-level test. These are the relevant ones, thanks! Can you inspect the cache state ( |
Yes! |
This comment was marked as outdated.
This comment was marked as outdated.
|
https://github.com/mozilla/sccache/actions/runs/20413181927/job/58653103431 test results look good! |
|
are you sure ? |
|
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. |
|
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 |
|
Gah, module compilation in the tests doesn't really happen without a setting. For
|
| } | ||
|
|
||
| if !module_only_flag { | ||
| if let Some(module_output_path) = module_output_path { |
There was a problem hiding this comment.
could you please move this into a function?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
i still want this to be a new function, sorry
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... |
cf216c5 to
10fc4f6
Compare
why do you think that ? |
mathstuf
left a comment
There was a problem hiding this comment.
Seems fine as a stepping stone towards actual support. Just one minor request.
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. |
|
Thanks a lot for implementing this feature. |
….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 ([#​2581](mozilla/sccache#2581)). - **C++20 modules**: Initial (partial) support for compiling C++20 modules ([#​2516](mozilla/sccache#2516)). - **Expanded MSVC support**: New flags handled including `d1nodatetime`, `await:strict` ([#​2617](mozilla/sccache#2617)), `Y-`, `YI`, `Zf` ([#​2663](mozilla/sccache#2663)), and the default `.pdb` extension for `/Fd` ([#​2621](mozilla/sccache#2621)). - **New platforms**: loongarch64 support ([#​2669](mozilla/sccache#2669)) and `crt-static` for riscv64 musl targets ([#​2683](mozilla/sccache#2683)). - **ccache interop**: Avoid double-caching when ccache is also installed in `PATH` ([#​2524](mozilla/sccache#2524)). - **Cargo integration**: `CARGO_ENCODED_RUSTFLAGS` is now excluded from the env var hash to prevent spurious cache misses ([#​2651](mozilla/sccache#2651)), and dep-info handling correctly skips directories ([#​2676](mozilla/sccache#2676)). - **Distribution**: cargo-binstall metadata for prebuilt binary installation ([#​2647](mozilla/sccache#2647)). - **Reliability fixes**: GCS initialization ([#​2637](mozilla/sccache#2637)), Windows `Win32_Security` feature ([#​2627](mozilla/sccache#2627)), and retries for dist docker image builds ([#​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 [@​avikivity](https://github.com/avikivity) in [#​2524](mozilla/sccache#2524) - partial c++20 module support by [@​TroyKomodo](https://github.com/TroyKomodo) in [#​2516](mozilla/sccache#2516) - Add support for `d1nodatetime` & `await:strict` MSVC flags by [@​AJIOB](https://github.com/AJIOB) in [#​2617](mozilla/sccache#2617) - msvc: Append the default .pdb extension for the /Fd argument by [@​ikolomiko](https://github.com/ikolomiko) in [#​2621](mozilla/sccache#2621) - msvc: add support for Y-, YI, Zf flags by [@​AJIOB](https://github.com/AJIOB) in [#​2663](mozilla/sccache#2663) - Implement multiple tiers caching with fallback and backfilling by [@​Felixoid](https://github.com/Felixoid) in [#​2581](mozilla/sccache#2581) - feat: Add loongarch64 support by [@​wojiushixiaobai](https://github.com/wojiushixiaobai) in [#​2669](mozilla/sccache#2669) - Add cargo-binstall metadata for prebuilt binary installation by [@​sylvestre](https://github.com/sylvestre) in [#​2647](mozilla/sccache#2647) ##### Fixes - fix: add Win32\_Security feature to windows-sys dependency by [@​JulienCote](https://github.com/JulienCote) in [#​2627](mozilla/sccache#2627) - Fix GCS initialization by [@​msuozzo](https://github.com/msuozzo) in [#​2637](mozilla/sccache#2637) - fix: exclude `CARGO_ENCODED_RUSTFLAGS` from env var hash by [@​weihanglo](https://github.com/weihanglo) in [#​2651](mozilla/sccache#2651) - fix: handle directories in dep-info source file hashing by [@​mmastrac](https://github.com/mmastrac) in [#​2676](mozilla/sccache#2676) ##### CI - Revert "actions: add security audit workflow" by [@​sylvestre](https://github.com/sylvestre) in [#​2603](mozilla/sccache#2603) - ci: fix artifact\_failure action when target dir does not exist by [@​sylvestre](https://github.com/sylvestre) in [#​2635](mozilla/sccache#2635) - ci: set crt-static for riscv64 musl targets by [@​wojiushixiaobai](https://github.com/wojiushixiaobai) in [#​2683](mozilla/sccache#2683) - Add retry for dists docker image build by [@​Felixoid](https://github.com/Felixoid) in [#​2677](mozilla/sccache#2677) ##### Clippy & cleanup - clippy: fix cloned\_ref\_to\_slice\_refs lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2602](mozilla/sccache#2602) - clippy: fix semicolon\_if\_nothing\_returned lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2601](mozilla/sccache#2601) - clippy: fix cloned\_instead\_of\_copied lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2605](mozilla/sccache#2605) - clippy: fix explicit\_into\_iter\_loop lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2616](mozilla/sccache#2616) - clippy: fix unnecessary\_semicolon lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2615](mozilla/sccache#2615) - clippy: fix manual\_string\_new lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2609](mozilla/sccache#2609) - clippy: fix ptr\_as\_ptr lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2611](mozilla/sccache#2611) - clippy: fix ref\_option lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2608](mozilla/sccache#2608) - clippy: fix from\_iter\_instead\_of\_collect lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2614](mozilla/sccache#2614) - Move PreprocessorCacheModeConfig to src/config.rs by [@​xis19](https://github.com/xis19) in [#​2604](mozilla/sccache#2604) - Remove benchmark normalize\_win\_path\_utf8 by [@​sylvestre](https://github.com/sylvestre) in [#​2634](mozilla/sccache#2634) - Move cmake-modules to integration tests by [@​Felixoid](https://github.com/Felixoid) in [#​2649](mozilla/sccache#2649) ##### Docs - docs(Rust.md): Add caveats from README by [@​TheJanzap](https://github.com/TheJanzap) in [#​2684](mozilla/sccache#2684) ##### Dependencies - chore: switch thirtyfour\_sync to thirtyfour by [@​tottoto](https://github.com/tottoto) in [#​2613](mozilla/sccache#2613) - build(deps): bump actions/upload-artifact from 4 to 7 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2632](mozilla/sccache#2632) - build(deps): bump actions/download-artifact from 5 to 8 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2631](mozilla/sccache#2631) - chore(deps): update rust crate quinn-proto to v0.11.14 by [@​xtqqczze](https://github.com/xtqqczze) in [#​2645](mozilla/sccache#2645) ##### New Contributors - [@​ikolomiko](https://github.com/ikolomiko) made their first contribution in [#​2621](mozilla/sccache#2621) - [@​JulienCote](https://github.com/JulienCote) made their first contribution in [#​2627](mozilla/sccache#2627) - [@​msuozzo](https://github.com/msuozzo) made their first contribution in [#​2637](mozilla/sccache#2637) - [@​weihanglo](https://github.com/weihanglo) made their first contribution in [#​2651](mozilla/sccache#2651) - [@​wojiushixiaobai](https://github.com/wojiushixiaobai) made their first contribution in [#​2669](mozilla/sccache#2669) - [@​TheJanzap](https://github.com/TheJanzap) made their first contribution in [#​2684](mozilla/sccache#2684) - [@​mmastrac](https://github.com/mmastrac) made their first contribution in [#​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
….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 ([#​2581](mozilla/sccache#2581)). - **C++20 modules**: Initial (partial) support for compiling C++20 modules ([#​2516](mozilla/sccache#2516)). - **Expanded MSVC support**: New flags handled including `d1nodatetime`, `await:strict` ([#​2617](mozilla/sccache#2617)), `Y-`, `YI`, `Zf` ([#​2663](mozilla/sccache#2663)), and the default `.pdb` extension for `/Fd` ([#​2621](mozilla/sccache#2621)). - **New platforms**: loongarch64 support ([#​2669](mozilla/sccache#2669)) and `crt-static` for riscv64 musl targets ([#​2683](mozilla/sccache#2683)). - **ccache interop**: Avoid double-caching when ccache is also installed in `PATH` ([#​2524](mozilla/sccache#2524)). - **Cargo integration**: `CARGO_ENCODED_RUSTFLAGS` is now excluded from the env var hash to prevent spurious cache misses ([#​2651](mozilla/sccache#2651)), and dep-info handling correctly skips directories ([#​2676](mozilla/sccache#2676)). - **Distribution**: cargo-binstall metadata for prebuilt binary installation ([#​2647](mozilla/sccache#2647)). - **Reliability fixes**: GCS initialization ([#​2637](mozilla/sccache#2637)), Windows `Win32_Security` feature ([#​2627](mozilla/sccache#2627)), and retries for dist docker image builds ([#​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 [@​avikivity](https://github.com/avikivity) in [#​2524](mozilla/sccache#2524) - partial c++20 module support by [@​TroyKomodo](https://github.com/TroyKomodo) in [#​2516](mozilla/sccache#2516) - Add support for `d1nodatetime` & `await:strict` MSVC flags by [@​AJIOB](https://github.com/AJIOB) in [#​2617](mozilla/sccache#2617) - msvc: Append the default .pdb extension for the /Fd argument by [@​ikolomiko](https://github.com/ikolomiko) in [#​2621](mozilla/sccache#2621) - msvc: add support for Y-, YI, Zf flags by [@​AJIOB](https://github.com/AJIOB) in [#​2663](mozilla/sccache#2663) - Implement multiple tiers caching with fallback and backfilling by [@​Felixoid](https://github.com/Felixoid) in [#​2581](mozilla/sccache#2581) - feat: Add loongarch64 support by [@​wojiushixiaobai](https://github.com/wojiushixiaobai) in [#​2669](mozilla/sccache#2669) - Add cargo-binstall metadata for prebuilt binary installation by [@​sylvestre](https://github.com/sylvestre) in [#​2647](mozilla/sccache#2647) ##### Fixes - fix: add Win32\_Security feature to windows-sys dependency by [@​JulienCote](https://github.com/JulienCote) in [#​2627](mozilla/sccache#2627) - Fix GCS initialization by [@​msuozzo](https://github.com/msuozzo) in [#​2637](mozilla/sccache#2637) - fix: exclude `CARGO_ENCODED_RUSTFLAGS` from env var hash by [@​weihanglo](https://github.com/weihanglo) in [#​2651](mozilla/sccache#2651) - fix: handle directories in dep-info source file hashing by [@​mmastrac](https://github.com/mmastrac) in [#​2676](mozilla/sccache#2676) ##### CI - Revert "actions: add security audit workflow" by [@​sylvestre](https://github.com/sylvestre) in [#​2603](mozilla/sccache#2603) - ci: fix artifact\_failure action when target dir does not exist by [@​sylvestre](https://github.com/sylvestre) in [#​2635](mozilla/sccache#2635) - ci: set crt-static for riscv64 musl targets by [@​wojiushixiaobai](https://github.com/wojiushixiaobai) in [#​2683](mozilla/sccache#2683) - Add retry for dists docker image build by [@​Felixoid](https://github.com/Felixoid) in [#​2677](mozilla/sccache#2677) ##### Clippy & cleanup - clippy: fix cloned\_ref\_to\_slice\_refs lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2602](mozilla/sccache#2602) - clippy: fix semicolon\_if\_nothing\_returned lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2601](mozilla/sccache#2601) - clippy: fix cloned\_instead\_of\_copied lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2605](mozilla/sccache#2605) - clippy: fix explicit\_into\_iter\_loop lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2616](mozilla/sccache#2616) - clippy: fix unnecessary\_semicolon lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2615](mozilla/sccache#2615) - clippy: fix manual\_string\_new lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2609](mozilla/sccache#2609) - clippy: fix ptr\_as\_ptr lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2611](mozilla/sccache#2611) - clippy: fix ref\_option lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2608](mozilla/sccache#2608) - clippy: fix from\_iter\_instead\_of\_collect lint by [@​xtqqczze](https://github.com/xtqqczze) in [#​2614](mozilla/sccache#2614) - Move PreprocessorCacheModeConfig to src/config.rs by [@​xis19](https://github.com/xis19) in [#​2604](mozilla/sccache#2604) - Remove benchmark normalize\_win\_path\_utf8 by [@​sylvestre](https://github.com/sylvestre) in [#​2634](mozilla/sccache#2634) - Move cmake-modules to integration tests by [@​Felixoid](https://github.com/Felixoid) in [#​2649](mozilla/sccache#2649) ##### Docs - docs(Rust.md): Add caveats from README by [@​TheJanzap](https://github.com/TheJanzap) in [#​2684](mozilla/sccache#2684) ##### Dependencies - chore: switch thirtyfour\_sync to thirtyfour by [@​tottoto](https://github.com/tottoto) in [#​2613](mozilla/sccache#2613) - build(deps): bump actions/upload-artifact from 4 to 7 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2632](mozilla/sccache#2632) - build(deps): bump actions/download-artifact from 5 to 8 by [@​dependabot](https://github.com/dependabot)\[bot] in [#​2631](mozilla/sccache#2631) - chore(deps): update rust crate quinn-proto to v0.11.14 by [@​xtqqczze](https://github.com/xtqqczze) in [#​2645](mozilla/sccache#2645) ##### New Contributors - [@​ikolomiko](https://github.com/ikolomiko) made their first contribution in [#​2621](mozilla/sccache#2621) - [@​JulienCote](https://github.com/JulienCote) made their first contribution in [#​2627](mozilla/sccache#2627) - [@​msuozzo](https://github.com/msuozzo) made their first contribution in [#​2637](mozilla/sccache#2637) - [@​weihanglo](https://github.com/weihanglo) made their first contribution in [#​2651](mozilla/sccache#2651) - [@​wojiushixiaobai](https://github.com/wojiushixiaobai) made their first contribution in [#​2669](mozilla/sccache#2669) - [@​TheJanzap](https://github.com/TheJanzap) made their first contribution in [#​2684](mozilla/sccache#2684) - [@​mmastrac](https://github.com/mmastrac) made their first contribution in [#​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
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