From: Joel Rosdahl Date: Sun, 4 Oct 2020 18:50:58 +0000 (+0200) Subject: Update NEWS X-Git-Tag: v4.0~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2d61546eefd7a8fb9967414c4b63f31dfed66a7;p=thirdparty%2Fccache.git Update NEWS --- diff --git a/doc/NEWS.adoc b/doc/NEWS.adoc index 6aa74b396..57221d8bf 100644 --- a/doc/NEWS.adoc +++ b/doc/NEWS.adoc @@ -5,56 +5,198 @@ ccache 4.0 ---------- Unreleased -High-level summary of changes (work in progress) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Compilation results are now stored in single aggregated files; before up to - seven files per cached result were used. +Tooling +~~~~~~~ + +- CMake is now used instead of Autoconf for build configuration. + +- A C++11 compiler, a C99 compiler and CMake 3.4.3 or newer are now required to + build ccache. + +- Ccache can now be built using Microsoft Visual C++. + + +Functional changes +~~~~~~~~~~~~~~~~~~ -- Result and manifest files are now compressed by the real-time compression - algorithm Zstandard by default. +- All data of a cached result is now stored in a single file called “result” + instead of up to seven files. This reduces i-node usage and improves data + locality. -- BLAKE3 is now used instead of MD4 for hashing input. +- Added compression of result and manifest files using the + http://zstd.net[Zstandard] algorithm. Compression is enabled by default with + compression level 1. This makes ccache able to store more data in the cache. + Previously compression with zlib (deflate) was available but disabled by + default. Files can be recompressed with a another compression level later + with the `-X/--recompress` option described further below. -- Added checksumming of result files using XXH3 to detect data corruption. +- Switched to use the https://blake3.io[BLAKE3] algorithm instead of MD4 for + hashing input. This improves performance and reduces the risk of hash + collisions. -- Made the hard link mode less error prone. +- Added checksumming of result and manifest files using the + http://xxhash.com[XXH3] algorithm to detect data corruption. -- Added opt-in support for using file cloning (on Btrfs/XFS/APFS) to copy data - to and from the cache. +- Ccache now follows the + https://specifications.freedesktop.org/basedir-spec/[XDG base directory + specification]. This means that the default cache directory on Unix systems + is `$XDG_CACHE_HOME/ccache` (with `$HOME/.cache/ccache` as the fallback if + `XDG_CACHE_HOME` is not set) and the configuration file is + `$XDG_CONFIG_HOME/ccache/ccache.conf` (with + `$HOME/.config/ccache/ccache.conf` as the fallback). On macOS, the fallbacks + are `$HOME/Library/Caches/ccache` and + `$HOME/Library/Preferences/ccache/ccache.conf`. On Windows, the fallbacks are + `%APPDATA%/ccache` and `%APPDATA%/ccache/ccache.conf`. Exception: If the + legacy `$HOME/.ccache` directory exists, that directory is used for the + default cache location and `$HOME/.ccache/ccache.conf` for the configuration + file. -- A C++11 compiler is now required to build ccache. +- Cache statistics are now stored in files on cache level 2 to reduce lock + contention when there are many parallel compilations. -- Build tooling switched from Autoconf to CMake. +- An appropriate cache directory level structure is now chosen automatically. + The `cache_dir_levels` (`CCACHE_NLEVELS`) configuration option has therefore + been removed. -- Added a `-x/--show-compression` option which shows some statistics about - cache compression. +- Added an experimental “inode cache” for file hashes, allowing computed hash + values to be reused both within and between builds. The inode cache is off by + default but can be enabled by setting `inode_cache` (`CCACHE_INODECACHE`) to + `true`. -- Added a `-X/--recompress` option which can be used to recompress the cache - data with another compression level (or make it uncompressed). If you choose - to disable compression by default or to use a level with a low compression - ratio, you can recompress the cache with a higher compression level after the - build or at another time when there are more CPU cycles available, for - instance every night. +- Added support for using file cloning (AKA “reflinks”) on Btrfs, XFS and APFS + to copy data to and from the cache very efficiently. + +- Two measures have been implemented to make the hard link mode safer: + hard-linked files are made read-only and inadvertent content changes that + affect file size are detected. + +- Added a command line option `-x/--show-compression` which shows statistics + about cache compression. + +- Added a command line option `-X/--recompress` which can be used to recompress + the cache data with another compression level or make it uncompressed. If you + choose to disable compression by default, or to use a compression level with + a low compression ratio, you can recompress the cache with a higher + compression level after the build or at another time when there are more CPU + cycles available, for instance every night. + +- Added a command line option `--evict-older-than` which can be used to remove + cache entries older than a certain age. + +- Added a command line option `-d/--directory` which can be used to specify + cache directory to operate on instead of having to set `CCACHE_DIR` + temporarily. - A progress bar has been added to show the progress of time-consuming options - like `-c/--cleanup`, `-C/--clear`, `-x/--show-compression` and - `-X/--recompress`. + like `-c/--cleanup`, `-C/--clear`, `--evict-older-than`, + `-x/--show-compression` and `-X/--recompress`. - When supported by the CPU, a SIMD-friendly (using AVX2) algorithm is now used - to scan input source code for `__DATE__` and `__TIME__` macros. This can - decrease the number of CPU cycles for a direct cache hit with up to 15% in - some cases. + to scan input source code for `__DATE__`, `__TIME__` and `__TIMESTAMP__` + macros. This can decrease the number of CPU cycles for a direct cache hit + with up to 15% in some cases. -- Added a new inode cache for file hashes, allowing computed hash values to be - reused both within and between builds. +- Some unnecessary `stat(2)` system calls are now avoided when verifying header + files. - Compiler diagnostic messages are now always cached in color, and ccache - strips the color codes on the fly when requested explicitly by command-line + strips the color codes on the fly when requested explicitly by a command-line option or when stderr does not refer to a TTY. This allows IDEs and terminals to share cached compilation results. -- (More to be written.) +- Added optional logging to syslog. + +- The compiler option `-fmodules` is now handled in “depend mode”. If “depend + mode” is disabled the option is still considered too hard and ccache will + fall back to running the compiler. + +- `realpath(3)` is no longer used for normalization when computing relative + paths. This makes it possible to get cache hits when the source or build + directory is a symbolic link to an absolute path that includes unstable + information like build IDs or timestamps. + +- Added a new `ignore_options` (`CCACHE_IGNOREOPTIONS`) configuration option + which makes it possible to exclude compiler options from the hash. + +- Added an `absolute_paths_in_stderr` (`CCACHE_ABSSTDERR`) configuration option + which, if set, makes ccache rewrite absolute paths in compiler warnings and + errors to relative. + +- Improved handling of umask. The configured `umask` (`CCACHE_UMASK`) is now + only applied to files and directories in the cache directory. Previously the + umask was applied to all files produced by ccache and the executed compiler. + +- Ccache is now able to share cache entries for different object file names + when using `-MD` or `-MMD`. + +- Clang’s `-Xclang` (used by CMake for precompiled headers), + `-fno-pch-timestamp`, `-emit-pch`, `-emit-pth` and `-include-pth` options are + now understood. + +- Added support for the HIP (“C++ Heterogeneous-Compute Interface for + Portability”) language. + +- The manifest format now allows for header files larger than 4 GiB. + +- Made it possible to once again cache compilations with `__DATE__` in the + source code. + +- Added handling of the `__TIMESTAMP__` macro. + +- An absolute input source path is now rewritten to a relative path when using + `base_dir`. + +- `waitpid` system calls interrupted by a signal are now handled correctly. + +- Made handling of `.dwo` files and interaction between `-gsplit-dwarf` and + other `-g*` options more robust. + +- The “couldn't find compiler” statistics counter is no longer incremented when + ccache exits with a fatal error. + +- Failure to run a `compiler_check` command is no longer a fatal error. + +- Added command line options `--dump-result` and `--extract-result` for + inspecting and extracting result files. + +- Added a command line option `--checksum-file` for debugging or evaluating the + checksum algorithm. + +- Improved error message for “ccache -o=K=V” (trying to set a configuration + option named “=K”). + +- Made timestamps in statistics files Y2038-proof. + +- Removed code for populating a newly created configuration file with cache + size values for cache directories created by ccache versions older than 3.2 + (released 2014). + +- Removed knowledge about a top-level stats file created by ccache versions + older than 3.1 (released 2010). + + +Other improvements +~~~~~~~~~~~~~~~~~~ + +- Improved help text and documentation of command line options. + +- Improved documentation of the `base_dir` configuration option. + +- Improved documentation of preprocessor and direct modes. + +- Added HTML anchors to configuration options in the manual so that it is + possible to construct a URL to a specific item. + +- Tweaked placement of “(readonly)” in output of `ccache -s`. + +- Improved visibility of color output from the test suite. + +- Fixed test suite problems on macOS. + +- Disabled hardlink tests on AFS since it lacks such support. + +- Disabled read-only tests on file systems that lack such support. ccache 3.7.12