#!/bin/bash

# Example call
# $ ./build_skywater_pdk.sh /home/user/skywater-src-nda /home/user/output /home/user/tmpdir

set -e

SKYWATER_NDA_PATH=${1%/}
OUTPUT_DIRECTORY=${2%/}
TMP_DIRECTORY=${3%/}

# Check if programs installed are in required versions
if [ `which yosys |wc -l` -eq 0 ] || [ `yosys -p 'splitinout' 2>&1 |grep ERROR | wc -l` -eq 1 ]
then
    echo "Yosys not installed or installed in version which does not have the 'splitinout' pass"
    echo "Please install yosys from 'https://github.com/mithro/yosys/tree/split-inout'"
    exit
fi
if [ `which symbolator |wc -l` -eq 0 ] || [ `symbolator --help 2>&1 |grep 'libname' | wc -l` -lt 1 ]
then
    echo "Symbolator not installed or installed in version which does not have the 'libname' argument"
    echo "Please install symbolator from 'https://github.com/antmicro/symbolator' using 'python -m pip install git+https://github.com/antmicro/symbolator'"
    exit
fi

# Update paths file with path to skywater-src-nda repository
echo $SKYWATER_NDA_PATH > paths

# Create json files grouping src-nda files by mods
python files-list.py
python files-spice.py
python lib2mods.py
python spice2mods.py
python verilog2mods.py

# Clean Liberty files
ROOT_DIR=$(pwd)
cd liberty_parser
echo "-----Liberty-to-JSON-----"
python ../mod2files-json-to-filelist.py ../.files.mod2files.lib.json $TMP_DIRECTORY/lib.list
python quicklogic_timings_importer/test_full_pipeline.py $TMP_DIRECTORY/lib.list --log-suppress-below ERROR --output-json-root-dir $TMP_DIRECTORY/out-json --skip-json-to-lib
echo "-----JSON-to-Liberty groups-----"
python quicklogic_timings_importer/group_cells.py ../.files.mod2files.lib.json $OUTPUT_DIRECTORY/skywater-pdk/libraries --json-path $TMP_DIRECTORY/out-json --path-prefix-to-remove "$TMP_DIRECTORY/out-json/$SKYWATER_NDA_PATH" --log-suppress WARNING --sourcetodests $TMP_DIRECTORY/group_cells.filemapping.json
cd $ROOT_DIR

# Extract timings from verilog
echo "-----Verilog-specify-to-Liberty-----"
python parse_specify_from_filelist.py .files.mod2files.verilog.json $OUTPUT_DIRECTORY/skywater-pdk/libraries --path-prefix-to-remove $SKYWATER_NDA_PATH --sourcetodests $TMP_DIRECTORY/parse_specify_from_filelist.filemapping.json

echo '**** Generating .full.v files ****'
python verilog2full.py $SKYWATER_NDA_PATH $OUTPUT_DIRECTORY $TMP_DIRECTORY/verilog2full.filemapping.json
echo '****  Split merged .full.v files ****'
python verilog_split.py $OUTPUT_DIRECTORY $TMP_DIRECTORY/verilog_split.filemapping.json
echo '**** Removing strength "twins" ****'
python merge-cells-with-different-strengths.py $OUTPUT_DIRECTORY
echo '**** Generating .simple.v files ****'
python verilog2simple.py $OUTPUT_DIRECTORY
echo '**** Creating temporary base cells lists ****'
pushd $OUTPUT_DIRECTORY
for x in `find . -type d -name 'V[0-9].[0-9].[0-9]'`
do
    pushd $x > /dev/null
    >.base
    modules=()
    touch temp
    mapfile -t modules < <( grep -r -E --include=*.simple.v '^[ ]*sky130\w*? ' |cut -d ':' -f 2 | sed 's/^ *//g' | cut -d ' ' -f 1| sort |uniq )
    mapfile -t -O "${#modules[@]}" modules < <( grep -r -E --include=*.simple.v '^[ ]*(pg_)?[u]_\w*? ' |cut -d ':' -f 2 | sed 's/^ *//g' | cut -d ' ' -f 1| sort |uniq )
    for mod in "${modules[@]}"
    do
        echo $mod
        realpath `grep -r -E --include "*.simple.v" -l "^module ${mod}[\( ]" ` | grep -v 'stubs_' | sort -r | grep -v '\.\w*\.simple\.v' |head -n 1 >> temp
    done
    sort temp |uniq >.base
    rm temp
    popd > /dev/null
done
popd > /dev/null

echo '**** Generating .blackbox.v files ****'
python verilog2blackbox.py $OUTPUT_DIRECTORY
echo '**** Generating .sch.png files ****'
python verilog2sch.py $OUTPUT_DIRECTORY
echo '**** Generating .module.png files ****'
python verilog2symbol.py $OUTPUT_DIRECTORY
echo '**** Rewriting .lef files ****'
python lef_rewrite.py $SKYWATER_NDA_PATH $OUTPUT_DIRECTORY $TMP_DIRECTORY/lef_rewrite.filemapping.json
echo '**** Renaming and cleaning ****'
pushd $OUTPUT_DIRECTORY > /dev/null
shopt -s globstar
# Rename module diagrams from '.png' to '.module.png'
for x in `ls **/*[^s][^c][^h].png`
    do mv $x ${x%.png}.module.png
done
# Remove .base files
rm **/.base
popd > /dev/null > /dev/null

# Clean up Spice files
echo "-----Spice files cleanup-----"
python clean_spice_files.py .files.mod2files.spice.json $OUTPUT_DIRECTORY/skywater-pdk/libraries .files.mod2files.spice.unassigned --path-prefix-to-remove $SKYWATER_NDA_PATH --sourcetodests $TMP_DIRECTORY/clean_spice_files.filemapping.json --fileswithoutincludes $TMP_DIRECTORY/clean_spice_files_missing_includes.txt

echo "-----PM3-to-CSV conversion-----"
python convert_pm3_to_csv.py $OUTPUT_DIRECTORY/skywater-pdk/libraries 2>$TMP_DIRECTORY/convert_pm3_to_csv.err --sourcetodests $TMP_DIRECTORY/convert_pm3_to_csv.filemapping.json

# Directory cleanup
find $OUTPUT_DIRECTORY/skywater-pdk/libraries -type d -empty -delete
