#!/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
python quicklogic_timings_importer/remove-duplicated-wraps.py $OUTPUT_DIRECTORY/skywater-pdk/libraries/wrap
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

# Clean up Spice files
echo "-----Spice files cleanup-----"
python clean-spice-files.py .files.mod2files.spice.json $OUTPUT_DIRECTORY/skywater-pdk/libraries --path-prefix-to-remove $SKYWATER_NDA_PATH

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

echo '**** Generating .full.v files ****'
python verilog2full.py $SKYWATER_NDA_PATH $OUTPUT_DIRECTORY
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 '**** 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

