#!/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 VERILOG=$TEST_DIR/verilog
export CDL=$TEST_DIR/cdl
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 $VERILOG/$JOB_NAME.v ] ; then
           if compgen -G "${CDL}/library_*.cdl" > /dev/null; then
               cat $CDL/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 $VERILOG/$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



    # remove fill cells and tap cells from the source netlist before LVS
    [ -f $JOB_HOME/$JOB_NAME.cdl ] && \
        python3 $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 


    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
