#!/bin/bash
#
##################################################################################################################
##DO NOT CHANGE ANY OF THE BELOW BETWEEN THE TWO DO NOT CHANGE LINES #############################################
##################################################################################################################

if [ -z "$MGLS_LICENSE_FILE" ]; then
    echo "Missing MGLS_LICENSE_FILE"
    exit 1
fi
if [ -z "$LM_LICENSE_FILE" ]; then
    echo "Missing LM_LICENSE_FILE"
    exit 1
fi
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}
#
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/
export PDK_HOME=$TEST_DIR/pdk/skywater/s8/V2.0.1
if [ ! -d "$JOB_HOME" ]; then
    echo "$JOB_HOME doesn't exist?"
    exit 1
fi

# see OASIS NOTES at EOF
for GDS_FILE in $JOB_HOME/gds/*.{gds,oas}{,.gz,.lz,.xz}; do
	if [ ! -e "$GDS_FILE" ]; then
		continue # above brace-expansion keeps non-existent star forms: '.../*.gds.gz'
	fi

	# check for ambiguity(error); and optionally decompress.
	# Keep source & decompress to a .gds/.oas in parallel; and afterwards delete .gds/.oas.
	# This due to suspicion TEST_DIR or JOB_HOME elsewhere/later subject to a 'git add --all',
	# which would commit (intended temporary) uncompressed files. Better would be decompress
	# to a scratch-dir that is git-ignored or outside of TEST_DIR; but without visibility
	# into rest of system not clear if works to restructure use of (exports)JOB_HOME,JOB_NAME.
	GDS_BASE=${GDS_FILE%.xz}
	GDS_BASE=${GDS_BASE%.lz}
	GDS_BASE=${GDS_BASE%.gz}
	GDS_FILEX=${GDS_BASE}.xz
	GDS_FILEL=${GDS_BASE}.lz
	GDS_FILEG=${GDS_BASE}.gz

	export JOB_EXT=gds
	export LAYOUT_SYSTEM=GDSII
	GDS_BASE2=${GDS_BASE%.$JOB_EXT}.oas      # opposing variant for .gds
	DRC_RS_BASE=base
	unset LAYSYS_OASIS    # so runset (via preprocessor) selects: 'LAYOUT SYSTEM GDSII'

	if [[ "$GDS_BASE" == *.oas ]]; then
	    export JOB_EXT=oas
	    export LAYOUT_SYSTEM=OASIS
	    GDS_BASE2=${GDS_BASE%.$JOB_EXT}.gds  # opposing variant for .oas
	    export LAYSYS_OASIS=1  # so runset (via preprocessor) selects: 'LAYOUT SYSTEM OASIS'
	fi
	GDS_FILEX2=${GDS_BASE2}.xz    # compressed opposing variants
	GDS_FILEL2=${GDS_BASE2}.lz
	GDS_FILEG2=${GDS_BASE2}.gz
	GDS_DEL=""
	nbr=0
	[ -e "$GDS_BASE"  ] && (( nbr++ ))
	[ -e "$GDS_FILEX" ] && (( nbr++ ))
	[ -e "$GDS_FILEL" ] && (( nbr++ ))
	[ -e "$GDS_FILEG" ] && (( nbr++ ))
	[ -e "$GDS_BASE2"  ] && (( nbr++ ))
	[ -e "$GDS_FILEX2" ] && (( nbr++ ))
	[ -e "$GDS_FILEL2" ] && (( nbr++ ))
	[ -e "$GDS_FILEG2" ] && (( nbr++ ))
	if [[ $nbr != 1 ]]; then
		echo "$GDS_FILE ambiguous, $nbr variants (.gds/.oas with/without .gz/.lz/.xz)"
		continue
	fi
	if [ -e "$GDS_FILEX" ]; then
		unxz -c <"$GDS_FILE" >"$GDS_BASE"
		stat=$?
		if [[ "$stat" != 0 ]]; then
		    echo "Failed($stat) to: unxz --force $GDS_FILE"
		    continue
		fi
		echo "completed: unxz --force $GDS_FILE"
		GDS_FILE="$GDS_BASE"
		GDS_DEL="$GDS_BASE"
	fi
	if [ -e "$GDS_FILEL" ]; then
		lzip -cd <"$GDS_FILE" >"$GDS_BASE"
		stat=$?
		if [[ "$stat" != 0 ]]; then
		    echo "Failed($stat) to: lzip -d --force $GDS_FILE"
		    continue
		fi
		echo "completed: lzip -d --force $GDS_FILE"
		GDS_FILE="$GDS_BASE"
		GDS_DEL="$GDS_BASE"
	fi
	if [ -e "$GDS_FILEG" ]; then
		gunzip -c <"$GDS_FILE" >"$GDS_BASE"
		stat=$?
		if [[ "$stat" != 0 ]]; then
		    echo "Failed($stat) to: gunzip --force $GDS_FILE"
		    continue
		fi
		echo "completed: gunzip --force $GDS_FILE"
		GDS_FILE="$GDS_BASE"
		GDS_DEL="$GDS_BASE"
	fi

    export JOB_NAME="$(basename -s .$JOB_EXT $GDS_FILE)"     # extension: .gds or .oas
    echo
    echo
    echo
    echo "export JOB_HOME='$JOB_HOME'"
    echo "export JOB_NAME='$JOB_NAME'"
    echo "====================================="
    if [[ ! -e $JOB_HOME/gds/$JOB_NAME.gds && ! -e $JOB_HOME/gds/$JOB_NAME.oas ]]; then
	echo "Did not find '$JOB_HOME/gds/$JOB_NAME.gds' or '$JOB_HOME/gds/$JOB_NAME.oas'"
        exit 1
    fi
    set -x
    cd $TEST_DIR
    git checkout HEAD $TEST_DIR/runsets/*_runset  ## TBD: does this do anything? or just fail with error?
    #sed -i -e"s@\$JOB_HOME@$JOB_HOME@" $TEST_DIR/runsets/*_runset
    cd ~/github/google/skywater-pdk/s8/V1.3.0

    ##################################################################################################################
    ##DO NOT CHANGE ANY OF THE ABOVE #################################################################################
    ##################################################################################################################

    ##################################################################################################################
    # Directories
    ##################################################################################################################

    mkdir -p $JOB_HOME/logs
    mkdir -p $JOB_HOME/lvs
    mkdir -p $JOB_HOME/spef
    mkdir -p $JOB_HOME/cdl
    mkdir -p $JOB_HOME/drc
    mkdir -p $JOB_HOME/ant

    ##################################################################################################################
    # Variables needed by  $TEST_DIR/runsets/local_xrc_rules.2
    ##################################################################################################################

    export JOB_HOME=$JOB_HOME
    export JOB_NAME=$JOB_NAME
    export LAYOUT_NAME=$JOB_NAME.$JOB_EXT    # <-- parameterized ext: gds or oas
    export LAYOUT_EXTRACTED=$JOB_NAME.extracted.cdl
    export SOURCE_NAME=$JOB_NAME.source.cdl
    export LVS_REPORT=report.lvs
    export PEX_NETLIST=$JOB_NAME.spef

    export LAYOUT_PATH=$JOB_HOME/gds/$LAYOUT_NAME
    export SOURCE_PATH=$JOB_HOME/cdl/$SOURCE_NAME
    export LVS_REPORT_PATH=$JOB_HOME/lvs/$LVS_REPORT
    export PEX_NETLIST_PATH=$JOB_HOME/spef/$PEX_NETLIST
    export DRC_RESULTS_FILE=$JOB_HOME/drc/results.drc
    export ANT_RESULTS_FILE=$JOB_HOME/ant
    export DRC_SUMMARY_REPORT=$JOB_HOME/drc/summary.drc
    export SVDB_PATH=$JOB_HOME/svdb
    ##################################################################################################################
    # Runset
    ##################################################################################################################
    sky130=1
    gf180=0
    if [ "$sky130" == "1" ]; then
        export RUNSET_DIR=$TEST_DIR/runsets/s8/V2.0.1
    fi
    if [ "$gf180" == "1" ]; then
        export RUNSET_DIR=$TEST_DIR/runsets/gf180
    fi
    export RUNSET=$RUNSET_DIR/LVS/base
    # export HCELLS=$RUNSET_DIR/LVS/hcells.txt
    export HCELLS=$RUNSET_DIR/hcells.txt
    export XCELLS=$RUNSET_DIR/xcells.txt

    export TECHDIR=$RUNSET_DIR/
    export baseDeckRev=Rev16

    ##################################################################################################################
    # V2LVS flow
    ##################################################################################################################


    run_lvs=0
      # all 1 for stdcell-based verilog source, all 0 for full-custom CDL source
      run_lvs_rcx=0    # <-- meaningful/used IFF $run_lvs==1
      run_lvs_box=0    # <-- meaningful/used IFF $run_lvs==1
      run_lvs_catclibs=0 # <-- meaningful/used IFF $run_lvs==1
    run_antenna_check=1
    run_drc=0

    if [ "$run_lvs" == "1" ]; then
        export RUNSET=$RUNSET_DIR/LVS/base
    fi
    if [ "$run_drc" == "1" ]; then
        export RUNSET=$RUNSET_DIR/DRC/base
    fi

    if [ "$run_lvs" == "1" ]; then
	unset DO_LVS_BOX   # so runset (via preprocessor) OMITS: INCLUDE .../bbox.<libName>.txt
	if [ "$run_lvs_box" == "1" ]; then
	    export DO_LVS_BOX=1  # so runset (via preprocessor) KEEPS: INCLUDE .../bbox.<libName>.txt
	fi

        if [ -e $JOB_HOME/verilog/$JOB_NAME.v ] ; then
            if [ ! -z "$(ls -A $JOB_HOME/cdl/)" ] ; then
                echo "Found cdls under $JOB_HOME/cdl/"
                cat $JOB_HOME/cdl/*.cdl > $JOB_HOME/cdl/libraries-merged.cdl
            fi
	    if [ "$run_lvs_catclibs" == "1" ]; then
		cat $TEST_DIR/libraries/cdl/*.cdl >> $JOB_HOME/cdl/libraries-merged.cdl
	    fi

            ## merge all verilog netlist
            for verilog_module in $JOB_HOME/verilog/*; do
                echo "" >> $verilog_module
            done
            for verilog_module in $JOB_HOME/verilog/box/*; do
                echo "" >> $verilog_module
            done
            touch $JOB_HOME/cdl/box.cdl
            mkdir -p $JOB_HOME/verilog/box
            cat $JOB_HOME/verilog/box/* >> $JOB_HOME/verilog/box/merged.v
            cat $JOB_HOME/verilog/* >> $JOB_HOME/verilog/verilog-merged.v
            ##converts a verilog structural netlist to a SPICE-like netlist for LVS

            verilog_input=$JOB_HOME/verilog/$JOB_NAME.v
            # verilog to spice with bus delimeter = "<>"
            v2lvs -v $JOB_HOME/verilog/box/merged.v -o $JOB_HOME/cdl/box.cdl -e
            v2lvs -a "<>" -w 2 -v $JOB_HOME/verilog/verilog-merged.v -o $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl \
                -s $JOB_HOME/cdl/libraries-merged.cdl -s $JOB_HOME/cdl/box.cdl \
                2>&1 | tee $JOB_HOME/logs/$JOB_NAME.busworkaround.v2lvs.log  || true

            # -e Specifies that empty .SUBCKT definitions are generated for all modules (no
            # instances are translated). This is useful for generating “black box” subcircuits
            # from library files. See Using the –e Switch to Create LVS Box Subcircuits
            # later in this chapter.
    #        v2lvs -e -a "<>" -w 2 -v $verilog_input -o $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl \
    #            | tee $JOB_HOME/logs/$JOB_NAME.busworkaround.v2lvs.log  || true

            ## escape square brackets that are not buses
            ## then replace <> buses with []
            sed 's/\[/\\[/g' -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl
            sed 's/\]/\\]/g' -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl
            sed 's/</\[/g'   -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl
            sed 's/>/\]/g'   -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl

            export SOURCE_NAME=$JOB_NAME.busworkaround.source.cdl
            export SOURCE_PATH=$JOB_HOME/cdl/$SOURCE_NAME

            # just keep this to compare with the workaround
            v2lvs -w 2 -v $verilog_input -o $JOB_HOME/cdl/$JOB_NAME.source.cdl \
            -s $JOB_HOME/cdl/libraries-merged.cdl 2>&1 | tee $JOB_HOME/logs/$JOB_NAME.v2lvs.log  || true
            #cp $JOB_HOME/cdl/$JOB_NAME.source.cdl $JOB_HOME/cdl/${SOURCE_NAME}


        else
            if [ ! -z "$(ls -A $JOB_HOME/cdl/$JOB_NAME.cdl)" ] ; then
		if [ "$run_lvs_catclibs" == "1" ]; then
                    echo ".INCLUDE $JOB_HOME/cdl/libraries-merged.cdl" >> $JOB_HOME/cdl/${SOURCE_NAME}
		fi
                cat $JOB_HOME/cdl/$JOB_NAME.cdl >> $JOB_HOME/cdl/${SOURCE_NAME}
            fi
	    if [ "$run_lvs_catclibs" == "1" ]; then
		cat $TEST_DIR/libraries/cdl/*.cdl   >> $JOB_HOME/cdl/libraries-merged.cdl
	    fi
        fi
    fi

    ## end V2LVS flow

    ##################################################################################################################
    # Remove fill cells and tap cells from the source netlist before LVS
    ##################################################################################################################

    #    [ -f $JOB_HOME/cdl/$JOB_NAME.source.cdl ] && \
    #        cp $JOB_HOME/cdl/$JOB_NAME.source.cdl $JOB_HOME/cdl/$JOB_NAME.v2lvs.unfiltered.cdl
    #        python3 $TEST_DIR/scripts/remove_spice_instances.py $JOB_HOME/cdl/$JOB_NAME.source.cdl \
    #            sky130_fd_sc_hd__fill_1 \
    #            sky130_fd_sc_hd__fill_2 \
    #            sky130_fd_sc_hd__tapvpwrvgnd_1 \
    #            > $JOB_HOME/logs/$JOB_NAME.remove_spice_instances.log 2>&1

    # extra runset rules per JOB_HOME
    mkdir -p $JOB_HOME/runset
    touch $JOB_HOME/runset/custom

    ##################################################################################################################
    # Run Calibre LVS/XRC
    ##################################################################################################################

    if [ "$run_drc" == "1" ]; then
        calibre -drc -hier $RUNSET 2>&1 | tee $JOB_HOME/logs/drc.log
    fi
    if [[ "$run_lvs" == "1" && "$run_lvs_rcx" == "0" ]]; then
        export RUNSET=$RUNSET_DIR/base   # <-- then why earlier RUNSET=... ?
        calibre -lvs $RUNSET -spice $JOB_HOME/cdl/$LAYOUT_EXTRACTED -hier 2>&1 | tee $JOB_HOME/logs/lvs.log
    fi

    if [ "$run_antenna_check" == "1" ]; then
        export RUNSET=$RUNSET_DIR/s8_latchup_runset
        calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/latchup.log 2>&1
    fi

    ##calibre -hier -64 -hyper -turbo -hcell $TEST_DIR/runsets/hcells.sky130_fd_sc_hd.txt -spice $JOB_HOME/cdl/$JOB_NAME.extracted.cdl $TEST_DIR/runsets/local_xrc_rules.2
    if [[ "$run_lvs" == "1" && "$run_lvs_rcx" == "1" ]]; then
        export RUNSET=$RUNSET_DIR/base   # <-- then why earlier RUNSET=... ?
        calibre -lvs -hier -hcell $HCELLS -spice \
        $JOB_HOME/cdl/$LAYOUT_EXTRACTED $RUNSET \
          | tee $JOB_HOME/logs/lvs.log
        calibre -xrc -phdb -hcell $HCELLS -rc \
        $RUNSET \
          | tee $JOB_HOME/logs/phdb.log
        calibre -xrc -pdb -xcell $XCELLS -rc \
          $RUNSET \
          | tee $JOB_HOME/logs/pdb.log
        calibre -xrc -fmt -fmt_info -fmt_warnings $RUNSET \
          | tee $JOB_HOME/logs/fmt.log

        sed 's#//#DOUBLE_BACKSLASH#g' -i $PEX_NETLIST_PATH
        sed 's#DIVIDER /#DIVIDER DIVIDER_BACKSLASH#g' -i $PEX_NETLIST_PATH
        sed 's#/#\\/#g' -i $PEX_NETLIST_PATH
        sed 's#DOUBLE_BACKSLASH#//#g' -i $PEX_NETLIST_PATH
        sed 's#DIVIDER_BACKSLASH#/#g' -i $PEX_NETLIST_PATH
    fi

    # clean locally decompressed source-layout (so it avoids below 'find ... sed'; AND not checked-in to output* branch)
    if [ -n   "$GDS_DEL" ]; then
	rm -f "$GDS_DEL"
	echo "completed: rm -f $GDS_DEL"
    fi

    # calibre -lvs -hier -spice $JOB_HOME/cdl/$JOB_NAME.extracted.cdl $TEST_DIR/runsets/local_xrc_rules.2
    # calibre -xrc -phdb  -rc    $TEST_DIR/runsets/local_xrc_rules.2
    # calibre -xrc -pdb   -rc    $TEST_DIR/runsets/local_xrc_rules.2
    # calibre -xrc -fmt	     $TEST_DIR/runsets/local_xrc_rules.2

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


    #calibre -xrc -phdb -hcell $JOB_HOME/hcells.txt $PDK_HOME/LVS/Calibre/extLvsRules_s8_5lm
    #calibre -gui -pex  -runset $TEST_DIR/runsets/s8/V2.0.1/s8_xRC_runset     -batch > $JOB_HOME/$JOB_NAME.xRC_runset.log     2>&1
    #calibre -gui -lvs  -runset $TEST_DIR/runsets/s8_lvs_runset 	-batch > $JOB_HOME/$JOB_NAME.lvs_runset.log     2>&1
    #calibre --help > $JOB_HOME/$JOB_NAME.calibre--help.txt         2>&1

    ##################################################################################################################
    # No-PEX extraction then using it as an LVS source to pass before running extraction
    ##################################################################################################################

    #   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
    #
    #   calibre -spice $JOB_HOME/$JOB_NAME.extracted.cdlX 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 $JOB_HOME/$JOB_NAME.extracted.cdlX $JOB_HOME/extract/$JOB_NAME.extracted.cdlX
    #   cp spice_runset $JOB_HOME

    ##################################################################################################################
    # Run Calibre DRC
    ##################################################################################################################

    # 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

    ##################################################################################################################

    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
#
# Compression: Calibre supposed to NATIVELY support gds.gz & gds.Z compression schemes,
#   so why did we need to explicitly decompress 1st? Only for handling others (lz,xz)?
#
# OASIS NOTES: for OASIS (.oas) instead of GDSII (.gds):
#   [decompressed] gds-file : ends in .oas.
#   /runsets/ dir MAY become /runsets-oas/ which files embed (if not converted to IFDEF below):
#   (Or base switched for base-oas which embed):
#     *drcLayoutSystem: OASIS                   (instead of GDSII)
#     *drcLayoutPaths: $JOB_HOME/$JOB_NAME.oas  (instead of .gds)
#
# More than one of: .gds[.gz/.lz/.xz] .oas[.gz/.lz/.xz] is an error: ambiguous
#
# For runsets/gf180/DRC/base preprocessor (#IFDEF $LAYSYS_OASIS) switches between
#   LAYOUT SYSTEM GDSII   vs LAYOUT SYSTEM OASIS
# Is there a simpler way to directly substitute LAYOUT_SYSTEM from the shell-env like?:
# Following version has NOT been tried:
#      VARIABLE       LAYOUT_SYSTEM ENVIRONMENT
#      LAYOUT SYSTEM  LAYOUT_SYSTEM
#
# Wish to avoid extra oas-specific runsets files by export-ing env-vars LAYOUT_SYSTEM & JOB_EXT and:
#     *drcLayoutSystem: $LAYOUT_SYSTEM
#     *drcLayoutPaths: $JOB_HOME/$JOB_NAME.$JOB_EXT
#
