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