Added caching to captain.sh

This commit is contained in:
Nathan Braswell
2016-05-10 14:05:12 -04:00
parent 133bf29cdf
commit 88f922f67b
2 changed files with 56 additions and 25 deletions

View File

@@ -7,6 +7,11 @@ bootstrap_commits=(cf46fb13afe66ba475db9725e9269c9c1cd3bbc3 2cd43e5a217318c70097
# There is a default version string in the file in case kraken is not built with captain # There is a default version string in the file in case kraken is not built with captain
echo "var version_string = \"Self-hosted Kraken compiler \\\"Kalypso\\\" - revision $(git rev-list HEAD | wc -l), commit: $(git rev-parse HEAD)\";" > compiler_version.krak echo "var version_string = \"Self-hosted Kraken compiler \\\"Kalypso\\\" - revision $(git rev-list HEAD | wc -l), commit: $(git rev-parse HEAD)\";" > compiler_version.krak
if ! [ -s "cached_builds" ]
then
mkdir cached_builds
fi
if [[ $1 == "clean" ]] if [[ $1 == "clean" ]]
then then
rm ${kraken} rm ${kraken}
@@ -47,31 +52,55 @@ else
echo "no ${kraken}_deprecated, bootstrapping using kraken_bootstrap" echo "no ${kraken}_deprecated, bootstrapping using kraken_bootstrap"
if ! [ -s "${kraken}_bootstrap" ] if ! [ -s "${kraken}_bootstrap" ]
then then
echo "no ${kraken}_bootstrap, bootstrapping using Cephelpod and a chain of old Kalypsos" # Check to see if we have a chached version
cached_index=1
for ((i=2; i < ${#bootstrap_commits[@]}; i++))
do
echo "checking for cached kalypso part $i"
echo "commit hash: ${bootstrap_commits[$i]}"
if [ -s "cached_builds/${bootstrap_commits[i]}" ]
then
cached_index=$i
echo "have cached: ${bootstrap_commits[$i]}"
else
echo "do not have cached: ${bootstrap_commits[$i]}"
fi
done
git clone . bootstrap_kalypso git clone . bootstrap_kalypso
pushd bootstrap_kalypso pushd bootstrap_kalypso
git checkout ${bootstrap_commits[0]} if [[ $cached_index == "1" ]]
cp -r stdlib deprecated_compiler then
cp krakenGrammer.kgm deprecated_compiler echo "no ${kraken}_bootstrap, bootstrapping using Cephelpod and a chain of old Kalypsos"
cp kraken.krak deprecated_compiler git checkout ${bootstrap_commits[0]}
pushd deprecated_compiler cp -r stdlib deprecated_compiler
mkdir build cp krakenGrammer.kgm deprecated_compiler
pushd build cp kraken.krak deprecated_compiler
cmake .. pushd deprecated_compiler
make mkdir build
popd pushd build
mkdir build_kraken cmake ..
mv kraken.krak build_kraken make
pushd build_kraken popd
../build/kraken kraken.krak mkdir build_kraken
popd mv kraken.krak build_kraken
popd pushd build_kraken
pushd deprecated_compiler/build_kraken/kraken ../build/kraken kraken.krak
sh kraken.sh popd
popd popd
cp deprecated_compiler/build_kraken/kraken/kraken ./${kraken}_bootstrap pushd deprecated_compiler/build_kraken/kraken
sh kraken.sh
popd
cp deprecated_compiler/build_kraken/kraken/kraken ./${kraken}_bootstrap
else
echo "no ${kraken}_bootstrap, bootstrapping using starting from cached version"
git checkout ${bootstrap_commits[$cached_index]}
cp "../cached_builds/${bootstrap_commits[$cached_index]}/kraken.krak.c" "./"
cc kraken.krak.c -O3 -o kraken_bootstrap
fi
# loop through the chain # loop through the chain
for ((i=1; i < ${#bootstrap_commits[@]}; i++)) for ((i=$cached_index+1; i < ${#bootstrap_commits[@]}; i++))
do do
echo "building kalypso bootstrap part $i" echo "building kalypso bootstrap part $i"
echo "commit hash: ${bootstrap_commits[$i]}" echo "commit hash: ${bootstrap_commits[$i]}"
@@ -81,6 +110,8 @@ else
mv ./krakenGrammer.kgm krakenGrammer.kgm_new mv ./krakenGrammer.kgm krakenGrammer.kgm_new
mv ./krakenGrammer.kgm_old krakenGrammer.kgm mv ./krakenGrammer.kgm_old krakenGrammer.kgm
./${kraken}_bootstrap kraken.krak ${kraken}_bootstrap ./${kraken}_bootstrap kraken.krak ${kraken}_bootstrap
mkdir "../cached_builds/${bootstrap_commits[$i]}"
cp "./kraken.krak.c" "../cached_builds/${bootstrap_commits[$i]}/"
mv ./krakenGrammer.kgm_new krakenGrammer.kgm mv ./krakenGrammer.kgm_new krakenGrammer.kgm
done done
popd # out of bootstrap popd # out of bootstrap

View File

@@ -597,13 +597,13 @@ obj table (Object, Serializable) {
else else
items[from_state].set(cleaned_symbol, vector::vector(action(action_type::accept(), 0))) items[from_state].set(cleaned_symbol, vector::vector(action(action_type::accept(), 0)))
} }
fun get(state: int, on_symbol: symbol::symbol): vector::vector<action> { fun get(state: int, on_symbol: ref symbol::symbol): vector::vector<action> {
var cleaned_symbol = clean_symbol(on_symbol) var cleaned_symbol = clean_symbol(on_symbol)
if (items[state].contains_key(cleaned_symbol)) if (items[state].contains_key(cleaned_symbol))
return items[state][cleaned_symbol] return items[state][cleaned_symbol]
return vector::vector<action>() return vector::vector<action>()
} }
fun get_shift(state: int, on_symbol: symbol::symbol): action { fun get_shift(state: int, on_symbol: ref symbol::symbol): action {
var actions = get(state, on_symbol) var actions = get(state, on_symbol)
for (var i = 0; i < actions.size; i++;) for (var i = 0; i < actions.size; i++;)
if (actions[i].act == action_type::push()) if (actions[i].act == action_type::push())
@@ -615,7 +615,7 @@ obj table (Object, Serializable) {
io::println(on_symbol.to_string()) io::println(on_symbol.to_string())
return action(action_type::invalid(),-1) return action(action_type::invalid(),-1)
} }
fun get_reduces(state: int, on_symbol: symbol::symbol): vector::vector<action> { fun get_reduces(state: int, on_symbol: ref symbol::symbol): vector::vector<action> {
return get(state, on_symbol).filter(fun(act: action):bool { return act.act == action_type::reduce(); }) return get(state, on_symbol).filter(fun(act: action):bool { return act.act == action_type::reduce(); })
} }
fun print_string() { fun print_string() {