You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							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 | 
						|
 | 
						|
 |