#!/bin/bash
export CALIBRE_HOME=/usr/local/google/edatools/mentor/calibre/2018.4.34.26/aoj_cal_2018.4_34.26/
export MGC_TMPDIR=/tmp
export MGC_CALIBRE_LAYOUT_TMP_FILE=/tmp/query_results
export CALIBRE_DISABLE_RHEL5_WARNING=1
export USE_CALIBRE_VCO=aoj
export CALIBRE_VERSION_DASH=2018.4_34.26
export CALIBRE_VERSION_DOT=$(echo $CALIBRE_VERSION_DASH | sed -e's/_/./')
export MGC_HOME=/usr/local/google/edatools/mentor/calibre/$CALIBRE_VERSION_DOT/aoj_cal_$CALIBRE_VERSION_DASH/
export PATH=${MGC_HOME}/bin:${PATH}
export MGLS_LICENSE_FILE=1817@gchips-licenses.corp.google.com
export LM_LICENSE_FILE=1717@gchips-licenses.corp.google.com
export PDK_VERSION="V1.3.0"
export PDK_HOME="/data/pdks/skywater/s8/$PDK_VERSION"
export RUNSET_DIR="$PDK_HOME/DRC/Calibre"
if [ -z $VERSION ];then
    echo "Missing VERSION"
    exit 1
fi
export TEST_DIR=/usr/local/google/home/tansell/work/openflow-drc-tests/
export JOB_HOME=$TEST_DIR/torture_tests/$VERSION/
if [ ! -d "$JOB_HOME" ]; then
    echo "$JOB_HOME doesn't exist?"
    exit 1
