#!/bin/bash

export RUNSET_DIR=$(cd ./V1.3.0/PEX/xRC; pwd)
export PDK_HOME=$(cd ./V1.3.0; pwd)
export LOG
export JOB_NAME  
export JOB_HOME
export PEX_HANDLE=".pex.spice"
export PXI_HANDLE=".pxi.spice"
export FILE_OUT=./output/${VARIANT}

#Sets the LOG variable and creates the log directory if it doesn't exist.
if [ ! -d "$FILE_OUT/log" ]; then
    mkdir -p $FILE_OUT/log
    LOG=$FILE_OUT/log
else
    LOG=$FILE_OUT/log
fi

#Removes the outputs if the script is run again. Otherwise it creates the output directory and all of its subdirectories
if [ ! -d "$FILE_OUT" ]; then
    echo "Making output directory...."
    mkdir -p $FILE_OUT/{report,ext,spice}
else
    echo "Building Directories...."
    mkdir -p $FILE_OUT/{report,ext,spice}
fi

#If the gds files weren't generated, this if statement extracts all of the gds files from the cells within the lib folder. 
if [ ! -d "../lib/gds" ]; then
	cd ../lib
    make magic
	cd -
fi 


cd ../lib/gds
JOB_HOME=$PWD 
cd -


if [ ! -z "$1" ]; then
	export i=$(echo $1 | cut -f 1 -d '.') #i is used as the input variable 
else 
	export i="$(basename -s .gds $(ls $JOB_HOME/*.gds))" #i is used as the input variable
fi

#Loops through the input gds files. If no user input is supplied, all gds files are put through the DRC process. 
for JOB_NAME in $i ; do 

#Checks to make sure the file supplied exists. If not, then it exits the bash script.
if [ ! -e $JOB_HOME/$JOB_NAME.gds ]; then 	echo "Did not find '$JOB_HOME/$JOB_NAME.gds'"
	exit 1
fi

echo -e "\nexport JOB_HOME='$JOB_HOME'"
echo -e "export JOB_NAME='$JOB_NAME'"
echo -e "====================================="

set -x #Turns on debugging

echo $PDK_HOME

calibre -gui -pex -runset $RUNSET_DIR/s8_xRC_runset     -batch > $LOG/s8_pex_runset.log     2>&1

set +x #Turns off debugging

done #End of the loop

#The two loops immediately below will go through the produced PEX and PXI files and correct their naming convention before moving them to the specified path
for file in ./*.pxi; do
    NAME_1="$(basename "$file")"
    NAME_2=${NAME_1%.*}
    NAME_3=${NAME_2%.*} #USED FOR PXI FILES ONLY
    BASE=${NAME_3%.*}
    mv $NAME_1 $BASE$PXI_HANDLE
done

for file in ./*.pex; do
    NAME_1="$(basename "$file")"
    NAME_2=${NAME_1%.*}
    BASE=${NAME_2%.*}
    mv $NAME_1 $BASE$PEX_HANDLE
done

sed -i 's/.spice.pex/.pex.spice/g' *.spice
sed -i 's/.spice..*.pxi/.pxi.spice/g' *.spice

mkdir $FILE_OUT/spice
mkdir $FILE_OUT/report

mv *.spice  $FILE_OUT/spice
mv *.report $FILE_OUT/report

echo "Moving output files to ./output"
mv -v *.ext $FILE_OUT/ext/
mv -v *erc* $FILE_OUT
mv -v  _xrcControlFile_s8_ $FILE_OUT
mv -v svdb/ $FILE_OUT
mv -v *bat* $FILE_OUT

#mv -v *.report ./output/report/
#mv -v *.pex ./output/pex/
#mv -v *.spice ./output/spice/
#mv -v *.pxi ./output/pxi/
#mv -v *.ext ./output/ext/
#mv -v *erc* ./output/
#mv -v  _xrcControlFile_s8_ ./output/
#mv -v svdb/ ./output/
#mv -v *bat* ./output/

exit 0
