Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
CCACHE(1)							       CCACHE(1)

NAME
     ccache - a fast C/C++ compiler cache

SYNOPSIS
     ccache [ccache options]
     ccache [KEY=VALUE ...] compiler [compiler options]
     compiler [compiler options]

     The  first  form takes options described in COMMAND LINE OPTIONS below. The
     second form invokes the compiler, optionally using configuration options as
     KEY=VALUE arguments. In the third form, ccache is masquerading as the  com-
     piler as described in RUN MODES.

DESCRIPTION
     Ccache  is  a compiler cache. It speeds up recompilation by caching the re-
     sult of previous compilations and detecting when the  same  compilation  is
     being done again.

     Ccache  has  been carefully written to always produce exactly the same com-
     piler output that you would get without the cache. The only way you  should
     be able to tell that you are using ccache is the speed. Currently known ex-
     ceptions  to this goal are listed under CAVEATS. If you discover an undocu-
     mented case where ccache changes the output of your compiler, please let us
     know.

RUN MODES
     There are two different ways to use ccache to cache a compilation:

      1. Prefix your compilation command with ccache. This method is most conve-
	 nient if you just want to try out ccache or wish to  use  it  for  some
	 specific projects. Example:

	     ccache gcc -c example.c

       2. Let ccache masquerade as the compiler. This method is most useful when
	 you wish to use ccache for all your compilations. To do this, create  a
	 symbolic link to ccache named as the compiler. For example, here is set
	 up ccache to masquerade as gcc and g++:

	     cp ccache /usr/local/bin/
	     ln -s ccache /usr/local/bin/gcc
	     ln -s ccache /usr/local/bin/g++

	 On  platforms	that  don't  support  symbolic links you can simply copy
	 ccache to the compiler name instead for a similar effect:

	     cp ccache /usr/local/bin/gcc
	     cp ccache /usr/local/bin/g++

	 And so forth. This will work as long as  the  directory  with	symbolic
	 links	or  ccache  copies  comes before the directory with the compiler
	 (typically /usr/bin) in PATH.

	     Warning

	     The technique of letting ccache masquerade as  the  compiler  works
	     well,  but currently doesn't interact well with other tools that do
	     the same thing. See USING CCACHE WITH OTHER COMPILER WRAPPERS.

COMMAND LINE OPTIONS
     These command line options only apply when you invoke ccache  as  "ccache".
     When  ccache  masquerades	as a compiler (as described in the previous sec-
     tion), the normal compiler options apply and you should refer to  the  com-
     piler's documentation.

   Common options
     -c, --cleanup
	 Clean up the cache by removing not recently used cached files until the
	 specified file number and cache size limits are not exceeded. This also
	 recalculates  the  cache file count and size totals. Normally, there is
	 no need to initiate cleanup manually as ccache keeps  the  cache  below
	 the specified limits at runtime and keeps statistics up to date on each
	 compilation.  Forcing	a  cleanup is mostly useful if you have modified
	 the cache contents manually or believe that the cache	size  statistics
	 may be inaccurate.

     -C, --clear
	 Clear the entire cache, removing all cached files, but keeping the con-
	 figuration file.

     --config-path PATH
	 Let the command line options operate on configuration file PATH instead
	 of the default. Using this option has the same effect as setting (over-
	 riding) the environment variable CCACHE_CONFIGPATH temporarily.

     -d, --dir PATH
	 Let the command line options operate on cache directory PATH instead of
	 the  default.	For example, to show statistics for a cache directory at
	 /shared/ccache you can run ccache -d /shared/ccache -s. Using this  op-
	 tion has the same effect as setting the environment variable CCACHE_DIR
	 temporarily.

     --evict-namespace NAMESPACE
	 Remove files created in the given namespace from the cache.

     --evict-older-than AGE
	 Remove  files used less recently than AGE from the cache. AGE should be
	 an unsigned integer with a d (days) or s (seconds) suffix. If	combined
	 with --evict-namespace, only remove files within that namespace.

     -h, --help
	 Print a summary of command line options.

     -F NUM, --max-files NUM
	 Set  the maximum number of files allowed in the cache to NUM. Use 0 for
	 no limit. The value is stored in a configuration file in the cache  di-
	 rectory and applies to all future compilations.

     -M SIZE, --max-size SIZE
	 Set the maximum size of the files stored in the cache. SIZE should be a
	 number  followed  by an optional suffix: kB, MB, GB, TB (decimal), KiB,
	 MiB, GiB or TiB (binary). The default suffix  is  GiB.  Use  0  for  no
	 limit.  The value is stored in a configuration file in the cache direc-
	 tory and applies to all future compilations.

     -X LEVEL, --recompress LEVEL
	 Recompress the cache to level LEVEL using the Zstandard algorithm.  The
	 level	can  be  an  integer,  with  the  same semantics as the compres-
	 sion_level configuration option, or the special value uncompressed  for
	 no  compression. See [Cache compression] for more information. This can
	 potentially take a long time since all files in the cache  need  to  be
	 visited.  Only  files	that  are  currently compressed with a different
	 level than LEVEL will be recompressed.

     --recompress-threads THREADS
	 Use up to THREADS threads when recompressing the cache. The default  is
	 to use one thread per CPU.

     -o KEY=VALUE, --set-config KEY=VALUE
	 Set  configuration  option  KEY to VALUE in the configuration file. See
	 CONFIGURATION for more information.

     -x, --show-compression
	 Print cache compression statistics. See CACHE COMPRESSION for more  in-
	 formation. This can potentially take a long time since all files in the
	 cache need to be visited.

     -p, --show-config
	 Print	current configuration options and from where they originate (en-
	 vironment variable, configuration file or compile-time default) in  hu-
	 man-readable format.

     --show-log-stats
	 Print	statistics counters from the stats log in human-readable format.
	 See stats_log. Use -v/--verbose once or twice for more details.

     -s, --show-stats
	 Print a summary of configuration and statistics counters in human-read-
	 able format. Use -v/--verbose once or twice for more details.

     -v, --verbose
	 Increase verbosity. The option can be given multiple times.

     -V, --version
	 Print version and copyright information.

     -z, --zero-stats
	 Zero the cache statistics (but not the configuration options).

   Options for remote file-based storage
     --trim-dir PATH
	 Remove not recently used files from directory PATH until it is at  most
	 the size specified by --trim-max-size.

	     Warning

	     Don't  use  this  option to trim the local cache. To trim the local
	     cache directory to a certain size, use  CCACHE_MAXSIZE=SIZE  ccache
	     -c.

     --trim-max-size SIZE
	 Specify  the  maximum size for --trim-dir. SIZE should be a number fol-
	 lowed by an optional suffix: kB, MB, GB, TB (decimal), KiB, MiB, GiB or
	 TiB (binary). The default suffix is GiB. Use 0 for no limit.

     --trim-method METHOD
	 Specify the method to trim a directory with --trim-dir. Possible values
	 are:

	 atime
	     LRU (least recently used) using the file access timestamp. This  is
	     the default.

	 mtime
	     LRU (least recently used) using the file modification timestamp.

     --trim-recompress LEVEL
	 Recompress  to  level	LEVEL  using  the Zstandard algorithm when using
	 --trim-dir. The level can be an integer, with the same semantics as the
	 compression_level configuration option, or  the  special  value  uncom-
	 pressed  for  no compression. See [Cache compression] for more informa-
	 tion. This can potentially take a long time  since  all  files  in  the
	 cache need to be visited. Only files that are currently compressed with
	 a different level than LEVEL will be recompressed.

     --trim-recompress-threads THREADS
	 Recompress  using up to THREADS threads with --trim-recompress. The de-
	 fault is to use one thread per CPU.

   Options for scripting or debugging
     --checksum-file PATH
	 Print the checksum (128 bit XXH3) of the file at PATH (-  for	standard
	 input).

     --extract-result PATH
	 Extract  data stored in the result file at PATH (- for standard input).
	 The data will be written to ccache-result.* files  in	to  the  current
	 working directory. This option is only useful when debugging ccache and
	 its behavior.

     --format FORMAT
	 Specify format for --print-log-stats and --print-stats. Possible values
	 are:

	 tab
	     Tab separated. This is the default.

	 json
	     JSON formatted.

     -k KEY, --get-config KEY
	 Print the value of configuration option KEY. See CONFIGURATION for more
	 information.

     --hash-file PATH
	 Print the hash (160 bit BLAKE3) of the file at PATH (- for standard in-
	 put). This is only useful when debugging ccache and its behavior.

     --inspect PATH
	 Print	the content of a result or manifest file at PATH (- for standard
	 input) to standard output in human-readable format. File content embed-
	 ded in a result file will however not be printed; use	--extract-result
	 to  extract the file content. This option is only useful when debugging
	 ccache and its behavior.

     --print-log-stats
	 Print statistics  counters  from  the	stats  log  in	machine-parsable
	 (tab-separated or JSON) format. See stats_log and --format.

     --print-stats
	 Print	 statistics   counter	IDs  and  corresponding  values  in  ma-
	 chine-parsable (tab-separated or JSON) format. See --format.

     --print-version
	 Print version and don't do anything else.

   Extra options
     When run as a compiler, ccache usually just takes the same command line op-
     tions as the compiler you are using. The only exception to this is the  op-
     tion  --ccache-skip. That option can be used to tell ccache to avoid inter-
     preting the next option in any way and to pass it	along  to  the	compiler
     as-is.

	 Note

	 --ccache-skip currently only tells ccache not to interpret the next op-
	 tion  as a special compiler option -- the option will still be included
	 in the direct mode hash.

     The reason this can be important is that ccache does need to parse the com-
     mand line and determine what is an input filename and what  is  a	compiler
     option, as it needs the input filename to determine the name of the result-
     ing  object file (among other things). The heuristic ccache uses when pars-
     ing the command line is that any argument that exists as a file is  treated
     as  an  input  file name. By using --ccache-skip you can force an option to
     not be treated as an input file name and instead be  passed  along  to  the
     compiler as a command line option.

     Another  case  where --ccache-skip can be useful is if ccache interprets an
     option specially but shouldn't, since the option has  another  meaning  for
     your compiler than what ccache thinks.

     See also ignore_options.

