-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsdcparser.tcl
executable file
·146 lines (129 loc) · 4.38 KB
/
sdcparser.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/sh
################################################################################
# > COPYRIGHT NOTICE <
# Copyright 2017 Synopsys, Inc.
# Authors : A.Gratchevz, Ibna Faruque
#
#
################################################################################
#
# Title : SDC-parser command line application
#
################################################################################\
exec tclsh "$0" "$@"
source [file join [file dirname [info script]] sdcparsercore.tcl]
proc usage {} {
global argv0
return "
Usage:
$argv0
<filename> \[filename \[...\]\] - source file name(s)
-f <filename> - read command line arguments from file
-d<debug_level> - set debug level
-d0 - no error messages, quiet mode
-d1 - brief error messages (default)
-d2 - extended error messages
-l <log_filename> - set log file name
-v <sdc_version> - set default sdc version
-eda <eda_source_file> - file name which contains tcl source of eda tool
"
}
#-------------------------------------------------------------------------------
# Function : process_command_line
# Description : Analize command line
# Paremeters : argv - list of command line parameters
# Return : Result data structure
#-------------------------------------------------------------------------------
proc process_command_line {argv {startdir ""}} {
if {$argv==""} {
puts [usage]
exit
} else {
set argwait ""
set files ""
foreach arg $argv {
switch -- $argwait {
f {
set argwait ""
if {[catch {set fname [::open $arg]}]!=0} {
puts stderr "Can't open file: $arg"
} else {
while {![eof $fname]} {
append data "[gets $fname] "
}
catch {close $fname}
set lparams [split $data]
while {[set pos [lsearch $lparams ""]]!=-1} {
set lparams [lreplace $lparams $pos $pos]
}
set files [concat $files [process_command_line \
$lparams [file dirname $arg]]]
}
}
e {
set argwait ""
catch {source $arg}
}
l {
set argwait ""
sdc::set_log_file $arg
catch {file delete $arg}
}
v {
set argwait ""
sdc::set_version $arg
}
default {
switch -glob -- $arg {
-f {
set argwait f
continue
}
-l {
set argwait l
continue
}
-d[0-2] {
sdc::set_debug_level [string index $arg 2]
}
-eda {
set argwait e
continue
}
-v {
set argwait v
continue
}
-help {
puts [usage]
continue
}
default {
lappend files [file join $startdir $arg]
}
}
}
}
}
}
return $files
}
#-------------------------------------------------------------------------------
# Main section
#-------------------------------------------------------------------------------
set filelist [process_command_line $argv]
if {$filelist!=""} {
foreach file $filelist {
sdc::parse_file $file
}
#if {$sdc::debuglevel>0} {
if {$sdc::errorstotal} {
puts "Found $sdc::errorstotal error(s) total."
} else {
puts "No errors found."
}
#}
} else {
puts "No files found."
puts [usage]
}