23 set tcl_path [
file normalize "[
file dirname [
info script]]/.."]
 
   24 source $tcl_path/hog.tcl
 
   28 set old_path [
file normalize "../../Projects/$project/$project.runs/synth_1"]
 
   37     set proj_dir [get_property DIRECTORY [current_project]]
 
   38     set project [
file tail $proj_dir]
 
   39     set proj_file $proj_dir/$project.prr
 
   41     set proj_file [get_property parent.project_path [current_project]]
 
   43   set proj_dir [
file normalize [
file dirname $proj_file]]
 
   44   set proj_name [
file rootname [
file tail $proj_file]]
 
   45   set top_name [get_property top [current_fileset]]
 
   48 set proj_name [
lindex $quartus(args) 1]
 
   51   set proj_file [
file normalize "$proj_dir/$proj_name.qpf"]
 
   53 set hogQsysFileName [
file normalize "$proj_dir/.hog/.hogQsys.md5"]
 
   54   if {[
file exists $hogQsysFileName] != 0} {
 
   55     set hogQsysFile [open $hogQsysFileName r]
 
   56     set hogQsysFileLines [
split [read $hogQsysFile] "\n"]
 
   57     foreach line $hogQsysFileLines {
 
   58       set fileEntry [
split $line "\t"]
 
   59       set fileEntryName [
lindex $fileEntry 0]
 
   60       if {$fileEntryName != ""} {
 
   61         if {[
file exists $fileEntryName]} {
 
   62           set newMd5Sum [
Md5Sum $fileEntryName]
 
   63           set oldMd5Sum [
lindex $fileEntry 1]
 
   64           if {$newMd5Sum != $oldMd5Sum} {
 
   65             Msg Warning "The checksum for file $fileEntryName is not equal to the one saved in $hogQsysFileName.\n\
 
   66             New checksum $newMd5Sum, old checksum $oldMd5Sum. \
 
   67             Please check the any changes in the file are correctly propagated to git!"
 
   70           Msg Warning "File $fileEntryName not found... Will not check Md5Sum!"
 
   77 if {[
info exists env(HOG_TCLLIB_PATH)]} {
 
   78     lappend auto_path $env(HOG_TCLLIB_PATH)
 
   80     puts "ERROR: To run Hog with Microsemi Libero SoC, you need to define the HOG_TCLLIB_PATH variable."
 
   83   set proj_dir [
file normalize "[
pwd]/.."]
 
   84   set proj_name [
file tail $proj_dir]
 
   85   set project $proj_name
 
   88 set proj_file $old_path/[
file tail $old_path].xpr
 
   89   set proj_dir [
file normalize [
file dirname $proj_file]]
 
   90   set proj_name [
file rootname [
file tail $proj_file]]
 
   91   Msg CriticalWarning "You seem to be running locally on tclsh, so this is a debug message. \
 
   92   The project file will be set to $proj_file and was derived from the path you launched this script from: $old_path. \
 
   93   If you want this script to work properly in debug mode, please launch it from the top folder of one project, \
 
   94   for example Repo/Projects/fpga1/ or Repo/Top/fpga1/"
 
   97 if {[
catch {
package require struct::matrix} ERROR]} {
 
   98   puts "$ERROR\n If you are running this script on tclsh, you can fix this by installing 'tcllib'"
 
  103 set repo_path [
file normalize "$tcl_path/../.."]
 
  104 set bin_dir [
file normalize "$repo_path/bin"]
 
  108 set group_name [
GetGroupName $proj_dir "$tcl_path/../.."]
 
  110 Msg Info "Evaluating Git sha for $proj_name..."
 
  111 lassign [
GetRepoVersions [
file normalize ./Top/$group_name/$proj_name] $repo_path] sha
 
  114 Msg Info "Git describe set to: $describe"
 
  115 set dst_dir [
file normalize "$bin_dir/$group_name/$proj_name\-$describe"]
 
  117 Msg Info "Creating $dst_dir..."
 
  120 file mkdir $dst_dir/reports
 
  128 set work_path [get_property DIRECTORY [get_runs synth_1]]
 
  131 set work_path $old_path
 
  133   set run_dir [
file normalize "$work_path/.."]
 
  136     set reps [glob -nocomplain "$run_dir/*/*{.syr,.srp,.mrp,.map,.twr,.drc,.bgn,_routed.par,_routed_pad.txt,_routed.unroutes}"]
 
  138     set reps [glob -nocomplain "$run_dir/*/*.rpt"]
 
  140   if {[
file exists [
lindex $reps 0]]} {
 
  141     file copy -force {*}$reps $dst_dir/reports
 
  142     if {[
file exists [glob -nocomplain "$dst_dir/reports/${top_name}_utilization_synth.rpt"]]} {
 
  143       set utilization_file [
file normalize $dst_dir/utilization.txt]
 
  144       set report_file [glob -nocomplain "$dst_dir/reports/${top_name}_utilization_synth.rpt"]
 
  145       if {$group_name != ""} {
 
  152     Msg Warning "No reports found in $run_dir subfolders"
 
  158     if {[
info exists env(HOG_IP_PATH)]} {
 
  159       set ip_repo $env(HOG_IP_PATH)
 
  161       set run_paths [glob -nocomplain "$run_dir/*"]
 
  163       foreach r $run_paths {
 
  164         if {[regexp -all {^(.+)_synth_1} $r whole_match run]} {
 
  165           lappend runs [
file tail $run]
 
  175         Msg Info "Copying synthesised IP $ip to $ip_repo..."
 
  176         HandleIP push [get_property IP_FILE $ip] $ip_repo $repo_path [get_property IP_OUTPUT_DIR $ip] $force
 
  181 if {[
info exists env(HOG_SAVE_DCP)] && ($env(HOG_SAVE_DCP) == 1 || $env(HOG_SAVE_DCP) == 2)} {
 
  182       set dcp_dir [
file normalize "$repo_path/DCPs/$group_name/$proj_name/synth_dcp"]
 
  184       set dcps [glob -nocomplain "$run_dir/synth*/*.dcp"]
 
  185       if {[
file exists [
lindex $dcps 0]]} {
 
  186         file copy -force {*}$dcps $dcp_dir/
 
  193 set logs [glob -nocomplain "$run_dir/*/runme.log"]
 
  195     set run_name [
file tail [
file dirname $log]]
 
  196     file copy -force $log $dst_dir/reports/$run_name.log
 
  200 set reps [glob -nocomplain "$proj_dir/output_files/*.rpt"]
 
  202   if {[
file exists [
lindex $reps 0]]} {
 
  203     file copy -force {*}$reps $dst_dir/reports
 
  205     Msg Warning "No reports found in $proj_dir/output_files subfolders"
 
  209 set logs [glob -nocomplain "$proj_dir/Implementation0/*.log"]
 
  211   if {[
file exists [
lindex $logs 0]]} {
 
  212     file copy -force {*}$logs $dst_dir/reports
 
  214     Msg Warning "No .log reports found in $proj_dir/Implementation0 subfolders"
 
  218 set areas [glob -nocomplain "$proj_dir/Implementation0/*.arearep"]
 
  220   if {[
file exists [
lindex $areas 0]]} {
 
  221     file copy -force {*}$areas $dst_dir/reports
 
  223     Msg Warning "No .arearep reports found in $proj_dir/Implementation0 subfolders"
 
  227 set t_reps [glob -nocomplain "$proj_dir/Implementation0/*.twr"]
 
  229   if {[
file exists [
lindex $t_reps 0]]} {
 
  230     file copy -force {*}$t_reps $dst_dir/reports
 
  232     Msg Warning "No .twr reports found in $proj_dir/Implementation0 subfolders"
 
  237 set user_post_synthesis_file "./Top/$group_name/$proj_name/post-synthesis.tcl"
 
  238 if {[
file exists $user_post_synthesis_file]} {
 
  239   Msg Info "Sourcing user post-synthesis file $user_post_synthesis_file"
 
  240   source $user_post_synthesis_file