125 lines
4.3 KiB
125 lines
4.3 KiB
# --- SDE-COPYRIGHT-NOTE-BEGIN --- |
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. |
|
# |
|
# Filename: package/.../ccache/parse-config |
|
# Copyright (C) 2006 - 2009 The OpenSDE Project |
|
# Copyright (C) 2004 - 2006 The T2 SDE Project |
|
# |
|
# More information can be found in the files COPYING and README. |
|
# |
|
# This program is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; version 2 of the License. A copy of the |
|
# GNU General Public License can be found in the file COPYING. |
|
# --- SDE-COPYRIGHT-NOTE-END --- |
|
|
|
if [ "$SDECFG_PKG_CCACHE_USEIT" != 1 ]; then |
|
true # skip |
|
elif [ -z "`type -p ccache`" ]; then |
|
echo_warning 'Compiler cache disabled! (ccache not available)' |
|
elif [ "$pkg" == gcc ]; then |
|
echo_warning 'Compiler cache disabled! (package incompatible)' |
|
elif [ "$SDECFG_DEBUG" == 1 ]; then |
|
echo_warning 'Compiler cache disabled! (package build with debug symbols)' |
|
else |
|
unset ${!CCACHE_*} |
|
|
|
# migration, build/ccache-* -> build/.ccache-* |
|
# |
|
for x in $(cd "$base/build" 2> /dev/null && ls -1d ccache-* 2> /dev/null); do |
|
if [ ! -d "$base/build/.$x" ]; then |
|
echo_warning "ccache: moving $x to build/.$x" |
|
mv "$base/build/$x" "$base/build/.$x" |
|
fi |
|
done |
|
|
|
# wrap the sytem compiler |
|
ccache_dir=".ccache" |
|
if atstage toolchain; then |
|
x=`/bin/uname -m | uname2arch` |
|
var_append ccache_dir - $x |
|
fi |
|
|
|
var_append ccache_dir - $arch |
|
|
|
# do not trash the cache with feature-less built packages |
|
[ $stagelevel -le 2 ] && var_append ccache_dir - $stagelevel |
|
|
|
export CCACHE_DIR="$base/build/$ccache_dir/$pkg" |
|
export CCACHE_DONT_STAT_COMPILER=1 |
|
export CCACHE_UNIFY=1 # needed to e.g. strip comments |
|
#export CCACHE_LOGFILE="$CCACHE_DIR.log" |
|
|
|
# In the chroot sandbox we need to wire the cccache-$arch out by using |
|
# the existing bind mount. We only do this, if we are not doing a |
|
# manual stage9 build ... |
|
if atstage native && [ "$ROCK_THIS_IS_CHROOT" ]; then |
|
mkdir -p $base/loop/build/$ccache_dir |
|
ln -snf ../loop/build/$ccache_dir $base/build/$ccache_dir |
|
fi |
|
|
|
# we instruct the flist wrapper to filter out ccache access, to |
|
# further reduce flist post processing time for big packages |
|
var_append FLWRAPPER_FILTERDIR ':' "$CCACHE_DIR" |
|
|
|
mkdir -p "$CCACHE_DIR" |
|
|
|
if [ "$SDECFG_PKG_CCACHE_CLEANUP" != 0 ]; then |
|
# we need to know if atime tests work or not |
|
echo > $CCACHE_DIR/.timestamp |
|
echo > $CCACHE_DIR/.timestamp-reference |
|
fi |
|
|
|
ccache -M ${SDECFG_PKG_CCACHE_MAX:-1000M} > /dev/null |
|
|
|
# just using the CC_WRAPPER would not wrap KCC ... - thus we use GCC for C and C++ |
|
# and KCC for the kernel builds ... |
|
if ! atstage toolchain; then |
|
var_insert KCC_WRAPPER_OTHERS ":" "ccache" |
|
var_insert GCC_WRAPPER_OTHERS ":" "ccache" |
|
else |
|
var_insert SYSCC_WRAPPER_OTHERS ":" "ccache" |
|
fi |
|
|
|
eval "$( ccache -s | gawk '/cache hit/ { hit=$3; } |
|
/cache miss/ { miss=$3; } |
|
END { if (hit+miss == 0) print "x=0.00"; |
|
else printf "x=%.2f\n", hit*100 / (hit+miss); |
|
print "ccache_hit=" hit "; ccache_miss=" miss; }' )" |
|
y=$( du -sh "$CCACHE_DIR" | cut -f1 ) |
|
echo_status "Compiler Cache enabled: $x% ($y) cache hits so far" |
|
|
|
ccache_print_status() { |
|
eval "$( ccache -s | gawk '/cache hit/ { hit=$3-'$ccache_hit'; } |
|
/cache miss/ { miss=$3-'$ccache_miss'; } |
|
END { if (hit+miss == 0) print "x=0.00"; |
|
else printf "x=%.2f\n", hit*100 / (hit+miss); |
|
print "ccache_hit=" hit "; ccache_miss=" miss; }' )" |
|
y=$( du -sh "$CCACHE_DIR" | cut -f1 ) |
|
echo_status "Compiler Cache Hits while pkg build: $x% (` |
|
`$ccache_hit hits, $ccache_miss misses, $y)" |
|
|
|
if [ "$SDECFG_PKG_CCACHE_CLEANUP" != 0 -a -f "$root/var/adm/logs/$stagelevel-$xpkg.log" ]; then |
|
# test if fs supports atime |
|
cat $CCACHE_DIR/.timestamp > /dev/null |
|
if [ "$( find $CCACHE_DIR/.timestamp -anewer $CCACHE_DIR/.timestamp-reference )" ] |
|
then |
|
# remove non-hits from the ccache cache ... |
|
# |
|
find $CCACHE_DIR -type f ! -anewer $CCACHE_DIR/.timestamp-reference -a ! -name '*.stderr' | |
|
while read fn ;do |
|
rm -f $fn{,.stderr} 2>/dev/null |
|
done |
|
echo_status "Compiler Cache reduced to $( du -sh "$CCACHE_DIR" | cut -f1 )." |
|
else |
|
echo_warning "No atime support available, Compiler Cache clean up not possible." |
|
fi |
|
fi |
|
} |
|
|
|
hook_add finish 9 ccache_print_status |
|
|
|
# last but not least make sure the package does not depend on ccache |
|
var_append flistrfilter "|" ".*bin/ccache$" |
|
fi |
|
|
|
|