* Add `objective-c++-header` as supported language.
* Parse -ivfsstatcache
* Simplify Xcode CI / Docs
I happened to stumble upon the `C_COMPILER_LAUNCHER` Xcode attribute,
which fits the bill perfectly, so use that instead.
* Mark `-index-store-path` as Hard
Xcode sets it by default, but it can be disabled with
`COMPILER_INDEX_STORE_ENABLE=NO` Xcode build setting.
* Mark serialize-diagnostics and deps as artifacts
Xcode requires these files to be present after compiling, so they need
to be stored and restored for the build to complete.
* Update tests for the dep changes
* Add test for `-index-store-path`
* Add documentation for Xcode use
* Xcode integration test
* Add comment about wrapper script use
* Add custom zstd compression level
* docs for SCCACHE_CACHE_ZSTD_LEVEL
* add zstd level test
* docs for zstd level that warns new cache required
* fix integration-test of zstd-compression-level
45386750a4 reverted my initial change.
This re-enables direct mode by default, making sure only the disk
cache is affected. There may still be an issue with Windows, but
details are sparse and no reproduction has been found yet.
Preprocessor cache mode (or "direct mode" in ccache speak), offers a
measurable improvement for C/C++ caching.
A non-scientific test of compiling Firefox on a Ryzen 7950x with
hot caches saw this mode changing the wall time from ~48s to ~13s.
This is the overall time spent in `mach build` with the only work
needed is to recompile all C++.
As noted in the docs, this applies only to local storage.
We define the `-Wp,*` argument for GCC/Clang, disable direct mode
if it's present, since it's too hard to handle.
`ccache` allows `-Wp,-MD,path`, `-Wp,-MMD,path` and `-Wp,-D_define_`.
We don't handle these for now, since they need more careful attention.
Adds an iteration layer between the command-line argument iterator and the `ArgIter` used to compare arguments against the supported flags/options. This new layer determines if an option is a response-file directive (`@file`), and if it is, reads the options from the file before continuing to iterate over the command-line args. This requires an additional file-parsing iterating (`SplitArgs`) to split the file contents into arguments in a way which is consistent with the file format.
The `encoding` crate is used to read utf-8 (default encoding in rust) & utf-16 (big and little endian) encodings. The latter is used by `MSBuild` when generating response files.
Resources:
- [MSDN](https://docs.microsoft.com/en-us/cpp/build/reference/at-specify-a-compiler-response-file)
- [MSBuild](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-response-files?view=vs-2019)
Contributes to #107
Based off of #192Closes#1082Closes#1183