👤
Home Man
Search
Today's Posts
Register

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:
Select Section of Man Page:
Select Man Page Repository:

CentOS 7.0 - man page for ccache-swig (centos section 1)

ccache-swig(1)									   ccache-swig(1)

NAME
       ccache-swig - a fast compiler cache

SYNOPSIS
       ccache-swig [OPTION]

       ccache-swig <compiler> [COMPILER OPTIONS]

       <compiler> [COMPILER OPTIONS]

DESCRIPTION
       ccache-swig is a compiler cache. It speeds up re-compilation of C/C++/SWIG code by caching
       previous compiles and detecting when the same compile is being done again. ccache-swig  is
       ccache plus support for SWIG. ccache and ccache-swig are used interchangeably in this doc-
       ument.

OPTIONS SUMMARY
       Here is a summary of the options to ccache-swig.

       -s		       show statistics summary
       -z		       zero statistics
       -c		       run a cache cleanup
       -C		       clear the cache completely
       -F <n>		       set maximum files in cache
       -M <n>		       set maximum size of cache (use G, M or K)
       -h		       this help page
       -V		       print version number

OPTIONS
       These options only apply when you invoke ccache as "ccache-swig". When invoked as  a  com-
       piler none of these options apply. In that case your normal compiler options apply and you
       should refer to your compilers documentation.

       -h     Print a options summary page

       -s     Print the current statistics summary for	the  cache.  The  statistics  are  stored
	      spread  across  the subdirectories of the cache. Using "ccache-swig -s" adds up the
	      statistics across all subdirectories and prints the totals.

       -z     Zero the cache statistics.

       -V     Print the ccache version number

       -c     Clean the cache and re-calculate the cache file count and size totals. Normally the
	      -c  option  should  not  be necessary as ccache keeps the cache below the specified
	      limits at runtime and keeps statistics up to date on each compile. This  option  is
	      mostly  useful  if you manually modify the cache contents or believe that the cache
	      size statistics may be inaccurate.

       -C     Clear the entire cache, removing all cached files.

       -F <maxfiles>
	      This sets the maximum number of files allowed in the cache.  The	value  is  stored
	      inside  the  cache directory and applies to all future compiles. Due to the way the
	      value is stored the actual value used is always rounded down to the nearest  multi-
	      ple of 16.

       -M <maxsize>
	      This  sets  the maximum cache size. You can specify a value in gigabytes, megabytes
	      or kilobytes by appending a G, M or K to the value. The default is  gigabytes.  The
	      actual value stored is rounded down to the nearest multiple of 16 kilobytes.

INSTALLATION
       There  are  two	ways  to  use  ccache.	You  can either prefix your compile commands with
       "ccache-swig" or you can create a symbolic link between ccache-swig and the names of  your
       compilers.  The first method is most convenient if you just want to try out ccache or wish
       to use it for some specific projects. The second method is most useful for when	you  wish
       to use ccache for all your compiles.

       To install for usage by the first method just copy ccache-swig to somewhere in your path.

       To install for the second method do something like this:

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

       This will work as long as /usr/local/bin comes before the path to gcc (which is usually in
       /usr/bin). After installing you may wish to run "which gcc" to make sure that the  correct
       link is being used.

       Note!  Do  not  use  a hard link, use a symbolic link. A hardlink will cause "interesting"
       problems.

EXTRA OPTIONS
       When run as a compiler front end ccache usually just takes the same command  line  options
       as  the	compiler you are using. The only exception to this is the option '--ccache-skip'.
       That option can be used to tell ccache that the next option  is	definitely  not  a  input
       filename, and should be passed along to the compiler as-is.

       The  reason  this  can be important is that ccache does need to parse the command 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 resulting object file (among other things). The
       heuristic ccache uses in this parse is that any string on the command line that exists  as
       a file is treated as an input file name (usually a C file). 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.

