#!/bin/bash

DIR=$(cd ../..;pwd)
export PSMLDIR=${PSMLDIR:-$DIR}
export EXPAPPSDIR=${EXPAPPSDIR:-$DIR}

BU6502DIR=${PSMLDIR}/6502
BOCHSDIR=${PSMLDIR}/psml-bochs/bochs/REL_2_6_2_FINAL/bochs
COMPRESSDIR=${PSMLDIR}/compress
APPSDIR=${PSMLDIR}/apps

SWITCHAPP=${EXPAPPSDIR}/apps/switch

EXPTYPES=${EXPTYPES:-"jaswitch-6502-cc65"}
INPUTS=${INPUTS:-"simple.input"}

for EXPTYPE in $EXPTYPES; do
    for INPUT in $INPUTS; do
	export INPUT
	export EXPTYPE
	TS=$(date +'%d-%m-%y-%H-%M')

	EXP=${EXPTYPE}_${INPUT}_${TS}
	EXPDIR=${SWITCHAPP}/data/${EXP}

	mkdir -p ${EXPDIR}/bin
	mkdir -p ${EXPDIR}/src/compress
	make -C ${COMPRESSDIR} clean
	cd ${COMPRESSDIR}; find . -type f -name '*' -print | grep -v uthash | sed 's:./::' | tar zcf ${EXPDIR}/src/compress/compress.tar.gz -T -
	make -C ${COMPRESSDIR}/cst_v_1_1
	cp ${COMPRESSDIR}/cst_v_1_1/TestPSML ${EXPDIR}/bin
	if [[ "$EXPTYPE" == *6502* ]]; then
	    make -C ${COMPRESSDIR} 6502act-getdict
	    cp ${COMPRESSDIR}/6502act-getdict ${EXPDIR}/bin
	    mkdir -p ${EXPDIR}/src/6502
	    make -C ${BU6502DIR} clean
	    cd ${BU6502DIR}; find . -type f -name '*' -print | grep -v ./ext/ | grep -v ./apps/ | grep -v ./grade/ | grep -v ./writeup/ | grep -v ./fibexp/ | sed 's:./::' | tar zcf ${EXPDIR}/src/6502/6502.tar.gz -T -
	    make -C ${BU6502DIR} 6502
	    cp ${BU6502DIR}/6502 ${EXPDIR}/bin
	    make -C ${BU6502DIR}/ext install
	    cp ${BU6502DIR}/ext/install/bin/* ${EXPDIR}/bin
	elif [[ "$EXPTYPE" == *bochs* ]]; then
	    make -C ${COMPRESSDIR} bochs32act-getdict
	    cp ${COMPRESSDIR}/bochs32act-getdict ${EXPDIR}/bin
	    mkdir -p ${EXPDIR}/src/bochs
	    #make -C ${BOCHSDIR} distclean
	    cd ${BOCHSDIR}; find . -type f -name '*.[hc]' -print -o -name '*.cc' -print -o -name 'config.log' -print -o -name 'Makefile' -print | sed 's:./::' | tar zcf ${EXPDIR}/src/bochs/bochs.tar.gz -T -
	    make -C ${BOCHSDIR} bochs
	    cp ${BOCHSDIR}/bochs ${EXPDIR}/bin
	fi

	mkdir ${EXPDIR}/inputs
	cp ${SWITCHAPP}/inputs/${INPUT} ${EXPDIR}/inputs
	cd ${SWITCHAPP}/${EXPTYPE}
	if [[ "$EXPTYPE" == *6502-cc65* ]]; then
	    cp -r ${APPSDIR}/cc65lib ${EXPDIR}
     	    find . ! -name . -prune -type f -name '*.[hc]' -print -o -name '*.cfg' -print | while read srcfile; do cp $srcfile ${EXPDIR}/inputs; done
	    cp ${APPSDIR}/makefiles/6502-cc65_img.mk ${EXPDIR}/inputs/Makefile
	elif [[ "$EXPTYPE" == *6502-figforth* ]]; then
	    cp ${SWITCHAPP}/common/switch-fig.s ${EXPDIR}/inputs
     	    find . ! -name . -prune -type f -name '*.s' -print -o -name '*.cfg' -print | while read srcfile; do cp $srcfile ${EXPDIR}/inputs; done
	    cp ${APPSDIR}/makefiles/6502-figforth_img.mk ${EXPDIR}/inputs/Makefile
	elif [[ "$EXPTYPE" == *bochs32-newlib* ]]; then
	    cp -r ${APPSDIR}/newlibsys ${EXPDIR}
     	    find . ! -name . -prune -type f -name '*.[hc]' -print -o -name '*.bochsrc' -print | while read srcfile; do cp $srcfile ${EXPDIR}/inputs; done
	    cp ${APPSDIR}/makefiles/bochs32-newlib_bin.mk ${EXPDIR}/inputs/Makefile
	    cp ${PSMLDIR}/psml-bochs/bios/protected_bios.s ${EXPDIR}/inputs
	    ln -s ${EXPDIR}/inputs/${INPUT} ${EXPDIR}/inputs/${EXPTYPE}.in
	fi
	make -C ${EXPDIR}/inputs all

        mkdir ${EXPDIR}/outputs
        cp ${APPSDIR}/scripts/outputs/* ${EXPDIR}/outputs
    done
done
