Files
FPGA_DESIGN_IP/stream_rx_ctrl/sim/find_unreferenced_sources.tcl
2026-03-06 16:22:17 +08:00

120 lines
3.3 KiB
Tcl

proc relative_to_absolute {relative_path} {
#replace all "../" and count how many "../" occured in the original string
set parent_dir_count [regsub -all {\.\.\/} $relative_path "" sufix_path]
set redir_path [pwd];
#cut the current path by N-times to get the common parent path for both "abs" and "rela"
for {set i 0 } {$i < $parent_dir_count} {incr i} {
set last_dir [file tail redir_path];
regsub /$last_dir $redir_path "" redir_path;
}
set prefix_path $redir_path;
set absolute_path $prefix_path/$sufix_path;
return $absolute_path;
}
proc find_files {root_path } {
list results;
#store the current path
set current_path [pwd];
cd $root_path;
set root_path [pwd];
puts "entering $root_path"
# get all files recusively
foreach element [glob -nocomplain *] {
# entering sub dirs
if { [file isdirectory $element]} {
set subList [find_files $element];
set results [concat $results $subList];
} else {
# only valid source files are filtered
if {[string match "*.v" $element] || [string match "*.sv" $element] || [string match "*.vhd" $element] || [string match "*.vhdl" $element]} {
lappend results "$root_path/$element";
}
}
}
cd $current_path;
return $results;
}
puts "---------------------------------ATTENTION----------------------------------------"
puts "----------- this file should be sourced after the vsim load sucessfully-----------"
puts "----------- this file should be sourced from the funcXXX director-----------------"
puts ""
#write report -l info.txt
puts ":::::::::get referced dut files:::::::::"
set f_report [open info.txt r];
#read the report,get all referenced files
while {![eof $f_report]} {
gets $f_report line
if { [string match "*Source File*" $line] } {
lappend referenced_files $line
}
}
close $f_report
#remove those source file,point to precompiled vendor library
#convert the relative path to absolute path
list referenced_dut_files;
foreach element $referenced_files {
if { [string match "*Source File: \.\./\.\./*" $element] } {
regsub {^.*Source File:} $element "" path
set relative_path [string trim $path ]
set abs_path [relative_to_absolute $relative_path]
lappend referenced_dut_files $abs_path
# puts $abs_path
}
}
puts ":::::::::get all compiled source files:::::::::"
#get all source files in the source file directory ,recursively
set root_path ../../../01_source/01_func;
set all_sources [find_files $root_path ];
puts ":::::::::try to match:::::::::"
#try to match the two lists,and filter the mis-matched ones
set f_referenced_dut_files [open "referenced.txt" w+];
foreach sim_file $referenced_dut_files {
puts $f_referenced_dut_files $sim_file;
}
close $f_referenced_dut_files
set f_dir_files [open "dir.txt" w+];
foreach dir_file $all_sources {
puts $f_dir_files $dir_file;
}
close $f_dir_files
lappend mis_matched_dir_files;
foreach dir_file $all_sources {
puts $dir_file
set index [lsearch $referenced_dut_files $dir_file]
if {$index == -1} {
lappend mis_matched_dir_files $dir_file
puts dir=$dir_file
}
}