ENVIRONMENT VARIABLES
       ccache  uses  a	number	of  environment variables to control operation. In most cases you
       won't need any of these as the defaults will be fine.

       CCACHE_DIR
	      the CCACHE_DIR environment variable specifies where ccache  will	keep  its  cached
	      compiler output. The default is "$HOME/.ccache".

       CCACHE_TEMPDIR
	      the  CCACHE_TEMPDIR  environment variable specifies where ccache will put temporary
	      files. The default is the same as CCACHE_DIR. Note  that	the  CCACHE_TEMPDIR  path
	      must  be	on  the  same filesystem as the CCACHE_DIR path, so that renames of files
	      between the two directories can work.

       CCACHE_LOGFILE
	      If you set the CCACHE_LOGFILE environment variable then ccache will write some  log
	      information on cache hits and misses in that file. This is useful for tracking down
	      problems.

       CCACHE_VERBOSE
	      If you set the CCACHE_VERBOSE environment variable then ccache will display on std-
	      out all the compiler invocations that it makes. This can useful for debugging unex-
	      pected problems.

       CCACHE_PATH
	      You can optionally set CCACHE_PATH to a colon separated path where ccache will look
	      for  the	real  compilers. If you don't do this then ccache will look for the first
	      executable matching the compiler name in the normal PATH that isn't a symbolic link
	      to ccache itself.

       CCACHE_CC
	      You  can	optionally set CCACHE_CC to force the name of the compiler to use. If you
	      don't do this then ccache works it out from the command line.

       CCACHE_PREFIX
	      This option adds a prefix to the command line that ccache runs  when  invoking  the
	      compiler. Also see the section below on using ccache with distcc.

       CCACHE_DISABLE
	      If  you  set the environment variable CCACHE_DISABLE then ccache will just call the
	      real compiler, bypassing the cache completely.

       CCACHE_READONLY
	      the CCACHE_READONLY environment variable tells ccache to attempt	to  use  existing
	      cached  object  files,  but not to try to add anything new to the cache. If you are
	      using this because your CCACHE_DIR is read-only, then you may find  that	you  also
	      need  to	set  CCACHE_TEMPDIR as otherwise ccache will fail to create the temporary
	      files.

       CCACHE_CPP2
	      If you set the environment variable CCACHE_CPP2 then ccache will not use the  opti-
	      misation	of  avoiding  the 2nd call to the pre-processor by compiling the pre-pro-
	      cessed output that was used for finding the hash in the case of a cache miss.  This
	      is  primarily a debugging option, although it is possible that some unusual compil-
	      ers will have problems with the intermediate filename extensions used in this opti-
	      misation, in which case this option could allow ccache to be used.

       CCACHE_NOCOMPRESS
	      If  you set the environment variable CCACHE_NOCOMPRESS then there is no compression
	      used on files that go into the cache. However, this setting has no  effect  on  how
	      files are retrieved from the cache, compressed results will still be usable.

       CCACHE_NOSTATS
	      If  you set the environment variable CCACHE_NOSTATS then ccache will not update the
	      statistics files on each compile.

       CCACHE_NLEVELS
	      The environment variable CCACHE_NLEVELS allows you to choose the number  of  levels
	      of  hash in the cache directory. The default is 2. The minimum is 1 and the maximum
	      is 8.

       CCACHE_HARDLINK
	      If you set the environment variable CCACHE_HARDLINK then ccache will attempt to use
	      hard  links  from the cache directory when creating the compiler output rather than
	      using a file copy. Using hard links is faster, but can confuse programs like 'make'
	      that  rely  on  modification  times. Hard links are never made for compressed cache
	      files.

       CCACHE_RECACHE
	      This forces ccache to not use any cached	results,  even	if  it	finds  them.  New
	      results are still cached, but existing cache entries are ignored.

       CCACHE_UMASK
	      This sets the umask for ccache and all child processes (such as the compiler). This
	      is mostly useful when you wish to share your cache with other users. Note that this
	      also  affects the file permissions set on the object files created from your compi-
	      lations.

       CCACHE_HASHDIR
	      This tells ccache to hash the current working directory when calculating	the  hash
	      that  is used to distinguish two compiles. This prevents a problem with the storage
	      of the current working directory in the debug info of a object file, which can lead
	      ccache  to  give	a  cached object file that has the working directory in the debug
	      info set incorrectly. This option is off by default as  the  incorrect  setting  of
	      this  debug  info rarely causes problems. If you strike problems with gdb not using
	      the correct directory then enable this option.

       CCACHE_UNIFY
	      If you set the environment variable CCACHE_UNIFY then ccache  will  use  the  C/C++
	      unifier when hashing the pre-processor output if -g is not used in the compile. The
	      unifier is slower than a normal hash, so setting this environment variable loses	a
	      little bit of speed, but it means that ccache can take advantage of not recompiling
	      when the changes to the source code consist of reformatting only. Note  that  using
	      CCACHE_UNIFY  changes  the hash, so cached compiles with CCACHE_UNIFY set cannot be
	      used when CCACHE_UNIFY is not set and vice versa. The reason the unifier is off  by
	      default  is  that it can give incorrect line number information in compiler warning
	      messages.

       CCACHE_EXTENSION
	      Normally ccache tries to automatically determine the extension to use for  interme-
	      diate C pre-processor files based on the type of file being compiled. Unfortunately
	      this sometimes doesn't work, for example when using the aCC compiler on  HP-UX.  On
	      systems  like this you can use the CCACHE_EXTENSION option to override the default.
	      On HP-UX set this environment variable to "i" if you use the aCC compiler.

       CCACHE_STRIPC
	      If you set the environment variable CCACHE_STRIPC then ccache  will  strip  the  -c
	      option  when  invoking the preprocessor. This option is primarily for the Sun Work-
	      shop C++ compiler as without this option an unwarranted warning is  displayed:  CC:
	      Warning:	"-E"  redefines product from "object" to "source (stdout)" when -E and -c
	      is used together.

       CCACHE_SWIG
	      When using SWIG as the compiler and it does not have 'swig' in the executable name,
	      then  the  CCACHE_SWIG  environment variable needs to be set in order for ccache to
	      work correctly with SWIG. The use of CCACHE_CPP2 is also recommended for	SWIG  due
	      to  some	preprocessor  quirks, however, use of CCACHE_CPP2 can often be skipped --
	      check your generated code with and without this  option  set.  Known  problems  are
	      using preprocessor directives within %inline blocks and the use of '#pragma SWIG'.