CONFIGURATION
     Ccache's  default	behavior  can  be overridden by options in configuration
     files, which in turn can be overridden by environment variables with  names
     starting  with CCACHE_. Ccache normally reads configuration from two files:
     first a system-level configuration file and secondly a cache-specific  con-
     figuration  file.	The  priorities  of configuration options are as follows
     (where 1 is highest):

      1. Command line settings in KEY=VALUE form. Example:

	     ccache debug=true compiler_check="%compiler% --version" gcc -c example.c

      2. Environment variables.

      3. The cache-specific configuration file (see below).

      4. The  system  (read-only)  configuration  file	<sysconfdir>/ccache.conf
	 (typically /etc/ccache.conf or /usr/local/etc/ccache.conf).

      5. Compile-time defaults.

     As  a special case, if the environment variable CCACHE_CONFIGPATH is set it
     specifies the configuration file, and the system configuration  file  won't
     be read.

   Location of the configuration file
     The  location  of	the cache-specific configuration file is determined like
     this on non-Windows systems:

      1. If CCACHE_CONFIGPATH is set, use that path.

      2. Otherwise, if the environment	variable  CCACHE_DIR  is  set  then  use
	 $CCACHE_DIR/ccache.conf.

       3. Otherwise,  if  cache_dir is set in the system configuration file then
	 use <cache_dir>/ccache.conf.

      4. Otherwise, if there  is  a  legacy  $HOME/.ccache  directory  then  use
	 $HOME/.ccache/ccache.conf.

	5. Otherwise,	if   XDG_CONFIG_HOME   is   set   then	 use   $XDG_CON-
	 FIG_HOME/ccache/ccache.conf.

      6. Otherwise, use $HOME/Library/Preferences/ccache/ccache.conf (macOS)  or
	 $HOME/.config/ccache/ccache.conf (other systems).

     On Windows, this is the method used to find the configuration file:

      1. If CCACHE_CONFIGPATH is set, use that path.

       2. Otherwise,  if  the  environment  variable  CCACHE_DIR is set then use
	 %CCACHE_DIR%/ccache.conf.

      3. Otherwise, if cache_dir is set in the system  configuration  file  then
	 use  <cache_dir>\ccache.conf.	The system-wide configuration on Windows
	 is %ALLUSERSPROFILE%\ccache\ccache.conf by default. The ALLUSERSPROFILE
	 environment variable is usually C:\ProgramData.

      4. Otherwise, if there is a legacy  %USERPROFILE%\.ccache  directory  then
	 use %USERPROFILE%\.ccache\ccache.conf.

      5. Otherwise, use %LOCALAPPDATA%\ccache\ccache.conf if it exists.

      6. Otherwise, use %APPDATA%\ccache\ccache.conf.

     See also the cache_dir configuration option for how the cache directory lo-
     cation is determined.

   Configuration value syntax
     All  configuration  values  support expansion of environment variables. The
     syntax is similar to POSIX shell syntax: $VAR or ${VAR}. Both variants will
     expand to the value of the environment variable VAR.

     Two consecutive dollar signs ($$) will expand to a single dollar sign ($).

   Configuration file syntax
     Configuration files are in a simple "key = value" format,	one  option  per
     line.  Lines  starting  with  a hash sign are comments. Blank lines are ig-
     nored, as is whitespace surrounding keys and values. Example:

	 # Set maximum cache size to 10 GB:
	 max_size = 10G

   Boolean values
     Some configuration options are boolean values (i.e.  truth  values).  In  a
     configuration  file,  such  values must be set to the string true or false.
     For the corresponding environment variables, the semantics are a  bit  dif-
     ferent:

     *	 A  set  environment  variable	means  "true"  (even if set to the empty
	 string).

     *	 The following case-insensitive negative values are considered an  error
	 (instead of surprising the user): 0, false, disable and no.

     *	 An unset environment variable means "false".

     Each  boolean  environment  variable  also has a negated form starting with
     CCACHE_NO. For example, CCACHE_COMPRESS can be set to force compression and
     CCACHE_NOCOMPRESS can be set to force no compression.

   Configuration options
     Below is a list of available configuration options. The corresponding envi-
     ronment variable name is indicated in parentheses after each  configuration
     option key.

     absolute_paths_in_stderr (CCACHE_ABSSTDERR)
	 This  option  specifies whether ccache should rewrite relative paths in
	 the compiler's standard error output to absolute  paths.  This  can  be
	 useful  if  you  use  base_dir with a build system (e.g. CMake with the
	 "Unix Makefiles" generator) that executes the compiler in  a  different
	 working  directory,  which  makes  relative paths in compiler errors or
	 warnings incorrect. The default is false.

     base_dir (CCACHE_BASEDIR)
	 This option should be an absolute path to a directory. If  set,  ccache
	 will  rewrite absolute paths into paths relative to the current working
	 directory, but only absolute paths that begin with base_dir. Cache  re-
	 sults can then be shared for compilations in different directories even
	 if  the  project  uses absolute paths in the compiler command line. See
	 also the discussion under COMPILING IN DIFFERENT DIRECTORIES. If set to
	 the empty string (which is the default), no rewriting is done.

	 A typical path to use as base_dir is your home directory or another di-
	 rectory that is a parent of your project directories. Don't  use  /  as
	 the  base  directory  since that will make ccache also rewrite paths to
	 system header files, which typically is counterproductive.

	 For example, say that Alice's current working	directory  is  /home/al-
	 ice/project1/build and that she compiles like this:

	     ccache gcc -I/usr/include/example -I/home/alice/project2/include -c /home/alice/project1/src/example.c

	 Here  is  what ccache will actually execute for different base_dir val-
	 ues:

	     # Current working directory: /home/alice/project1/build

	     # With base_dir = /:
	     gcc -I../../../../usr/include/example -I../../project2/include -c ../src/example.c

	     # With base_dir = /home or /home/alice:
	     gcc -I/usr/include/example -I../../project2/include -c ../src/example.c

	     # With base_dir = /home/alice/project1 or /home/alice/project1/src:
	     gcc -I/usr/include/example -I/home/alice/project2/include -c ../src/example.c

	 If Bob has put project1 and project2 in /home/bob/stuff and both  users
	 have  set  base_dir  to /home or /home/$USER, then Bob will get a cache
	 hit (if they share ccache directory) since the actual command line will
	 be identical to Alice's command line:

	     # Current working directory: /home/bob/stuff/project1/build

	     # With base_dir = /home or /home/bob:
	     gcc -I/usr/include/example -I../../project2/include -c ../src/example.c

	 Without base_dir there will be a cache miss since  the  absolute  paths
	 will  differ.	With  base_dir set to / there will be a cache miss since
	 the relative path  to	/usr/include/example  will  be	different.  With
	 base_dir  set to /home/bob/stuff/project1 there will a cache miss since
	 the path to project2 will be a different absolute path.

	     Warning

	     Rewriting absolute paths to relative is kind of a brittle hack.  It
	     works  OK	in  many  cases,  but  there might be cases where things
	     break. One known issue is that absolute paths are not reproduced in
	     dependency files, which can mess up dependency detection  in  tools
	     like  Make  and Ninja. If possible, use relative paths in the first
	     place instead instead of using base_dir.

     cache_dir (CCACHE_DIR)
	 This option specifies where ccache will keep its cached  compiler  out-
	 puts.

	 On  non-Windows  systems, the default is $HOME/.ccache if such a direc-
	 tory exists, otherwise $XDG_CACHE_HOME/ccache if XDG_CACHE_HOME is set,
	 otherwise $HOME/Library/Caches/ccache (macOS)	or  $HOME/.config/ccache
	 (other systems).

	 On  Windows,  the  default is %USERPROFILE%\.ccache if such a directory
	 exists, otherwise %LOCALAPPDATA%\ccache.

	     Warning

	     Previous ccache versions defaulted to storing the	cache  in  %APP-
	     DATA%\ccache  on  Windows.  This  can  result in large network file
	     transfers of the cache in domain environments and similar problems.
	     Please check this directory for cache directories and either delete
	     them or the  whole  directory,  or  move  them  to  the  %LOCALAPP-
	     DATA%\ccache directory.

	 See also Location of the configuration file.

     compiler (CCACHE_COMPILER or (deprecated) CCACHE_CC)
	 This  option  can  be used to force the name of the compiler to use. If
	 set to the empty string (which is the default),  ccache  works  it  out
	 from the command line.

     compiler_check (CCACHE_COMPILERCHECK)
	 By default, ccache includes the modification time ("mtime") and size of
	 the  compiler	in  the  hash  to ensure that results retrieved from the
	 cache are accurate. If compiler plugins are used,  these  plugins  will
	 also  be  added  to the hash. This option can be used to select another
	 strategy. Possible values are:

	 content
	     Hash the content of the compiler binary.  This  makes  ccache  very
	     slightly  slower  compared  to mtime, but makes it cope better with
	     compiler upgrades during a build bootstrapping process.

	 mtime
	     Hash the compiler's mtime and size, which is fast. This is the  de-
	     fault.

	 none
	     Don't  hash anything. This may be good for situations where you can
	     safely use the cached results even though the compiler's  mtime  or
	     size  has	changed  (e.g.	if the compiler is built as part of your
	     build system and the compiler's source has not changed, or  if  the
	     compiler  only  has changes that don't affect code generation). You
	     should only use none if you know what you are doing.

	 string:value
	     Hash value. This can for instance be a compiler revision number  or
	     another string that the build system generates to identify the com-
	     piler.

	 a command string
	     Hash the standard output and standard error output of the specified
	     command.  The  string  will  be split on whitespace to find out the
	     command and arguments to run. No other interpretation of  the  com-
	     mand  string  will be done, except that the special word %compiler%
	     will be replaced with the path to the  compiler.  Several	commands
	     can be specified with semicolon as separator. Examples:

		 %compiler% -v

		 %compiler% -dumpmachine; %compiler% -dumpversion

	     You  should make sure that the specified command is as fast as pos-
	     sible since it will be run once for each ccache invocation.

	     Identifying the compiler using a command is useful if you	want  to
	     avoid  cache  misses  when  the  compiler	has been rebuilt but not
	     changed.

	     Another case is when the compiler	(as  seen  by  ccache)	actually
	     isn't  the  real  compiler  but another compiler wrapper -- in that
	     case, the default mtime method will hash the mtime and size of  the
	     other  compiler  wrapper,	which means that ccache won't be able to
	     detect a compiler upgrade. Using a suitable command to identify the
	     compiler is thus safer, but it's also slower, so  you  should  con-
	     sider  continue using the mtime method in combination with the pre-
	     fix_command option if possible. See USING CCACHE  WITH  OTHER  COM-
	     PILER WRAPPERS.

     compiler_type (CCACHE_COMPILERTYPE)
	 Ccache  normally  guesses the compiler type based on the compiler name.
	 The compiler_type option lets you force a compiler type.  This  can  be
	 useful  if  the compiler has a non-standard name but is actually one of
	 the known compiler types. Possible values are:

	 auto
	     Guess one of the types below based on the compiler name  (following
	     symlinks). This is the default.

	 clang
	     Clang-based compiler.

	 clang-cl
	     clang-cl.

	 gcc
	     GCC-based compiler.

	 icl
	     Intel compiler on Windows.

	 msvc
	     Microsoft Visual C++ (MSVC).

	 nvcc
	     NVCC (CUDA) compiler.

	 other
	     Any compiler other than the known types.

     compression  (CCACHE_COMPRESS  or	CCACHE_NOCOMPRESS,  see  Boolean  values
     above)
	 If true, ccache will compress data it puts in the cache. However,  this
	 option  has  no  effect on how files are retrieved from the cache; com-
	 pressed and uncompressed results will still  be  usable  regardless  of
	 this option. The default is true.

	 Compression  is  done	using  the Zstandard algorithm. The algorithm is
	 fast enough that there should be little reason to turn off  compression
	 to gain performance. One exception is if the cache is located on a com-
	 pressed  file system, in which case the compression performed by ccache
	 of course is redundant.

	 Compression will be disabled if file cloning (the file_clone option) or
	 hard linking (the hard_link option) is enabled.

     compression_level (CCACHE_COMPRESSLEVEL)
	 This option determines the level at which ccache will	compress  object
	 files	using the real-time compression algorithm Zstandard. It only has
	 effect if compression is enabled (which it is by default). Zstandard is
	 extremely fast for decompression and  very  fast  for	compression  for
	 lower compression levels. The default is 0.

	 Semantics of compression_level:

	 > 0
	     A	positive  value corresponds to normal Zstandard compression lev-
	     els. Lower levels (e.g. 1) mean faster compression but  worse  com-
	     pression ratio. Higher levels (e.g. 19) mean slower compression but
	     better compression ratio. The maximum possible value depends on the
	     libzstd  version,	but  at least up to 19 is available for all ver-
	     sions. Decompression speed is essentially the same for all  levels.
	     As  a  rule  of thumb, use level 5 or lower since higher levels may
	     slow down compilations noticeably. Higher levels are however useful
	     when recompressing the cache with command line  option  -X/--recom-
	     press.

	 < 0
	     A	negative  value corresponds to Zstandard's "ultra-fast" compres-
	     sion levels, which are even faster than level 1 but with less  good
	     compression  ratios. For instance, level -3 corresponds to --fast=3
	     for the zstd command line tool. In practice, there  is  little  use
	     for levels lower than -5 or so.

	 0 (default)
	     The  value  0  means that ccache will choose a suitable level, cur-
	     rently 1.

	 See the Zstandard documentation <http://zstd.net> for more information.

     cpp_extension (CCACHE_EXTENSION)
	 This option can be used to force a certain extension for the intermedi-
	 ate preprocessed file. The default is to automatically determine the
	 extension to use for intermediate preprocessor files based on the type
	 of file being compiled, but that sometimes doesn't work. For example,
	 when using the "aCC" compiler on HP-UX, set the cpp extension to i.

     debug (CCACHE_DEBUG or CCACHE_NODEBUG, see Boolean values above)
	 If true, enable the debug mode. The debug mode creates per-object debug
	 files that are helpful when debugging unexpected cache misses. Note
	 however that ccache performance will be reduced slightly. See CACHE DE-
	 BUGGING for more information. The default is false.

     debug_dir (CCACHE_DEBUGDIR)
	 Specifies where to write per-object debug files if the debug mode is
	 enabled. If set to the empty string, the files will be written next to
	 the object file. If set to a directory, the debug files will be written
	 with full absolute paths in that directory, creating it if needed. The
	 default is the empty string.

	 For example, if debug_dir is set to /example, the current working di-
	 rectory is /home/user and the object file is build/output.o then the
	 debug log will be written to /example/home/user/build/out-
	 put.o.ccache-log. See also CACHE DEBUGGING.

     debug_level (CCACHE_DEBUGLEVEL)
	 Specifies the amount of information that is written when the debug mode
	 is enabled. See CACHE DEBUGGING for more information. The default is 2.

     depend_mode (CCACHE_DEPEND or CCACHE_NODEPEND, see Boolean values above)
	 If true, the depend mode will be used. The default is false. See The
	 depend mode.

     direct_mode (CCACHE_DIRECT or CCACHE_NODIRECT, see Boolean values above)
	 If true, the direct mode will be used. The default is true. See The di-
	 rect mode.

     disable (CCACHE_DISABLE or CCACHE_NODISABLE, see Boolean values above)
	 When true, ccache will just call the real compiler, bypassing the cache
	 completely. The default is false.

	 It is also possible to disable ccache for a specific source code file
	 by adding the string ccache:disable in a comment in the first 4096
	 bytes of the file.

     extra_files_to_hash (CCACHE_EXTRAFILES)
	 This option is a list of paths to files that ccache will include in the
	 the hash sum that identifies the build. The list separator is semicolon
	 on Windows systems and colon on other systems.

     file_clone (CCACHE_FILECLONE or CCACHE_NOFILECLONE, see Boolean values
     above)
	 If true, ccache will attempt to use file cloning (also known as "copy
	 on write", "CoW" or "reflinks") to store and fetch cached compiler re-
	 sults. file_clone has priority over hard_link. The default is false.

	 Files stored by cloning cannot be compressed, so the cache size will
	 likely be significantly larger if this option is enabled. However, per-
	 formance may be improved depending on the use case.

	 Unlike the hard_link option, file_clone is completely safe to use, but
	 not all file systems support the feature. For such file systems, ccache
	 will fall back to use plain copying (or hard links if hard_link is en-
	 abled).

     hard_link (CCACHE_HARDLINK or CCACHE_NOHARDLINK, see Boolean values above)
	 If true, ccache will attempt to use hard links to store and fetch
	 cached object files. The default is false.

	 Files stored via hard links cannot be compressed, so the cache size
	 will likely be significantly larger if this option is enabled. However,
	 performance may be improved depending on the use case.

	     Warning

	     Do not enable this option unless you are aware of these caveats:

	 *   If the resulting file is modified, the file in the cache will also
	     be modified since they share content, which corrupts the cache en-
	     try. As of version 4.0, ccache makes stored and fetched object
	     files read-only as a safety measure. Furthermore, a simple in-
	     tegrity check is made for cached object files by verifying that
	     their sizes are correct. This means that mistakes like strip file.o
	     or echo >file.o will be detected even if the object file is made
	     writable, but a modification that doesn't change the file size will
	     not.

	 *   Programs that don't expect that files from two different identical
	     compilations are hard links to each other can fail.

	 *   Programs that rely on modification times (like make) can be con-
	     fused if several users (or one user with several build trees) use
	     the same cache directory. The reason for this is that the object
	     files share i-nodes and therefore modification times. If file.o is
	     in build tree A (hard-linked from the cache) and file.o then is
	     produced by ccache in build tree B by hard-linking from the cache,
	     the modification timestamp will be updated for file.o in build tree
	     A as well. This can retrigger relinking in build tree A even though
	     nothing really has changed.

     hash_dir (CCACHE_HASHDIR or CCACHE_NOHASHDIR, see Boolean values above)
	 If true (which is the default), ccache will include the current working
	 directory (CWD) in the hash that is used to distinguish two compila-
	 tions when generating debug info (compiler option -g with variations).
	 Exception: The CWD will not be included in the hash if base_dir is set
	 (and matches the CWD) and the compiler option -fdebug-prefix-map is
	 used. See also the discussion under COMPILING IN DIFFERENT DIRECTORIES.

	 The reason for including the CWD in the hash by default is to prevent a
	 problem with the storage of the current working directory in the debug
	 info of an object file, which can lead ccache to return a cached object
	 file that has the working directory in the debug info set incorrectly.

	 You can disable this option to get cache hits when compiling the same
	 source code in different directories if you don't mind that CWD in the
	 debug info might be incorrect.

     ignore_headers_in_manifest (CCACHE_IGNOREHEADERS)
	 This option is a list of paths to files (or directories with headers)
	 that ccache will not include in the manifest list that makes up the di-
	 rect mode. Note that this can cause stale cache hits if those headers
	 do indeed change. The list separator is semicolon on Windows systems
	 and colon on other systems.

     ignore_options (CCACHE_IGNOREOPTIONS)
	 This option is a space-delimited list of compiler options that ccache
	 will ignore. Entries in the list can optionally end with an asterisk
	 (*) to matching any option suffix. For example, -fmessage-length=* will
	 match both -fmessage-length=20 and -fmessage-length=70. A matching com-
	 piler option will neither be interpreted specially nor be part of the
	 input hash. Ignoring a compiler option from the hash can be useful when
	 you know it doesn't affect the result (and ccache doesn't know that),
	 or when it does and you don't care. See also Extra options.

     inode_cache (CCACHE_INODECACHE or CCACHE_NOINODECACHE, see Boolean values
     above)
	 If true, ccache will cache source file hashes based on device, inode
	 and timestamps. This reduces the time spent on hashing include files
	 since the result can be reused between compilations. The default is
	 true. The feature requires temporary_dir to be located on a local
	 filesystem of a supported type.

	     Note

	     Support for the inode cache feature on Windows is experimental. On
	     Windows the default is false.

     keep_comments_cpp (CCACHE_COMMENTS or CCACHE_NOCOMMENTS, see Boolean values
     above)
	 If true, ccache will not discard the comments before hashing preproces-
	 sor output. The default is false. This can be used to check documenta-
	 tion with -Wdocumentation.

     log_file (CCACHE_LOGFILE)
	 If set to a file path, ccache will write information on what it is do-
	 ing to the specified file. This is useful for tracking down problems.

	 If set to syslog, ccache will log using syslog() instead of to a file.
	 If you use rsyslogd, you can add something like this to /etc/rsys-
	 log.conf or a file in /etc/rsyslog.d:

	     # log ccache to file
	     :programname, isequal, "ccache"	     /var/log/ccache
	     # remove from syslog
	     & ~

     max_files (CCACHE_MAXFILES)
	 This option specifies the maximum number of files to keep in the cache.
	 Use 0 for no limit (which is the default). See also CACHE SIZE MANAGE-
	 MENT.

     max_size (CCACHE_MAXSIZE)
	 This option specifies the maximum size of the cache. Use 0 for no
	 limit. The default value is 5G. Available suffixes: k, M, G, T (deci-
	 mal) and Ki, Mi, Gi, Ti (binary). The default suffix is G. See also
	 CACHE SIZE MANAGEMENT.

     msvc_dep_prefix (CCACHE_MSVC_DEP_PREFIX)
	 This option specifies the prefix of included files output for MSVC com-
	 piler. The default prefix is "Note: including file:". If you use a lo-
	 calized compiler, this should be set accordingly.

     namespace (CCACHE_NAMESPACE)
	 If set, the namespace string will be added to the hashed data for each
	 compilation. This will make the associated cache entries logically sep-
	 arate from cache entries with other namespaces, but they will still
	 share the same storage space. Cache entries can also be selectively re-
	 moved from the local cache with the command line option --evict-name-
	 space, potentially in combination with --evict-older-than.

	 For instance, if you use the same local cache for several disparate
	 projects, you can use a unique namespace string for each one. This al-
	 lows you to remove cache entries that belong to a certain project if
	 you stop working with that project.

     path (CCACHE_PATH)
	 If set, ccache will search directories in this list when looking for
	 the real compiler. The list separator is semicolon on Windows systems
	 and colon on other systems. If not set, ccache will look for the first
	 executable matching the compiler name in the normal PATH that isn't a
	 symbolic link to ccache itself.

     pch_external_checksum (CCACHE_PCH_EXTSUM or CCACHE_NOPCH_EXTSUM, see
     Boolean values above)
	 When this option is set, and ccache finds a precompiled header file,
	 ccache will look for a file with the extension ".sum" added (e.g.
	 "pre.h.gch.sum"), and if found, it will hash this file instead of the
	 precompiled header itself to work around the performance penalty of
	 hashing very large files.

     prefix_command (CCACHE_PREFIX)
	 This option adds a list of prefixes (separated by space) to the command
	 line that ccache uses when invoking the compiler. See also USING CCACHE
	 WITH OTHER COMPILER WRAPPERS.

     prefix_command_cpp (CCACHE_PREFIX_CPP)
	 This option adds a list of prefixes (separated by space) to the command
	 line that ccache uses when invoking the preprocessor.

     read_only (CCACHE_READONLY or CCACHE_NOREADONLY, see Boolean values above)
	 If true, ccache will attempt to use existing cached results, but it
	 will not add new results to any cache backend. Statistics counters will
	 still be updated, though, unless the stats option is set to false.

	 If you are using this because your ccache directory is read-only, you
	 need to set temporary_dir since ccache will fail to create temporary
	 files otherwise. You may also want to set stats to false make ccache
	 not even try to update stats files.

     read_only_direct (CCACHE_READONLY_DIRECT or CCACHE_NOREADONLY_DIRECT, see
     Boolean values above)
	 Just like read_only except that ccache will only try to retrieve re-
	 sults from the cache using the direct mode, not the preprocessor mode.
	 See documentation for read_only regarding using a read-only ccache di-
	 rectory.

     recache (CCACHE_RECACHE or CCACHE_NORECACHE, see Boolean values above)
	 If true, ccache will not use any previously stored result. New results
	 will still be cached, possibly overwriting any pre-existing results.

     remote_only (CCACHE_REMOTE_ONLY or CCACHE_NOREMOTE_ONLY, see Boolean values
     above)
	 If true, ccache will only use remote storage. The default is false.
	 Note that cache statistics counters will still be kept in the local
	 cache directory unless stats is false. See also Storage interaction.

     remote_storage (CCACHE_REMOTE_STORAGE)
	 This option specifies one or several storage backends (separated by
	 space) to query after checking the local cache (unless remote_only is
	 true). See REMOTE STORAGE BACKENDS for documentation of syntax and
	 available backends.

	 Examples:

	 *   file:/shared/nfs/directory

	 *   file:///shared/nfs/one|read-only file:///shared/nfs/two

	 *   file:///Z:/example/windows/folder

	 *   http://example.com/cache

	 *   redis://example.com

		 Note

		 In previous ccache versions this option was called sec-
		 ondary_storage (CCACHE_SECONDARY_STORAGE), which can still be
		 used as an alias.

     reshare (CCACHE_RESHARE or CCACHE_NORESHARE, see Boolean values above)
	 If true, ccache will write results to remote storage even for local
	 storage cache hits. The default is false.

     run_second_cpp (CCACHE_CPP2 or CCACHE_NOCPP2, see Boolean values above)
	 If true, ccache will first run the preprocessor to preprocess the
	 source code (see The preprocessor mode) and then on a cache miss run
	 the compiler on the source code to get hold of the object file. This is
	 the default.

	 If false, ccache will first run preprocessor to preprocess the source
	 code and then on a cache miss run the compiler on the preprocessed
	 source code instead of the original source code. This makes cache
	 misses slightly faster since the source code only has to be pre-
	 processed once. The downside is that some compilers won't produce the
	 same result (for instance diagnostics warnings) when compiling pre-
	 processed source code.

	 A solution to the above mentioned downside is to set run_second_cpp to
	 false and pass -fdirectives-only (for GCC) or -frewrite-includes (for
	 Clang) to the compiler. This will cause the compiler to leave the
	 macros and other preprocessor information, and only process the #in-
	 clude directives. When run in this way, the preprocessor arguments will
	 be passed to the compiler since it still has to do some preprocessing
	 (like macros).

	 This option is ignored with MSVC, as there is no way to make it compile
	 without preprocessing first.

     sloppiness (CCACHE_SLOPPINESS)
	 By default, ccache tries to give as few false cache hits as possible.
	 However, in certain situations it's possible that you know things that
	 ccache can't take for granted. This option makes it possible to tell
	 ccache to relax some checks in order to increase the hit rate. The
	 value should be a comma-separated string with one or several of the
	 following values:

	 clang_index_store
	     Ignore the Clang compiler option -index-store-path and its argument
	     when computing the manifest hash. This is useful if you use Xcode,
	     which uses an index store path derived from the local project path.
	     Note that the index store won't be updated correctly on cache hits
	     if you enable this sloppiness.

	 file_stat_matches
	     Ccache normally examines a file's contents to determine whether it
	     matches the cached version. With this sloppiness set, ccache will
	     consider a file as matching its cached version if the mtimes and
	     ctimes match.

	 file_stat_matches_ctime
	     Ignore ctimes when file_stat_matches is enabled. This can be useful
	     when backdating files' mtimes in a controlled way.

	 gcno_cwd
	     By default, ccache will include the current working directory in
	     the hash when producing a .gcno file (when compiling with
	     -ftest-coverage). This is because GCC 9+ includes the current work-
	     ing directory in the .gcno file. The gcno_cwd sloppiness makes
	     ccache not hash the current working directory so that you can get
	     cache hits when compiling in different directories, with the trade-
	     off of potentially getting an incorrect directory in the .gcno
	     file. gcno_cwd also disables hashing of the current working direc-
	     tory if -fprofile-abs-path is used.

		 Note

		 gcno_cwd sloppiness will not have any effect when compiling
		 with --coverage since that implies -fprofile-arcs which always
		 forces CWD to be included in the input hash.

	 incbin
	     By default, ccache will ignore all files containing an .incbin di-
	     rective. While this is the correct behaviour as ccache does not de-
	     tect incbin changes, this restriction can make some projects diffi-
	     cult to cache. This sloppiness will pretend the .incbin directive
	     doesn't exist and simply allow caching.

	 include_file_ctime
	     By default, ccache will disable caching if a source code file has a
	     status change time (ctime) after the start of the ccache invoca-
	     tion. This sloppiness disables that check. See also [Handling of
	     newly created source files].

	 include_file_mtime
	     By default, ccache will disable caching if a source code file has a
	     modification time (mtime) after the start of the ccache invocation.
	     This sloppiness disables that check. See also [Handling of newly
	     created source files].

	 ivfsoverlay
	     Ignore the Clang compiler option -ivfsoverlay and its argument.
	     This is useful if you use Xcode, which uses a virtual file system
	     (VFS) for things like combining Objective-C and Swift code.

	 locale
	     Ccache includes the environment variables LANG, LC_ALL, LC_CTYPE
	     and LC_MESSAGES in the hash by default since they may affect local-
	     ization of compiler warning messages. Set this sloppiness to tell
	     ccache not to do that.

	 modules
	     By default, ccache will not cache compilations if -fmodules is used
	     since it cannot hash the state of compiler's internal representa-
	     tion of relevant modules. This sloppiness allows caching in such a
	     case. See C++ MODULES for more information.

	 pch_defines
	     Be sloppy about #define directives when precompiling a header file.
	     See PRECOMPILED HEADERS for more information.

	 random_seed
	     Ignore the -frandom-seed option and its arguments when computing
	     the input hash. This is useful if your build system generates dif-
	     ferent seeds between builds and you are OK with reusing cached re-
	     sults.

	 system_headers
	     Only check non-system headers in direct mode. This can be useful if
	     e.g. your system headers tend to change but you know that the
	     changes don't matter. Notes:

	     *	 This sloppiness is only supported for GCC-like compilers, not
		 MSVC.

	     *	 System headers are still taken into account for preprocessed
		 lookup.

	     *	 You can get stale cache hits if the system headers do change in
		 incompatible ways.

	     *	 See also the ignore_headers_in_manifest setting.

	 time_macros
	     Ignore __DATE__, __TIME__ and __TIMESTAMP__ being present in the
	     source code.

	 See the discussion under TROUBLESHOOTING for more information.

     stats (CCACHE_STATS or CCACHE_NOSTATS, see Boolean values above)
	 If true, ccache will update the statistics counters on each compila-
	 tion. The default is true. If false, [automatic cleanup] will be dis-
	 abled as well.

     stats_log (CCACHE_STATSLOG)
	 If set to a file path, ccache will write statistics counter updates to
	 the specified file. This is useful for getting statistics for individ-
	 ual builds. To show a summary of the current stats log, use ccache
	 --show-log-stats.

	     Note

	     Lines in the stats log starting with a hash sign (#) are comments.

     temporary_dir (CCACHE_TEMPDIR)
	 This option specifies where ccache will put temporary files. The de-
	 fault is $XDG_RUNTIME_DIR/ccache-tmp (typically
	 /run/user/<UID>/ccache-tmp) if XDG_RUNTIME_DIR is set and the directory
	 exists, otherwise <cache_dir>/tmp.

	     Note

	     In previous versions of ccache, CCACHE_TEMPDIR had to be on the
	     same filesystem as the CCACHE_DIR path, but this requirement has
	     been relaxed.

     umask (CCACHE_UMASK)
	 This option (an octal integer) specifies the umask for files and direc-
	 tories in the cache directory. This is mostly useful when you wish to
	 share your cache with other users.

   Disabling ccache
     To disable ccache completely  for	all  invocations,  set	disable  =  true
     (CCACHE_DISABLE=1).  You  can also disable ccache for a certain source code
     file by adding the string ccache:disable in a comment  in	the  first  4096
     bytes  of	the  file.  In	the  latter  case the Ccache disabled statistics
     counter will be increased.

REMOTE STORAGE BACKENDS
     The remote_storage option lets you configure ccache to use one  or  several
     remote  storage  backends. By default, the local cache directory located in
     cache_dir will be queried first and remote storage second, but  remote_only
     can  be  set  to  true to disable local storage. Note that cache statistics
     counters will still be kept in the local cache directory -- remote  storage
     backends only store compilation results and manifests.

     A	remote storage backend is specified with a URL, optionally followed by a
     pipe (|) and a pipe-separated list of attributes. An attribute is key=value
     or just key as a short form of key=true.  Attribute  values  must	be  per-
     cent-encoded <https://en.wikipedia.org/wiki/Percent-encoding> if they con-
     tain percent, pipe or space characters.

   Attributes for all backends
     These optional attributes are available for all remote storage backends:

     *	 read-only:  If  true, only read from this backend, don't write. The de-
	 fault is false.

     *	 shards: A comma-separated list of names for sharding (partitioning) the
	 cache	       entries	       using	     Rendezvous 	 hashing
	 <https://en.wikipedia.org/wiki/Rendezvous_hashing>, typically to spread
	 the cache over a server cluster. When set, the storage URL must contain
	 an asterisk (*), which will be replaced by one of the shard names to
	 form a real URL. A shard name can optionally have an appended weight
	 within parentheses to indicate how much of the key space should be as-
	 sociated with that shard. A shard with weight w will contain w/S of the
	 cache, where S is the sum of all shard weights. A weight could for in-
	 stance be set to represent the available memory for a memory cache on a
	 specific server. The default weight is 1.

	 Examples:

	 *   redis://cache-*.example.com|shards=a(3),b(1),c(1.5) will put 55%
	     (3/5.5) of the cache on redis://cache-a.example.com, 18% (1/5.5) on
	     redis://cache-b.example.com and 27% (1.5/5.5) on re-
	     dis://cache-c.example.com.

	 *   http://example.com/*|shards=alpha,beta will put 50% of the cache on
	     http://example.com/alpha and 50% on http://example.com/beta.

   Storage interaction
     The  table below describes the interaction between local and remote storage
     on cache hits and misses if remote_only is false (which is the default):
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | Local storage | Remote storage | What happens	     |
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | miss	     | miss	      | Compile,  write   to |
     |		     |		      | local,	write to re- |
     |		     |		      | mote[1] 	     |
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | miss	     | hit	      | Read  from   remote, |
     |		     |		      | write to local	     |
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | hit	     | -	      | Read   from   local, |
     |		     |		      | don't write  to  re- |
     |		     |		      | mote[2] 	     |
     +---------------+----------------+----------------------+

     [1] Unless remote storage has attribute read-only=true.
     [2]  Unless  local  storage is set to share its cache hits with the reshare
     option.

     If remote_only is true:
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | Local storage | Remote storage | What happens	     |
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | -	     | miss	      | Compile,  write   to |
     |		     |		      | remote,  don't write |
     |		     |		      | to local	     |
     +---------------+----------------+----------------------+
     |		     |		      | 		     |
     | -	     | hit	      | Read  from   remote, |
     |		     |		      | don't write to local |
     +---------------+----------------+----------------------+

   File storage backend
     URL format: file:DIRECTORY or file://[HOST]DIRECTORY

     This  backend  stores data as separate files in a directory structure below
     DIRECTORY, similar (but not identical) to the local cache storage. A  typi-
     cal use case for this backend would be sharing a cache on an NFS directory.
     DIRECTORY	must  start with a slash. HOST can be the empty string or local-
     host. On Windows, HOST can also be the name of a server  hosting  a  shared
     folder.

	 Important

	 ccache  will  not  perform any cleanup of the storage -- that has to be
	 done by other means, for instance by running ccache --trim-dir periodi-
	 cally.

     Examples:

     *	 file:/shared/nfs/directory

     *	 file:///shared/nfs/directory|umask=002|update-mtime=true

     *	 file:///Z:/example/windows/folder

     *	 file://example.com/shared/ccache%20folder

     Optional attributes:

     *	 layout: How to store file under the cache directory. Available values:

	 *   flat: Store all files directly under the cache directory.

	 *   subdirs: Store files in 256 subdirectories of the cache directory.

	 The default is subdirs.

     *	 umask: This attribute (an octal integer) overrides the umask to use for
	 files and directories in the cache directory.

     *	 update-mtime: If true, update the modification time  (mtime)  of  cache
	 entries that are read. The default is false.

   HTTP storage backend
     URL format: http://HOST[:PORT][/PATH]

     This  backend  stores  data in an HTTP-compatible server. The required HTTP
     methods are GET, PUT and DELETE.

	 Important

	 ccache will not perform any cleanup of the storage -- that  has  to  be
	 done by other means, for instance by running ccache --trim-dir periodi-
	 cally.

	 Note

	 HTTPS is not supported.

	 Tip

	 See	    How        to	 set	    up	      HTTP	 storage
	 <https://ccache.dev/howto/http-storage.html> for hints on how to set up
	 an HTTP server for use with ccache.

     Examples:

     *	 http://localhost

     *	 http://someusername:p4ssw0rd@example.com/cache/

     *	 http://localhost:8080|layout=bazel|connect-timeout=50

     Optional attributes:

     *	 bearer-token: Bearer token used to authorize the HTTP requests.

     *	 connect-timeout: Timeout (in ms) for network connection. The default is
	 100.

     *	 keep-alive: If true, keep the HTTP connection to the storage server
	 open to avoid reconnects. The default is true.

     *	 layout: How to map key names to the path part of the URL. Available
	 values:

	 *   bazel: Store values in a format compatible with the Bazel HTTP
	     caching protocol. More specifically, the entries will be stored as
	     64 hex digits under the /ac/ part of the cache.

		 Note

		 You may have to disable verification of action cache values in
		 the server for this to work since ccache entries are not valid
		 action result metadata values.

	 *   flat: Append the key directly to the path part of the URL (with a
	     leading slash if needed).

	 *   subdirs: Append the first two characters of the key to the URL
	     (with a leading slash if needed), followed by a slash and the rest
	     of the key. This divides the entries into 256 buckets.

	 The default is subdirs.

     *	 operation-timeout: Timeout (in ms) for HTTP requests. The default is
	 10000.

   Redis storage backend
     URL formats:

     redis://[[USERNAME:]PASSWORD@]HOST[:PORT][/DBNUMBER]
     redis+unix:SOCKET_PATH[?db=DBNUMBER]
     redis+unix://[[USERNAME:]PASSWORD@localhost]SOCKET_PATH[?db=DBNUMBER]

     This backend stores data in a Redis <https://redis.io> (or Redis-compati-
     ble) server. There are implementations for both memory-based and disk-based
     storage. PORT defaults to 6379 and DBNUMBER defaults to 0.

	 Note

	 ccache will not perform any cleanup of the Redis storage, but you can
	 configure LRU eviction <https://redis.io/topics/lru-cache>.

	 Tip

	 See How to set up Redis <https://ccache.dev/howto/redis-storage.html>
	 storage"  for hints on setting up a Redis server for use with ccache.

	 Tip

	 You can set up a cluster of Redis servers using the shards attribute
	 described in REMOTE STORAGE BACKENDS.

     Examples:

     *	 redis://localhost

     *	 redis://p4ssw0rd@cache.example.com:6379/0|connect-timeout=50

     *	 redis+unix:/run/redis.sock

     *	 redis+unix:///run/redis.sock

     *	 redis+unix://p4ssw0rd@localhost/run/redis.sock?db=0

     Optional attributes:

     *	 connect-timeout: Timeout (in ms) for network connection. The default is
	 100.

     *	 operation-timeout: Timeout (in ms) for Redis commands. The default is
	 10000.

CACHE SIZE MANAGEMENT
     By default, ccache has a 5 GB limit on the total size of files in the cache
     and no limit on the number of files. You can set different limits using the
     command  line   options   -M/--max-size   and   -F/--max-files.   Use   the
     -s/--show-stats  option  to see the cache size and the currently configured
     limits (in addition to other various statistics).

     Cleanup can be triggered in two different ways: automatic and manual.

   Automatic cleanup
     After a new compilation result has been written to the local cache,  ccache
     will trigger an automatic cleanup if max_size or max_files is exceeded. The
     cleanup  removes  cache entries in LRU (least recently used) order based on
     the modification time (mtime) of files  in  the  cache.  For  this  reason,
     ccache updates mtime of the cache files read on a cache hit to mark them as
     recently used.

   Manual cleanup
     You  can  run ccache -c/--cleanup to force cleanup of the whole cache. This
     will recalculate the cache size information and also  make  sure  that  the
     cache size does not exceed max_size and max_files.

CACHE COMPRESSION
     Ccache  will  by default compress all data it puts into the cache using the
     compression algorithm Zstandard <http://zstd.net> (zstd) using compression
     level 1. The algorithm is fast enough that there should be little reason to
     turn off compression to gain performance. One exception is if the cache is
     located on a compressed file system, in which case the compression per-
     formed by ccache of course is redundant. See the documentation for the con-
     figuration options compression and compression_level for more information.

     You can use the command line option -x/--show-compression to print informa-
     tion related to compression. Example:

	 Total data:	       14.8 GB (16.0 GB disk blocks)
	 Compressed data:      11.3 GB (30.6% of original size)
	   Original size:      36.9 GB
	   Compression ratio: 3.267 x  (69.4% space savings)
	 Incompressible data:	3.5 GB

     Notes:

     *	 The "disk blocks" size is the cache size when taking disk block size
	 into account. This value should match the "Cache size" value from
	 "ccache --show-stats". The other size numbers refer to actual content
	 sizes.

     *	 "Compressed data" refers to result and manifest files stored in the
	 cache.

     *	 "Incompressible data" refers to files that are always stored uncom-
	 pressed (triggered by enabling file_clone or hard_link) or unknown
	 files (for instance files created by older ccache versions).

     *	 The compression ratio is affected by compression_level.

     The cache data can also be recompressed to another compression level (or
     made uncompressed) with the command line option -X/--recompress. If you
     choose to disable compression by default or to use a low compression level,
     you can (re)compress newly cached data with a higher compression level af-
     ter the build or at another time when there are more CPU cycles available,
     for instance every night. Full recompression potentially takes a lot of
     time, but only files that are currently compressed with a different level
     than the target level will be recompressed.

CACHE STATISTICS
     ccache --show-stats shows a summary of statistics,  including  cache  size,
     cleanups  (number	of  performed cleanups, either implicitly due to a cache
     size limit being reached or due to explicit ccache -c calls),  overall  hit
     rate, hit rate for direct/preprocessed modes and hit rate for local and re-
     mote storage.

     The summary also includes counters called "Errors" and "Uncacheable", which
     are sums of more detailed counters. To see those detailed counters, use the
     -v/--verbose flag. The verbose mode can show the following counters:
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Counter			   | Description		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Autoconf compile/link	   | Uncacheable  compilation or |
     |				   | linking  by   an	Autoconf |
     |				   | test.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Bad compiler arguments	   | Malformed	 compiler  argu- |
     |				   | ment, e.g. missing a  value |
     |				   | for  a compiler option that |
     |				   | requires  an  argument   or |
     |				   | failure   to  read  a  file |
     |				   | specified by a compiler op- |
     |				   | tion argument.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Called for linking	   | The compiler was called for |
     |				   | linking,	not   compiling. |
     |				   | Ccache only supports compi- |
     |				   | lation  of  a  single file, |
     |				   | i.e. calling  the	compiler |
     |				   | with  the -c option to pro- |
     |				   | duce a single  object  file |
     |				   | from a single source file.  |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Called for preprocessing    | The compiler was called for |
     |				   | preprocessing,  not compil- |
     |				   | ing.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Ccache disabled		   | Ccache was  disabled  by  a |
     |				   | ccache:disable   string  in |
     |				   | the source code file.	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Could not use modules	   | Preconditions for using C++ |
     |				   | MODULES were not fulfilled. |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Could not  use  precompiled | Preconditions   for   using |
     | header			   | precompiled  headers   were |
     |				   | not fulfilled.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Could not read or parse in- | An  input file could not be |
     | put file 		   | read or parsed (see the de- |
     |				   | bug log for details).	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Could not write	to  output | The  output  path specified |
     | file			   | with -o could not be  writ- |
     |				   | ten to.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Compilation failed	   | The  compilation failed. No |
     |				   | result stored in the cache. |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Compiler check failed	   | A	compiler  check  program |
     |				   | specified by compiler_check |
     |				   | (CCACHE_COMPILERCHECK)	 |
     |				   | failed.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Compiler  output file miss- | One of the  files	expected |
     | ing			   | to  be produced by the com- |
     |				   | piler  was  missing   after |
     |				   | compilation.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Compiler   produced   empty | The compiler's output  file |
     | output			   | (typically  an object file) |
     |				   | was  empty  after	compila- |
     |				   | tion.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Could not find the compiler | The   compiler  to  execute |
     |				   | could not be found.	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Error hashing extra file    | Failure  reading	a   file |
     |				   | specified	     by      ex- |
     |				   | tra_files_to_hash		 |
     |				   | (CCACHE_EXTRAFILES).	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Forced recache		   | CCACHE_RECACHE was used  to |
     |				   | overwrite	an  existing re- |
     |				   | sult.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Input file modified  during | An  input file was modified |
     | compilation		   | during compilation.	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Internal error		   | Unexpected  failure,   e.g. |
     |				   | due   to	problems   read- |
     |				   | ing/writing the cache.	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Missing cache file	   | A	file  was   unexpectedly |
     |				   | missing   from  the  cache. |
     |				   | This only happens	in  rare |
     |				   | situations,   e.g.  if  one |
     |				   | ccache instance is about to |
     |				   | get a file from  the  cache |
     |				   | while  another instance re- |
     |				   | moved the file as	part  of |
     |				   | cache cleanup.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Multiple source files	   | The  compiler was called to |
     |				   | compile   multiple   source |
     |				   | files  in	one  go. This is |
     |				   | not supported by ccache.	 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | No input file		   | No input file was specified |
     |				   | to the compiler.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Output to stdout 	   | The compiler was instructed |
     |				   | to  write	its  output   to |
     |				   | standard output using -o -. |
     |				   | This  is  not  supported by |
     |				   | ccache.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Preprocessing failed	   | Preprocessing  the   source |
     |				   | code  using  the compiler's |
     |				   | -E option failed.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Unsupported code directive  | Code  like  the   assembler |
     |				   | .incbin	directive    was |
     |				   | found.  This  is  not  sup- |
     |				   | ported by ccache.		 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Unsupported compiler option | A	compiler option not sup- |
     |				   | ported by ccache was found. |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Unsupported     environment | An environment variable not |
     | variable 		   | supported	 by  ccache  was |
     |				   | set.			 |
     +-----------------------------+-----------------------------+
     |				   |				 |
     | Unsupported source language | A	source	 language   e.g. |
     |				   | specified	with  -x was un- |
     |				   | supported by ccache.	 |
     +-----------------------------+-----------------------------+

HOW CCACHE WORKS
     The basic idea is to detect when you are compiling exactly the same code  a
     second time and reuse the previously produced output. The detection is done
     by  hashing  different  kinds  of information that should be unique for the
     compilation and then using the hash sum  to  identify  the  cached  output.
     Ccache uses BLAKE3, a very fast cryptographic hash algorithm, for the hash-
     ing.  On  a cache hit, ccache is able to supply all of the correct compiler
     outputs (including all warnings, dependency file, etc) from the cache. Data
     stored in the cache is checksummed with XXH3, an extremely fast non-crypto-
     graphic algorithm, to detect corruption.

     Ccache has two ways of gathering information used to look up results in the
     cache:

     *	 the preprocessor mode, where ccache runs the preprocessor on the source
	 code and hashes the result

     *	 the direct mode, where ccache hashes the source code and include  files
	 directly

     The direct mode is generally faster since running the preprocessor has some
     overhead.

     If  no  previous result is detected (i.e., there is a cache miss) using the
     direct mode, ccache will fall back to the preprocessor mode unless the  de-
     pend  mode is enabled. In the depend mode, ccache never runs the preproces-
     sor, not even on cache misses. Read more in The depend mode below.

   Common hashed information
     The following information is always included in the hash:

     *	 the extension used by the compiler for a file with preprocessor  output
	 (normally .i for C code and .ii for C++ code)

     *	 the  compiler's  size and modification time (or other compiler-specific
	 information specified by compiler_check)

     *	 the name of the compiler

     *	 the current directory (if hash_dir is enabled)

     *	 contents of files specified by extra_files_to_hash (if any)

   The preprocessor mode
     In the preprocessor mode, the hash is formed of the common information and:

     *	 the preprocessor output from running the compiler with -E

     *	 the command line options except those that affect  include  files  (-I,
	 -include,  -D,  etc; the theory is that these command line options will
	 change the preprocessor output if they have any effect at all)

     *	 any standard error output generated by the preprocessor

     Based on the hash, the cached compilation result can be looked up	directly
     in the cache.

   The direct mode
     In the direct mode, the hash is formed of the common information and:

     *	 the input source file

     *	 the compiler options

     Based  on	the hash, a data structure called "manifest" is looked up in the
     cache. The manifest contains:

     *	 references to cached compilation results (object file, dependency file,
	 etc) that were produced by previous compilations that matched the hash

     *	 paths to the include files that were read at the time	the  compilation
	 results were stored in the cache

     *	 hash sums of the include files at the time the compilation results were
	 stored in the cache

     The  current  contents of the include files are then hashed and compared to
     the information in the manifest. If there is a match, ccache knows the  re-
     sult of the compilation. If there is no match, ccache falls back to running
     the  preprocessor.  The  output from the preprocessor is parsed to find the
     include files that were read. The paths and  hash	sums  of  those  include
     files are then stored in the manifest along with information about the pro-
     duced compilation result.

     There  is	a catch with the direct mode: header files that were used by the
     compiler are recorded, but header files that were not used, but would  have
     been  used if they existed, are not. So, when ccache checks if a result can
     be taken from the cache, it currently can't check if the existence of a new
     header file should invalidate the result. In practice, the direct	mode  is
     safe to use in the absolute majority of cases.

     The direct mode will be disabled if any of the following holds:

     *	 direct_mode is false

     *	 a  modification  time of one of the include files is too new (needed to
	 avoid a race condition)

     *	 a compiler option not supported by the direct mode is used,  for  exam-
	 ple:

	 *   a -Wp,* compiler option other than -Wp,-MD,<path>, -Wp,-MMD,<path>,
	     -Wp,-D<macro[=defn]> or -Wp,-U<macro>

	 *   most uses of -Xpreprocessor

     *	 the string __TIME__ is present in the source code

   The depend mode
     If the depend mode is enabled, ccache will not use the preprocessor at all.
     The  hash used to identify results in the cache will be based on the direct
     mode hash described above plus information about include  files  read  from
     the dependency list generated by MSVC with /showIncludes, or the dependency
     file generated by other compilers with -MD or -MMD.

     Advantages:

     *	 The ccache overhead of a cache miss will be much smaller.

     *	 Not  running the preprocessor at all can be good if compilation is per-
	 formed remotely, for instance when using distcc or similar; ccache then
	 won't make potentially costly preprocessor calls on the local machine.

     Disadvantages:

     *	 The cache hit rate will likely be lower since any  change  to	compiler
	 options  or source code will make the hash different. Compare this with
	 the default setup where ccache will fall back to the preprocessor mode,
	 which is tolerant to some types of  changes  of  compiler  options  and
	 source code changes.

     *	 If  -MD  is used, the manifest entries will include system header files
	 as well, thus slowing down cache hits slightly, just as using -MD slows
	 down make. This is also the case for MSVC with /showIncludes.

     *	 If -MMD is used, the manifest entries will not  include  system  header
	 files, which means ccache will ignore changes in them.

     The depend mode will be disabled if any of the following holds:

     *	 depend_mode is false.

     *	 run_second_cpp is false.

     *	 The  compiler	is  not  generating  dependencies using -MD or -MMD (for
	 MSVC, /showIncludes is added automatically  if  not  specified  by  the
	 user).

