#!/bin/bash

# Copyright (c) Efabless Corporation. All rights reserved.
# See LICENSE file in the project root for full license information.

path=$1
# This assumes that all these files exist
tritonRoute_log="${path}/logs/routing/tritonRoute.log"
yosys_rprt=${path}/reports/synthesis/yosys_*.stat.rpt
runtime_rpt=${path}/reports/runtime.txt
wns_rpt=${path}/reports/synthesis/opensta_wns.rpt
HPWL_rpt=${path}/reports/placement/replace_hpwl.rpt
yosys_log=${path}/logs/synthesis/yosys.log

cell_count=$(cat ${yosys_rprt} | grep "cells" | sed -r 's/.*[^0-9]//')
if ! [[ $cell_count ]]; then cell_count=-1; fi
runtime=$(sed 's/.*in //' $runtime_rpt)
if ! [[ $runtime ]]; then runtime=-1; fi
violations=$(grep "number of violations" $tritonRoute_log | tail -1 | sed -r 's/.*[^0-9]//')
if ! [[ $violations ]]; then violations=-1; fi
wire_length=$(grep "total wire length =" $tritonRoute_log | tail -1 | sed -r 's/[^0-9]*//g')
if ! [[ $wire_length ]]; then wire_length=-1; fi
vias=$(grep "total number of vias =" $tritonRoute_log | tail -1 | sed -r 's/[^0-9]*//g')
if ! [[ $vias ]]; then vias=-1; fi
wns=$(grep "wns" $wns_rpt | sed -r 's/wns //')
if ! [[ $wns ]]; then wns=-1; fi
hpwl=$(cat $HPWL_rpt)
if ! [[ $hpwl ]]; then hpwl=-1; fi

declare -a metrics=(
	"Number of wire bits:"
	"Number of public wire bits:"
	"Number of cells:"
	"\$_DFF_"
	"\$_XOR"
	"\$_XNOR"
	"\$_MUX"
	)

metrics_vals=()
for metric in "${metrics[@]}"; do
	val=$(grep " \+${metric}[^0-9]\+ \+[0-9]\+" $yosys_log | head -1 | sed -r 's/.*[^0-9]([0-9]+)$/\1/')
	if ! [[ $val ]]; then val=-1; fi
	metrics_vals+=("$val")
done

input_output=$(grep -e "ABC: netlist" $yosys_log | sed -r 's/ABC: netlist[^0-9]*([0-9]+)\/ *([0-9]+).*/\1 \2/')
if ! [[ $input_output ]]; then input_output="-1 -1"; fi
level=$(grep -e "ABC: netlist" $yosys_log | sed -r 's/.*lev.*[^0-9]([0-9]+)$/\1/')
if ! [[ $input_output ]]; then input_output="-1 -1"; fi
result="$runtime $cell_count $violations $wire_length $vias $wns $hpwl"
for val in "${metrics_vals[@]}"; do
	result+=" $val"
done
result+=" $input_output"
result+=" $level"
echo "$result"
