2 vv_dir=$(dirname $(readlink -e $(which $0)))
3 echo vv directory: $vv_dir
8 rm mem_use 2>>/dev/null
9 killall -s SIGCONT make
12 echo "Terminated, exiting..."
18 trap handle_exit SIGINT
19 available_mem=$(cat /proc/meminfo | grep MemTotal | grep -o [0-9]*)
20 if [ -a "memory_exhausted_lock" ]
22 echo "Running in memory conservation mode..."
23 max_cpp_process_mem_use=1600000
24 cpus=$(( $available_mem / $max_cpp_process_mem_use ))
25 echo "Using $cpus cpu(s) should be safe..."
28 else #use all the available computing power by default
29 cpus=$(( $(cat /proc/cpuinfo | grep -c ^processor) + 0 ))
32 nice -n12 ionice -c3 make -j ${cpus} $@ &
33 make_pid=$(jobs -p %nice)
35 #watch memory use to avoid crashes
36 while ps $make_pid >>/dev/null
38 if [ x"$(ps aux | grep cc1plus | grep -v grep | wc -l)" != x0 ]
40 ps ax -o vsize,comm | grep cc1plus | grep -o "\<[0-9]*\>" > mem_use
41 used_mem=$(awk 'BEGIN {sum=0;} {sum+=$1;} END {print sum;}' mem_use)
42 if (( "$used_mem"> ($available_mem - 300) ))
44 touch memory_exhausted_lock
45 echo "Stopping due to exagerated memory use ( $used_mem )"
47 elif (( "$used_mem"> ($available_mem/2) ))
49 if [ x$high_mem != xtrue ]
51 echo "Warning, high memory use, not spawning any more compilation jobs... ( $used_mem )"
52 killall -s SIGSTOP make
53 killall -s SIGCONT cc1plus
57 echo mem $used_mem / $available_mem
58 elif [ x$high_mem = xtrue ] && (( $(date +%s) > ( $date_mem + 5 ) ))
60 echo "Memory use back to normal"
62 killall -s SIGCONT make
68 rm memory_exhausted_lock 2>>/dev/null