HANDLING OF NEWLY CREATED SOURCE FILES
     If  modification  time  (mtime) or status change time (ctime) of the source
     file or one of the include files is equal to (or newer than) the time  that
     ccache  was  invoked, ccache disables caching completely. This is done as a
     safety measure to avoid a race condition (see below). In practice, this  is
     only a problem when using file systems with very low timestamp granularity.
     You  can set sloppiness to include_file_ctime,include_file_mtime to opt out
     of the safety measure.

     For reference, the race condition mentioned above consists of these events:

      1. A source code file is read by ccache and added to the input hash.

      2. The source code file is modified.

      3. The compiler is executed and reads the modified source code.

      4. Ccache stores the compiler output in the cache associated with the  in-
	 correct key (based on the unmodified source code).

CACHE DEBUGGING
     To find out what information ccache actually is hashing, you can enable the
     debug mode via the configuration option debug or by setting CCACHE_DEBUG in
     the  environment. This can be useful if you are investigating why you don't
     get cache hits. Note that performance will be reduced slightly.

     When the debug mode is enabled, ccache will create up  to	five  additional
     files next to the object file:
     +---------------------+-------------+----------------------+
     |			   |		 |			|
     | Filename 	   | Debug level | Description		|
     +---------------------+-------------+----------------------+
     |			   |		 |			|
     | <objectfile>.<time- | 2		 | Binary  input hashed |
     | stamp>.ccache-in-   |		 | by both  the  direct |
     | put-c		   |		 | mode  and  the  pre- |
     |			   |		 | processor mode.	|
     +---------------------+-------------+----------------------+
     |			   |		 |			|
     | <objectfile>.<time- | 2		 | Binary  input   only |
     | stamp>.ccache-in-   |		 | hashed by the direct |
     | put-d		   |		 | mode.		|
     +---------------------+-------------+----------------------+
     |			   |		 |			|
     | <objectfile>.<time- | 2		 | Binary   input  only |
     | stamp>.ccache-in-   |		 | hashed by  the  pre- |
     | put-p		   |		 | processor mode.	|
     +---------------------+-------------+----------------------+
     |			   |		 |			|
     | <objectfile>.<time- | 2		 | Human-readable  com- |
     | stamp>.ccache-in-   |		 | bined diffable  text |
     | put-text 	   |		 | version of the three |
     |			   |		 | files above. 	|
     +---------------------+-------------+----------------------+
     |			   |		 |			|
     | <objectfile>.<time- | 1		 | Log	for this object |
     | stamp>.ccache-log   |		 | file.		|
     +---------------------+-------------+----------------------+

     The  timestamp  format  is   <year><month><day>_<hour><minute><second>_<mi-
     crosecond>.

     If  you  only  need  the  log  file,  set debug_level (environment variable
     CCACHE_DEBUGLEVEL) to 1.

     If debug_dir (environment variable CCACHE_DEBUGDIR) is set, the files above
     will be written to that directory with full absolute paths instead of  next
     to the object file.

     In  the direct mode, ccache uses the 160 bit BLAKE3 hash of the "ccache-in-
     put-c" + "ccache-input-d" data (where +  means  concatenation),  while  the
     "ccache-input-c" + "ccache-input-p" data is used in the preprocessor mode.

     The "ccache-input-text" file is a combined text version of the three binary
     input files. It has three sections ("COMMON", "DIRECT MODE" and "PREPROCES-
     SOR  MODE"),  which  is turn contain annotations that say what kind of data
     comes next.

     To debug why you don't get an expected cache hit for an  object  file,  you
     can do something like this:

      1. Enable debug (CCACHE_DEBUG).

      2. Build.

      3. Clean and build again.

       4. Compare  the	<objectfile>.<timestamp>.ccache-input-text files for the
	 two builds. This together with the  <objectfile>.<timestamp>.ccache-log
	 files should give you some clues about what is happening.

COMPILING IN DIFFERENT DIRECTORIES
     Some  information included in the hash that identifies a unique compilation
     can contain absolute paths:

     *	 The preprocessed source code may  contain  absolute  paths  to  include
	 files	if the compiler option -g is used or if absolute paths are given
	 to -I and similar compiler options.

     *	 Paths specified by compiler options (such as -I, -MF, etc) on the  com-
	 mand line may be absolute.

     *	 The  source  code  file path may be absolute, and that path may substi-
	 tuted for __FILE__ macros in the source code or  included  in	warnings
	 emitted to standard error by the preprocessor.

     This  means  that	if you compile the same code in different locations, you
     can't share compilation results between  the  different  build  directories
     since  you  get  cache misses because of the absolute build directory paths
     that are part of the hash.

     Here's what can be done to enable cache hits between different build direc-
     tories:

     *	 If you build with -g (or similar) to add debug information to	the  ob-
	 ject file, you must either:

	 *   use the compiler option -fdebug-prefix-map=<old>=<new> for relocat-
	     ing debug info to a common prefix (e.g. -fdebug-prefix-map=$PWD=.);
	     or

	 *   set hash_dir = false.

     *	 If you use absolute paths anywhere on the command line (e.g. the source
	 code file path or an argument to compiler options like -I and -MF), you
	 must  set  base_dir  to  an absolute path to a "base directory". Ccache
	 will then rewrite absolute paths under that directory to  relative  be-
	 fore computing the hash.

PRECOMPILED HEADERS
     Ccache has support for precompiled headers with GCC and Clang. However, you
     have to do some things to make it work properly:

     *	 You  must set sloppiness to pch_defines,time_macros. The reason is that
	 ccache can't tell whether __TIME__, __DATE__ or __TIMESTAMP__	is  used
	 when  using  a  precompiled header. Further, it can't detect changes in
	 #defines in the source code because of how preprocessing works in  com-
	 bination with precompiled headers.

     *	 You  may  also want to include include_file_mtime,include_file_ctime in
	 sloppiness. See HANDLING OF NEWLY CREATED SOURCE FILES.

     *	 You must either:

	 *   use the compiler option -include to include the precompiled  header
	     (i.e., don't use #include in the source code to include the header;
	     the  filename itself must be sufficient to find the header, i.e. -I
	     paths are not searched); or

	 *   (for the Clang compiler) use the compiler	option	-include-pch  to
	     include the PCH file generated from the precompiled header; or

	 *   (for  the	GCC  compiler)	add the compiler option -fpch-preprocess
	     when compiling.

     *	 If you use Clang, you must compile with -fno-pch-timestamp.

     If you don't do this, either the non-precompiled version of the header file
     will be used (if available) or ccache will fall back to  running  the  real
     compiler and increase the statistics counter "Preprocessing failed" (if the
     non-precompiled header file is not available).

C++ MODULES
     Ccache  has  support  for Clang's -fmodules option. In practice ccache only
     additionally hashes module.modulemap files; it does not know how Clang han-
     dles its cached binary form of modules so those are  ignored.  This  should
     not  matter  in practice: as long as everything else (including module.mod-
     ulemap files) is the same the cached result should work.  Still,  you  must
     set sloppiness to modules to allow caching.

     You  must use both direct mode and depend mode. When using the preprocessor
     mode Clang does not provide enough information to	allow  hashing	of  mod-
     ule.modulemap files.

SHARING A LOCAL CACHE
     A	group  of  developers can increase the cache hit rate by sharing a local
     cache directory. To share a local cache without  unpleasant  side	effects,
     the following conditions should to be met:

     *	 Use the same cache directory.

     *	 Make  sure  that  the configuration option hard_link is false (which is
	 the default).

     *	 Make sure that all users are in the same group.

     *	 Set the configuration option umask to 002.  This  ensures  that  cached
	 files are accessible to everyone in the group.

     *	 Make  sure that all users have write permission in the entire cache di-
	 rectory (and that you trust all users of the shared cache).

     *	 Make sure that the setgid bit is set on all directories in  the  cache.
	 This  tells  the filesystem to inherit group ownership for new directo-
	 ries. The following command might be useful for this:

	     find $CCACHE_DIR -type d | xargs chmod g+s

     The reason to avoid the hard link mode is that the  hard  links  cause  un-
     wanted side effects, as all links to a cached file share the file's modifi-
     cation  timestamp.  This  results	in false dependencies to be triggered by
     timestamp-based build systems whenever another user links	to  an	existing
     file.  Typically,	users will see that their libraries and binaries are re-
     linked without reason.

     You may also want to make sure that a base directory is set  appropriately,
     as discussed in a previous section.

SHARING A CACHE ON NFS
     It  is possible to put the cache directory on an NFS filesystem (or similar
     filesystems), but keep in mind that:

     *	 Having the cache on NFS may slow down compilation. Make sure to do some
	 benchmarking to see if it's worth it.

     *	 Ccache hasn't been tested very thoroughly on NFS.

     A tip is to set temporary_dir to a directory on the local host to avoid NFS
     traffic for temporary files.

     It is recommended to use the same operating system  version  when	using  a
     shared  cache.  If  operating system versions are different then system in-
     clude files will likely be different and there will be few or no cache hits
     between the systems. One way of improving cache hit rate in that case is to
     set sloppiness to system_headers to ignore system headers.

     An alternative to putting the main cache directory on NFS is to  set  up  a
     remote storage file cache.

USING CCACHE WITH OTHER COMPILER WRAPPERS
     The recommended way of combining ccache with another compiler wrapper (such
     as "distcc") is by letting ccache execute the compiler wrapper. This is ac-
     complished  by defining prefix_command, for example by setting the environ-
     ment variable CCACHE_PREFIX to the  name  of  the	wrapper  (e.g.	distcc).
     Ccache  will  then  prefix the command line with the specified command when
     running the compiler. To specify several prefix commands,	set  prefix_com-
     mand to a colon-separated list of commands.

     Unless you set compiler_check to a suitable command (see the description of
     that  configuration  option),  it is not recommended to use the form ccache
     anotherwrapper compiler args as the compilation command. It's also not rec-
     ommended to use the masquerading technique for the other compiler	wrapper.
     The reason is that by default, ccache will in both cases hash the mtime and
     size of the other wrapper instead of the real compiler, which means that:

     *	 Compiler upgrades will not be detected properly.

     *	 The  cached  results  will  not be shared between compilations with and
	 without the other wrapper.

     Another minor thing is that if prefix_command is used, ccache will not  in-
     voke  the other wrapper when running the preprocessor, which increases per-
     formance. You can use prefix_command_cpp if you also  want  to  invoke  the
     other wrapper when doing preprocessing (normally by adding -E).

CAVEATS
     *	 The  direct mode fails to pick up new header files in some rare scenar-
	 ios. See The direct mode above.

TROUBLESHOOTING
   General
     A general tip for getting information about what ccache is doing is to  en-
     able  debug logging by setting the configuration option debug (or the envi-
     ronment variable CCACHE_DEBUG); see CACHE DEBUGGING for  more  information.
     Another way of keeping track of what is happening is to check the output of
     ccache -s.

   Performance
     Ccache  has  been written to perform well out of the box, but sometimes you
     may have to do some adjustments of how you use the compiler and  ccache  in
     order to improve performance.

     Since ccache works best when I/O is fast, put the cache directory on a fast
     storage device if possible. Having lots of free memory so that files in the
     cache directory stay in the disk cache is also preferable.

     A	good  way of monitoring how well ccache works is to run ccache -s before
     and after your build and then compare the	statistics  counters.  Here  are
     some common problems and what may be done to increase the hit rate:

     *	 If the counter for preprocessed cache hits has been incremented instead
	 of  the one for direct cache hits, ccache has fallen back to preproces-
	 sor mode, which is generally slower. Some possible reasons are:

	 *   The source code has been modified in such a way that the preproces-
	     sor output is not affected.

	 *   Compiler arguments that are hashed in the direct mode  but  not  in
	     the preprocessor mode have changed (-I, -include, -D, etc) and they
	     didn't affect the preprocessor output.

	 *   The compiler option -Xpreprocessor or -Wp,* (except -Wp,-MD,<path>,
	     -Wp,-MMD,<path>, and -Wp,-D<define>) is used.

	 *   This  was the first compilation with a new value of the base direc-
	     tory.

	 *   A modification or status change time of one of the include files is
	     too new . See HANDLING OF NEWLY CREATED SOURCE FILES.

	 *   The __TIME__ preprocessor macro is (potentially) being used. Ccache
	     turns off direct mode if __TIME__ is present in  the  source  code.
	     This  is done as a safety measure since the string indicates that a
	     __TIME__ macro may affect the output. (To	be  sure,  ccache  would
	     have to run the preprocessor, but the sole point of the direct mode
	     is  to  avoid  that.) If you know that __TIME__ isn't used in prac-
	     tise, or don't care if ccache produces objects  where  __TIME__  is
	     expanded  to  something  in  the  past,  you  can set sloppiness to
	     time_macros.

	 *   The __DATE__ preprocessor macro is (potentially) being used and the
	     date has changed. This is similar to how __TIME__	is  handled.  If
	     __DATE__  is  present in the source code, ccache hashes the current
	     date in order to be able to produce the correct object file if  the
	     __DATE__  macro affects the output. If you know that __DATE__ isn't
	     used in practise, or don't care if ccache	produces  objects  where
	     __DATE__  is expanded to something in the past, you can set sloppi-
	     ness to time_macros.

	 *   The __TIMESTAMP__ preprocessor macro is  (potentially)  being  used
	     and  the source file's modification time has changed. This is simi-
	     lar to how __TIME__ is handled. If __TIMESTAMP__ is present in  the
	     source  code, ccache hashes the string representation of the source
	     file's modification time in order to be able to produce the correct
	     object file if the __TIMESTAMP__ macro affects the output.  If  you
	     know  that  __TIMESTAMP__	isn't used in practise, or don't care if
	     ccache produces objects where __TIMESTAMP__ is  expanded  to  some-
	     thing in the past, you can set sloppiness to time_macros.

	 *   The  input  file  path  has changed. Ccache includes the input file
	     path in the direct mode hash to be able to  take  relative  include
	     files  into  account  and	to  produce a correct object file if the
	     source code includes a __FILE__ macro.

     *	 If a cache hit counter was not incremented even though  the  same  code
	 has  been  compiled  and cached before, ccache has either detected that
	 something has changed anyway or a cleanup has	been  performed  (either
	 explicitly  or  implicitly  when  a cache limit has been reached). Some
	 perhaps unobvious things that may result in a cache miss are  usage  of
	 __TIME__,  __DATE__  or  __TIMESTAMP__  macros, or use of automatically
	 generated code that  contains	a  timestamp,  build  counter  or  other
	 volatile information.

     *	 If  "Multiple	source	files"	has been incremented, it's an indication
	 that the compiler has been invoked on	several  source  code  files  at
	 once.	Ccache doesn't support that. Compile the source code files sepa-
	 rately if possible.

     *	 If "Unsupported compiler option" has  been  incremented,  enable  debug
	 logging and check which compiler option was rejected.

     *	 If  "Preprocessing failed" has been incremented, one possible reason is
	 that precompiled headers are being used. See  PRECOMPILED  HEADERS  for
	 how to remedy this.

     *	 If "Could not use precompiled header" has been incremented, see PRECOM-
	 PILED HEADERS.

     *	 If "Could not use modules" has been incremented, see C++ MODULES.

   Corrupt object files
     It  should be noted that ccache is susceptible to general storage problems.
     If a bad object file sneaks into the cache for  some  reason,  it	will  of
     course  stay  bad. Some possible reasons for erroneous object files are bad
     hardware (disk drive, disk controller, memory, etc), buggy drivers or  file
     systems,  a  bad  prefix_command  or compiler wrapper. If this happens, the
     easiest way of fixing it is this:

      1. Build so that the bad object file ends up in the build tree.

      2. Remove the bad object file from the build tree.

      3. Rebuild with CCACHE_RECACHE set.

     An alternative is to clear the whole cache with ccache -C if you don't mind
     losing other cached results.

     There are no reported issues about ccache producing broken object files re-
     producibly. That doesn't mean it can't happen, so if you find a  repeatable
     case, please report it.

MORE INFORMATION
     Credits, mailing list information, bug reporting instructions, source code,
     etc, can be found on ccache's web site: https://ccache.dev.

AUTHOR
     Ccache was originally written by Andrew Tridgell and is currently developed
     and  maintained  by  Joel	Rosdahl.  See  AUTHORS.txt  or	AUTHORS.html and
     https://ccache.dev/credits.html for a list of contributors.

Ccache 4.10.2			   2024-07-22			       CCACHE(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ccache&sektion=1&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help