]> Creatis software - clitk.git/blob - fast_make.sh
Initial revision
[clitk.git] / fast_make.sh
1 #!/bin/bash
2 vv_dir=$(dirname $(readlink -e $(which $0)))
3 echo vv directory: $vv_dir
4 cd ${vv_dir}/build
5
6 function handle_exit
7 {
8     rm mem_use 2>>/dev/null
9     killall -s SIGCONT make
10     killall make
11     killall cc1plus
12     echo "Terminated, exiting..."
13     echo
14     echo
15     exit
16 }
17
18 trap handle_exit SIGINT
19 available_mem=$(cat /proc/meminfo | grep MemTotal | grep -o [0-9]*)
20 if [ -a "memory_exhausted_lock" ]
21 then
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..."
26    sleep 1
27    make -j${cpus}
28 else #use all the available computing power by default
29     cpus=$(( $(cat /proc/cpuinfo | grep -c ^processor) + 0 ))
30 fi
31
32 make -j ${cpus} $@ &
33 make_pid=$(jobs -p %make)
34 #watch memory use to avoid crashes
35 while ps $make_pid >>/dev/null 
36 do
37     if [ x"$(ps aux | grep cc1plus | grep -v grep | wc -l)" != x0 ]
38     then
39         ps ax -o vsize,comm | grep cc1plus | grep -o "\<[0-9]*\>" > mem_use
40         used_mem=$(awk 'BEGIN {sum=0;} {sum+=$1;} END {print sum;}' mem_use)
41         if (( "$used_mem"> ($available_mem - 300) ))
42         then
43             touch memory_exhausted_lock
44             echo "Stopping due to exagerated memory use ( $used_mem )"
45             handle_exit
46         elif (( "$used_mem"> ($available_mem/2) ))
47         then
48             if [ x$high_mem != xtrue ]
49             then
50                 echo "Warning, high memory use, not spawning any more compilation jobs... ( $used_mem )"
51                 killall -s SIGSTOP make
52                 killall -s SIGCONT cc1plus
53                 high_mem="true"
54                 date_mem=$(date +%s)
55             fi
56             echo mem $used_mem / $available_mem
57         elif [ x$high_mem = xtrue ] && (( $(date +%s) > ( $date_mem + 5 ) ))
58         then
59             echo "Memory use back to normal"
60             high_mem=""
61             killall -s SIGCONT make
62         fi
63         rm mem_use
64     fi
65     sleep 1
66 done
67 rm memory_exhausted_lock 2>>/dev/null
68 echo Done!
69 echo