CACHE SIZE MANAGEMENT
       By  default  ccache  has  a  one gigabyte limit on the cache size and no maximum number of
       files. You can set a different limit using the "ccache -M" and "ccache -F" options,  which
       set the size and number of files limits.

       When  these  limits  are reached ccache will reduce the cache to 20% below the numbers you
       specified in order to avoid doing the cache clean operation too often.

CACHE COMPRESSION
       By default on most platforms ccache will compress all files it puts into the  cache  using
       the  zlib  compression. While this involves a negligible performance slowdown, it signifi-
       cantly increases the number of files that fit in the cache. You can turn  off  compression
       setting the CCACHE_NOCOMPRESS environment variable.

HOW IT WORKS
       The  basic  idea  is to detect when you are compiling exactly the same code a 2nd time and
       use the previously compiled output. You detect that it is the same code by forming a  hash
       of:

       o      the pre-processor output from running the compiler with -E

       o      the command line options

       o      the real compilers size and modification time

       o      any stderr output generated by the compiler

       These  are  hashed using md4 (a strong hash) and a cache file is formed based on that hash
       result. When the same compilation is done a second time ccache is able to supply the  cor-
       rect compiler output (including all warnings etc) from the cache.

       ccache  has been carefully written to always produce exactly the same compiler output that
       you would get without the cache. If you ever discover a case where ccache changes the out-
       put of your compiler then please let me know.

USING CCACHE WITH DISTCC
       distcc  is  a  very useful program for distributing compilation across a range of compiler
       servers. It is often useful to combine distcc with ccache, so that compiles that are  done
       are sped up by distcc, but that ccache avoids the compile completely where possible.

       To use distcc with ccache I recommend using the CCACHE_PREFIX option. You just need to set
       the environment variable CCACHE_PREFIX to 'distcc' and ccache will prefix the command line
       used with the compiler with the command 'distcc'.

SHARING A CACHE
       A  group  of developers can increase the cache hit rate by sharing a cache directory.  The
       hard links however cause unwanted side effects, as all links to a cached  file  share  the
       file's  modification  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 relinked without reason.  To share a
       cache without side effects, the following conditions need to be met:

       o      Use the same CCACHE_DIR environment variable setting

       o      Unset the CCACHE_HARDLINK environment variable

       o      Make sure everyone sets the CCACHE_UMASK environment variable to 002, this  ensures
	      that cached files are accessible to everyone in the group.

       o      Make  sure  that all users have write permission in the entire cache directory (and
	      that you trust all users of the shared cache).

       o      Make sure that the setgid bit is set on all directories in the  cache.  This  tells
	      the  filesystem  to inherit group ownership for new directories. The command "chmod
	      g+s `find $CCACHE_DIR -type d`" might be useful for this.

       o      Set CCACHE_NOCOMPRESS for all users, if there are users  with  versions  of  ccache
	      that do not support compression.

HISTORY
       ccache  was inspired by the compilercache shell script script written by Erik Thiele and I
       would like to thank him for an excellent piece of work. See  http://www.erikyyy.de/compil-
       ercache/  for  the Erik's scripts.  ccache-swig is a port of the original ccache with sup-
       port added for use with SWIG.

       I wrote ccache because I wanted to get a bit more speed out of  a  compiler  cache  and	I
       wanted to remove some of the limitations of the shell-script version.

DIFFERENCES FROM COMPILERCACHE
       The biggest differences between Erik's compilercache script and ccache are:

       o      ccache  is  written in C, which makes it a bit faster (calling out to external pro-
	      grams is mostly what slowed down the scripts).

       o      ccache can automatically find the real compiler

       o      ccache keeps statistics on hits/misses

       o      ccache can do automatic cache management

       o      ccache can cache compiler output that includes warnings. In many cases  this  gives
	      ccache a much higher cache hit rate.

       o      ccache can handle a much wider ranger of compiler options

       o      ccache avoids a double call to cpp on a cache miss

CREDITS
       Thanks to the following people for their contributions to ccache

       o      Erik Thiele for the original compilercache script

       o      Luciano Rocha for the idea of compiling the pre-processor output to avoid a 2nd cpp
	      pass

       o      Paul Russell for many suggestions and the debian packaging

AUTHOR
       ccache was written by Andrew Tridgell http://samba.org/~tridge/.  ccache  was  adapted  to
       create ccache-swig for use with SWIG by William Fulton.

       If you wish to report a problem or make a suggestion then please email the SWIG developers
       on the swig-devel mailing list, see http://www.swig.org/mail.html

       ccache is released under the GNU General Public License version 2 or later. Please see the
       file COPYING for license details.

										   ccache-swig(1)


All times are GMT -4. The time now is 02:06 PM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
×
UNIX.COM Login
Username:
Password:  
Show Password