fi
for GDS_FILE in $JOB_HOME/*.gds; do
    export JOB_NAME="$(basename -s .gds $GDS_FILE)"
    # export JOB_NAME=s8pir_10r_vcells_lvs
    # export JOB_NAME=torture_test_s8
    echo
    echo
    echo
    echo "export JOB_HOME='$JOB_HOME'"
    echo "export JOB_NAME='$JOB_NAME'"
    echo "====================================="
    if [ ! -e $JOB_HOME/$JOB_NAME.gds ]; then
        echo "Did not find '$JOB_HOME/$JOB_NAME.gds'"
        exit 1
    fi
    set -x
    cd $TEST_DIR
    git checkout HEAD $TEST_DIR/runsets/*_runset
    #sed -i -e"s@\$JOB_HOME@$JOB_HOME@" $TEST_DIR/runsets/*_runset
    cd ~/github/google/skywater-pdk/s8/$PDK_VERSION
# No-PEX extraction (ugly)
    export LAYOUT_PRIMARY="$JOB_NAME"
    export LAYOUT_PATH="$JOB_HOME/$JOB_NAME.gds"
    export LAYOUT_NAME=$LAYOUT_PRIMARY
    export LVS_RUNSET_DIR="$PDK_HOME/LVS/Calibre"
    echo -en "LAYOUT SYSTEM GDSII\nLAYOUT PRIMARY $LAYOUT_PRIMARY\nLAYOUT PATH \"$LAYOUT_PATH\"\nERC RESULTS DATABASE "ercdb"\nINCLUDE $LVS_RUNSET_DIR/lvsRules_s8" > spice_runset
# end no-PEX extraction
# V2LVS flow
    if [ -e $JOB_HOME/$JOB_NAME.v ] ; then
           if compgen -G "${JOB_HOME}/library_*.cdl" > /dev/null; then
               cat $JOB_HOME/library_*.cdl > $JOB_HOME/libraries.cdl
           else
               echo "* empty libraries" > $JOB_HOME/libraries.cdl
           fi
           # converts a verilog structural netlist to a SPICE-like netlist for LVS
           v2lvs -v $JOB_HOME/$JOB_NAME.v -o $JOB_HOME/${JOB_NAME}_v2lvs.spice -s $JOB_HOME/libraries.cdl > $JOB_HOME/$JOB_NAME.v2lvs.log 2>&1 || true
           cp $JOB_HOME/${JOB_NAME}_v2lvs.spice $JOB_HOME/$JOB_NAME.cdl
    fi
# end V2LVS flow
    #########################################################
    # Disabling those to speed things up for LVS for now:
    #########################################################
    # calibre -gui -drc -runset $TEST_DIR/runsets/s8_drc_runset     -batch > $JOB_HOME/$JOB_NAME.drc_runset.log     2>&1
    # calibre -gui -drc -runset $TEST_DIR/runsets/s8_fill_runset    -batch > $JOB_HOME/$JOB_NAME.fill_runset.log    2>&1
    # calibre -gui -drc -runset $TEST_DIR/runsets/s8_latchup_runset -batch > $JOB_HOME/$JOB_NAME.latchup_runset.log 2>&1
    # calibre -gui -drc -runset $TEST_DIR/runsets/s8_lures_runset   -batch > $JOB_HOME/$JOB_NAME.lures_runset.log   2>&1
    # calibre -gui -drc -runset $TEST_DIR/runsets/s8_soft_runset    -batch > $JOB_HOME/$JOB_NAME.soft_runset.log    2>&1
    # calibre -gui -drc -runset $TEST_DIR/runsets/s8_stress_runset  -batch > $JOB_HOME/$JOB_NAME.stress_runset.log  2>&1


    # remove fill cells and tap cells from the source netlist before LVS
    [ -f $JOB_HOME/$JOB_NAME.cdl ] && \
        python $TEST_DIR/scripts/remove_spice_instances.py \
        $JOB_HOME/$JOB_NAME.cdl \
        sky130_fd_sc_hd__fill sky130_fd_sc_hvl__fill sky130_fd_sc_hd__tapvpwrvgnd_1 \
        > $JOB_HOME/$JOB_NAME.remove_spice_instances.log 2>&1

    [ -f $JOB_HOME/$JOB_NAME.cdl ] && cp $JOB_HOME/$JOB_NAME.cdl $JOB_HOME/$JOB_NAME.lvs_source.cdl

    # patch the LVS rules to avoid the need for polycuts
    cp $PDK_HOME/LVS/Calibre/lvsRules_s8 $PDK_HOME/LVS/Calibre/lvsRules_s8.bk
    cp $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm.bk

    sed -i "/^POLY_cond_nrc =/s/q9xuhrpoly_0p69_sub/xuhrpoly_0p69_sub/g" $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm

    cp $PDK_HOME/LVS/Calibre/lvsRules_s8 $JOB_HOME
    cp $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm $JOB_HOME

    timeout 10800 calibre -gui -lvs -runset $TEST_DIR/runsets/s8_lvs_runset     -batch > $JOB_HOME/$JOB_NAME.lvs_runset.log     2>&1

    # restore the originals
    mv $PDK_HOME/LVS/Calibre/lvsRules_s8.bk $PDK_HOME/LVS/Calibre/lvsRules_s8
    mv $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm.bk $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm 

    # layout extraction
    #########################################################
    # Disabling those to speed things up for LVS for now:
    #########################################################
    # calibre -spice ${VERSION}.cdl spice_runset > $JOB_HOME/$JOB_NAME.extract.runset.log 2>&1
    # mkdir $JOB_HOME/extract
    # mv lvs.rep.ext $JOB_HOME/extract/
    # mv ercdb $JOB_HOME/extract/
    # cp ${VERSION}.cdl $JOB_HOME/extract
    # mv ${VERSION}.cdl $JOB_HOME/
    # rm spice_runset

#    calibre -gui -pex -runset $TEST_DIR/runsets/s8_xRC_runset     -batch > $JOB_HOME/$JOB_NAME.xRC_runset.log     2>&1
    find $JOB_HOME -type f -exec sed -i -e's/... [0-9][0-9] [0-9 ][0-9]:[0-9][0-9]:[0-9][0-9] 2.../... XX XX:XX:XX 2.../' \{\} \+
done
exit 0
