#!/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
export PDK_HOME2=$TEST_DIR/pdk/skywater/s8/V1.3.0-mr
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=0
    run_drc=1

    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
        export RUNSET=$RUNSET_DIR/s8_drcmr_runset   # <-- then why earlier RUNSET=... ?
        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
#
