#!/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=1
      # 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=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
        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
#
