#!/bin/bash

# (C) -2002, 2002-2008 Jose Calhariz
# License: GPL-2

# Args
# $1 - Directory of linux to build
# $2 - Max jobs
# $3 - CC compiler

# ----------------------------------------------------------------------
# Ciclo infinito de compilações do kernel de linux.  Cada compilação é
# feita com um número máximo de 35 jobs.  Máximo valor para compilar
# num kernel 2.4.19 sem atingir o limite de processos no sistema e
# ainda deixar uma folga para o sistema continuar a funcionar
# normalmente.

# Potencialmente uma alteração para indicar um número máximo de
# compilações.
#
# Debian 3.1 gcc-3.3 i386
#         Sem si so       Algum si so      Muito si so   Swap size
# 512MB -                     50
# 1024MB -    50             100              200           2048MB
# 2048MB -   100             200              250           4096MB
# ----------------------------------------------------------------------
#
# Debian 4.0 gcc-3.3 i386
#         Sem si so       Algum si so      Muito si so   Swap size
# 512MB -                     XX               XX
# 1024MB -    30              80?             XXX           2048MB
# 2048MB -    80?            160?             320?          4096MB
# 4096MB -   160?            XXX?             XXX           8192MB
# ----------------------------------------------------------------------

# Debian 4.0 gcc-3.3 amd64
#         Sem si so       Algum si so      Muito si so   Swap size
# 512MB -                     XX               XX
# 1024MB -    30/35?         XXX              XXX           2048MB
# 2048MB -    35              80              XXX           4096MB
# 4096MB -    80             120              320           8192MB
# ----------------------------------------------------------------------

# Testing machines
# Filipa -  1024MB - precisa de usar 17544k de swap durante a fase ld
# Xena3  -  2048MB - 350MB working memory em vazio
# Quiteria

# Sem si so   - Swap maximo = 100k, 100% real time, practicamente 0 de si e so
# Algum si so - Swap maximo = 50% da RAM, 125% real time, 5000 si e 11361 so, 
# Muito si so - Swap maximo > 200% da RAM, 3x real time, 5000 na soma si so
# 
#
# 2.6.9 recomends gcc 3.3
# 2.6.18 recomends gcc 3.3

erro () {
echo Erro Inesperado 
exit 1
}


cpubuild () {
load=${2:-35}
echo "load=$load"
cc=${3:-gcc}
echo "CC=$cc"
setterm -blank 0
cd $1
name=`date +%Y-%m-%d_%H:%M`
logdir="$HOME/log"
mkdir -p "$logdir"
touch ${logdir}/cpubuild_${name}_start_stamp
run=0
while true ; do
    if test -e ${logdir}/cpubuild_${name}_stop_stamp ; then
	echo "Stopping because I found ${logdir}/cpubuild_${name}_stop_stamp"
	exit 0
    fi
    echo -n "==>>Compilação $[ run = run + 1 ] `date`"
    echo $run > ${logdir}/cpubuild_${name}_tick_stamp
    touch ${logdir}/cpubuild_${name}_tick_stamp
    echo -n " clean"
    make clean > /dev/null || erro
    echo -n " dep"
    make dep > /dev/null || erro
    echo " build"
    make -s -j$load bzImage CC=$cc HOSTCC=$cc > /dev/null || erro 
done
}

cpubuild $1 $2 $3
