|
||||
HOWTO: FreeBSD with CCACHE
install ccache port or add a package:
Code:
# cd /usr/ports/devel/ccache && make install clean # pkg_add -r ccache Code:
CC=/usr/local/libexec/ccache/world-cc CXX=/usr/local/libexec/ccache/world-c++ Code:
# set ccache varibles setenv PATH /usr/local/libexec/ccache:$PATH setenv CCACHE_PATH /usr/bin:/usr/local/bin setenv CCACHE_DIR /var/tmp/ccache setenv CCACHE_LOGFILE /var/log/ccache.log # set ccache temp size to 512MB (default 1GB) if ( -x /usr/local/bin/ccache ) then /usr/local/bin/ccache -M 512m > /dev/null endif ccache can be shared between several computers the same as ports tree for example, check man ccache for more info. ADDED 2007.2.15: example ccache stats from my box. Code:
% ccache -s cache directory /var/tmp/ccache cache hit 18562 cache miss 102820 called for link 9824 multiple source files 75 compile failed 1610 preprocessor error 1446 not a C/C++ file 3747 autoconf compile/link 16982 unsupported compiler option 511 no input file 6698 files in cache 49631 cache size 464.3 Mbytes max cache size 512.0 Mbytes comparasion of buildworld times with and without ccache: Code:
# without ccache make -j1 buildworld 4148.38s user 937.02s system 97% cpu 1:27:00.40 total # with ccache make -j1 buildworld 1043.30s user 703.76s system 88% cpu 32:50.02 total Code:
% cd /home/${USER} % rm -rf .ccache % ln -s /var/tmp/ccache .ccache % ls -l .ccache lrwxr-xr-x 1 ${USER} ${USER} 15 Dec 19 15:20 .ccache -> /var/tmp/ccache % ccache -s cache directory /var/tmp/ccache cache hit 165292 cache miss 327142 called for link 38002 multiple source files 216 compile failed 5182 preprocessor error 4934 couldn't find the compiler 1 not a C/C++ file 26249 autoconf compile/link 52665 unsupported compiler option 1379 no input file 23289 files in cache 79438 cache size 530.2 Mbytes max cache size 512.0 Mbytes % sudo ccache -s cache directory /home/vermaden/.ccache cache hit 165292 cache miss 327142 called for link 38002 multiple source files 216 compile failed 5182 preprocessor error 4934 couldn't find the compiler 1 not a C/C++ file 26249 autoconf compile/link 52665 unsupported compiler option 1379 no input file 23289 files in cache 79438 cache size 530.2 Mbytes max cache size 512.0 Mbytes
__________________
religions, worst damnation of mankind "If 386BSD had been available when I started on Linux, Linux would probably never had happened." Linus Torvalds Linux is not UNIX! Face it! It is not an insult. It is fact: GNU is a recursive acronym for “GNU's Not UNIX”. vermaden's: links resources deviantart spreadbsd |
|
|||
Can someone explain to me what ccache is and what it does on a system? And also why it isn't the default when it can speed up building that fast?
|
|
||||
And sometimes you have to build without ccache, but most of the time you'll be fine and speed up compilation at least while updating the next time. Building kernel and world with ccache and a dualcore is just the best you can get in performance
__________________
use UNIX or die :-) |
|
|||
I have this lines in my /etc/make.conf to control ccache.
If build with ccache is not working I use make -DNOCACHE Code:
.if ${.CURDIR:M*/devel/ccache} NOCACHE=1 .endif .if !defined(NOCACHE) CC=/usr/local/libexec/ccache/world-cc CCX=/usr/local/libexec/ccache/world-cc++ .endif |
|
||||
Yes, some ports seem to fail with ccache ... See:
http://www.nabble.com/Re%3A-Standard...p17992614.html
__________________
UNIX was not designed to stop you from doing stupid things, because that would also stop you from doing clever things. |
|
||||
True, I just tested them and they fail with ccache, but there is bery simple sollution for them. for every port that fails you may add something like that to /etc/make.conf as ohauer suggested:
Code:
.if !defined(NO_CACHE) CC= /usr/local/libexec/ccache/world-cc CCX= /usr/local/libexec/ccache/world-cc++ .endif .if ${.CURDIR:M*/ports/games/freera} NO_CCACHE= yes .endif You may even do something like that if you feel more comfortable: Code:
CCACHE_DISABLED+= games/freera \ graphics/gsculpt \ devel/ccache .for PORT in ${CCACHE_DISABLED} .if ${.CURDIR:M*/ports/$(PORT)} NO_CCACHE= yes .endif .endfor
__________________
religions, worst damnation of mankind "If 386BSD had been available when I started on Linux, Linux would probably never had happened." Linus Torvalds Linux is not UNIX! Face it! It is not an insult. It is fact: GNU is a recursive acronym for “GNU's Not UNIX”. vermaden's: links resources deviantart spreadbsd |
|
||||
Geany doesn't build with ccache either, so I used the solutions listed above, although I'm not exactly sure what the benefits to ccache are. I haven't really seen any massive speed ups in recompilation. I think the biggest speed up will come with better parallel support in ports.
__________________
"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." MacBook Pro (Darwin 9), iMac (Darwin 9), iPod Touch (Darwin 9), Dell Optiplex GX620 (FreeBSD 7.1-STABLE) |
|
||||
Strange, I have never had any issues with Geany compilation using ccache, to be precise, all ports that I used built successfully with ccache.
__________________
religions, worst damnation of mankind "If 386BSD had been available when I started on Linux, Linux would probably never had happened." Linus Torvalds Linux is not UNIX! Face it! It is not an insult. It is fact: GNU is a recursive acronym for “GNU's Not UNIX”. vermaden's: links resources deviantart spreadbsd |
|
||||
Quote:
For example, If I upgrade a port or something, I may need to compile the application several times (Depending on how much patching is needed), so then ccache is very useful. For a normal end-user who just compiles ports, ccache's usefulness is limited... As for geany, I had no problems compiling 0.14,1 - Which is the latest version (VTE and NLS turned off) ... What error/problem did you have exactly?
__________________
UNIX was not designed to stop you from doing stupid things, because that would also stop you from doing clever things. |
|
||||
Quote:
The configure script died with ccache enabled because it apparently couldn't find the compiler. So, I went to test another ports, pidgin. It compiled fine. So, I disabled ccache, and Geany compiled. It's not of much use to me as I'm actually interested in getting NetBeans to bend to FreeBSD or working with source code for that.
__________________
"UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." MacBook Pro (Darwin 9), iMac (Darwin 9), iPod Touch (Darwin 9), Dell Optiplex GX620 (FreeBSD 7.1-STABLE) Last edited by ninjatux; 9th July 2008 at 07:13 PM. |
Tags |
ccache |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
FreeBSD GPT howto | graudeejs | Guides | 10 | 21st December 2010 12:24 AM |
HOWTO: FreeBSD CPU Scaling with cpufreq.ko | vermaden | Guides | 10 | 27th October 2010 07:58 AM |
HOWTO: Enemy Territory on FreeBSD | tangram | Guides | 0 | 9th June 2009 03:31 PM |
HOWTO: QEMU on FreeBSD | vermaden | Guides | 10 | 9th March 2009 07:10 PM |
FreeBSD howto: burning and ripping cd's | graudeejs | Guides | 9 | 31st December 2008 06:39 AM |