Deprecation notice
Built-in support for the HTTP and Redis protocols will be removed in the next non-bug-fix ccache version. Use the remote storage helper mechanism (added in ccache 4.13) for HTTP/Redis storage instead.
Removed functionality
- Removed the cpp_extension (CCACHE_EXTENSION) configuration option since ccache now processes preprocessor output directly in memory instead of using intermediate files. [contributed by Joel Rosdahl]
New features and improvements
- Added support for the QCC (QNX) compiler. [contributed by Joy Wang]
- Added limited support for caching SARIF diagnostics: -fdiagnostics-format=sarif-stderr and -fdiagnostics-{add,set}-output=sarif:file=… for GCC, /experimental:log for MSVC. [contributed by Joel Rosdahl, Karl Fessel and Leander Schulten]
- Added automatic depend mode for NVCC on Windows. [contributed by Xing Xiwen]
- Added support for @layout=local in the file storage backend, allowing a copy or read-only mount of a local cache to be used as remote storage. [contributed by Joel Rosdahl]
- Extended the remote storage helper protocol with an exists operation, avoiding transfer of already stored values in reshare mode, and an info operation for reporting the helper’s identity and diagnostics. [contributed by Joel Rosdahl]
- Added a --dry-run option for previewing cleanup, eviction and directory trimming operations without removing files. [contributed by Joel Rosdahl]
- Added support for rewriting absolute profile data file paths to relative, improving cache sharing between different directory trees. [contributed by GitHub user markyang92]
- Added support for reflinking .dwo files when file cloning is enabled. [contributed by Fabian Parzefall]
- Added detection of C23 #embed directives in direct and depend mode and of assembler .incbin directives in depend mode, preventing false cache hits. [contributed by Joel Rosdahl and Haaris Rahman]
- Added support for -Wp, options with multiple macro definitions. [contributed by GitHub user subotac]
- Ccache now hashes the contents of Clang module files specified with -fmodule-file=, preventing false cache hits when a module changes. [contributed by GitHub user RedNicStone]
- Cleanup and eviction operations now print the amount of data and number of files removed. [contributed by Joel Rosdahl]
- Increased the maximum number of raw files stored in a cached result to 256. [contributed by Joel Rosdahl]
- Modernized use of C++ type traits. [contributed by Gregor Jasny]
- Improved portability of compiler exit status handling. [contributed by Joel Rosdahl]
- Made path rewriting on Windows case-insensitive and Unicode-aware. [contributed by Joel Rosdahl]
- Made ignore_headers_in_manifest match case-insensitively on Windows. [contributed by GitHub user trustytrojan]
- Reduced the number of system calls for IPC requests. [contributed by Joel Rosdahl]
Bug fixes
- Fixed base_dir path rewriting when using MSVC’s /Yu option: paths are no longer rewritten to relative when using a precompiled header, since MSVC then does not like relative paths for the /Yu and /FI arguments. [contributed by Joel Rosdahl]
- Fixed handling of compiler options when one recognized option is a prefix of another. [contributed by Joel Rosdahl]
- Fixed base_dir handling for include paths in preprocessor mode (regression in ccache 4.12.2). [contributed by Joel Rosdahl]
- Fixed handling of Clang 22’s --warning-suppression-mappings option. [contributed by Joel Rosdahl]