Skip to content

Commit d659b1b

Browse files
committed
Experimental work in progress
1 parent 1f334c4 commit d659b1b

File tree

1 file changed

+90
-6
lines changed

1 file changed

+90
-6
lines changed

OsvvmScriptsFileCreate.tcl

Lines changed: 90 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,28 @@
3939
# limitations under the License.
4040
#
4141

42+
package require fileutil
4243

4344
namespace eval ::osvvm {
4445

4546
# -------------------------------------------------
46-
# CreateOsvvmScriptSettingsPkg
47-
# do an operation on a list of items
47+
# FindOsvvmSettingsDirectory
4848
#
4949
proc FindOsvvmSettingsDirectory {} {
50-
if {$::osvvm::SettingsAreRelativeToSimulationDirectory} {
51-
set SettingsDirectory [file join ${::osvvm::CurrentSimulationDirectory} ${::osvvm::OsvvmSettingsSubDirectory}]
50+
51+
if {[info exists ::env(OSVVM_SETTINGS_DIR)]} {
52+
# if OSVVM_SETTINGS_DIR has an absolute path, CurrentSimulationDirectory/OsvvmHomeDirectory is ignored
53+
if {$::osvvm::SettingsAreRelativeToSimulationDirectory} {
54+
set SettingsDirectory [file join ${::osvvm::CurrentSimulationDirectory} $::env(OSVVM_SETTINGS_DIR) ${::osvvm::OsvvmSettingsSubDirectory}]
55+
} else {
56+
set SettingsDirectory [file join ${::osvvm::OsvvmHomeDirectory} $::env(OSVVM_SETTINGS_DIR) ${::osvvm::OsvvmSettingsSubDirectory}]
57+
}
5258
} else {
53-
set SettingsDirectory [file join ${::osvvm::OsvvmHomeDirectory} "osvvm" ${::osvvm::OsvvmSettingsSubDirectory}]
59+
if {$::osvvm::SettingsAreRelativeToSimulationDirectory} {
60+
set SettingsDirectory [file join ${::osvvm::CurrentSimulationDirectory} ${::osvvm::OsvvmSettingsSubDirectory}]
61+
} else {
62+
set SettingsDirectory [file join ${::osvvm::OsvvmHomeDirectory} "osvvm" ${::osvvm::OsvvmSettingsSubDirectory}]
63+
}
5464
}
5565
CreateDirectory $SettingsDirectory
5666
# set RelativeSettingsDirectory [::fileutil::relative [pwd] $SettingsDirectory]
@@ -59,6 +69,9 @@ proc FindOsvvmSettingsDirectory {} {
5969
return $SettingsDirectory
6070
}
6171

72+
# -------------------------------------------------
73+
# CreateOsvvmScriptSettingsPkg
74+
#
6275
proc CreateOsvvmScriptSettingsPkg {SettingsDirectory} {
6376
set OsvvmScriptSettingsPkgFile [file join ${SettingsDirectory} "OsvvmScriptSettingsPkg_generated.vhd"]
6477
set NewFileName [file join ${SettingsDirectory} "OsvvmScriptSettingsPkg_new.vhd"]
@@ -95,6 +108,77 @@ proc CreateOsvvmScriptSettingsPkg {SettingsDirectory} {
95108
return $OsvvmScriptSettingsPkgFile
96109
}
97110

111+
112+
# -------------------------------------------------
113+
# CreatePathPkg
114+
#
115+
proc CreatePathPkg {BaseName {SettingsDirectory ""}} {
116+
if {$SettingsDirectory eq ""} {set SettingsDirectory $::osvvm::OsvvmUserSettingsDirectory}
117+
set TestSettingsPkgFile [file join ${SettingsDirectory} "${BaseName}PathPkg_generated.vhd"]
118+
set NewFileName [file join ${SettingsDirectory} "${BaseName}PathPkg_new.vhd"]
119+
set DefaultSettingsPkgFile [file join ${SettingsDirectory} "${BaseName}PathPkg_default.vhd"]
120+
121+
set WriteCode [catch {set FileHandle [open $NewFileName w]} WriteErrMsg]
122+
if {$WriteCode} {
123+
puts "Not able to open ${NewFileName}. Using defaults instead"
124+
analyze ${BaseName}SettingsPkg_default.vhd
125+
return ""
126+
}
127+
set LocalScriptDir "[::fileutil::relative ${::osvvm::CurrentSimulationDirectory} [file normalize ${::osvvm::CurrentWorkingDirectory}]]"
128+
puts $FileHandle "-- This file is autogenerated by CreatePathPkg"
129+
puts $FileHandle "package ${BaseName}SettingsPkg is"
130+
puts $FileHandle " constant TEST_PATH_DIR : string := \"${LocalScriptDir}\" ;"
131+
puts $FileHandle " constant TEST_PATH_SET : boolean := TRUE ;"
132+
puts $FileHandle "end package ${BaseName}SettingsPkg ;"
133+
close $FileHandle
134+
if {[FileDiff $TestSettingsPkgFile $NewFileName]} {
135+
file rename -force $NewFileName $TestSettingsPkgFile
136+
} else {
137+
file delete -force $NewFileName
138+
}
139+
analyze $TestSettingsPkgFile
140+
return $TestSettingsPkgFile
141+
}
142+
143+
144+
# -------------------------------------------------
145+
# CreateAndAnalyzeBuildSettingsPkg
146+
#
147+
proc CreateBuildSettingsPkg {BaseName {SettingsDirectory ""}} {
148+
if {$SettingsDirectory eq ""} {set SettingsDirectory $::osvvm::OsvvmUserSettingsDirectory}
149+
set TestSettingsPkgFile [file join ${SettingsDirectory} "${BaseName}SettingsPkg_generated.vhd"]
150+
set NewFileName [file join ${SettingsDirectory} "${BaseName}SettingsPkg_new.vhd"]
151+
set DefaultSettingsPkgFile [file join ${SettingsDirectory} "${BaseName}SettingsPkg_default.vhd"]
152+
153+
set WriteCode [catch {set FileHandle [open $NewFileName w]} WriteErrMsg]
154+
if {$WriteCode} {
155+
puts "Not able to open ${NewFileName}. Using defaults instead"
156+
analyze ${BaseName}SettingsPkg_default.vhd
157+
return ""
158+
}
159+
set LocalScriptDir "[::fileutil::relative ${::osvvm::CurrentSimulationDirectory} [file normalize ${::osvvm::CurrentWorkingDirectory}]]"
160+
puts $FileHandle "-- This file is autogenerated by CreateBuildSettingsPkg"
161+
puts $FileHandle "package ${BaseName}SettingsPkg is"
162+
puts $FileHandle " constant LOCAL_SCRIPT_DIR : string := \"${LocalScriptDir}\" ;"
163+
puts $FileHandle " constant TEST_SUITE_NAME : string := \"${::osvvm::TestSuiteName}\" ;"
164+
# Should be in top level OsvvmSettings
165+
puts $FileHandle " constant RESULTS_DIR : string := \"${::osvvm::ResultsDirectory}\" ;"
166+
if {$::osvvm::Debug} {
167+
puts $FileHandle " constant MIRROR_ENABLE : boolean := TRUE ;"
168+
} else {
169+
puts $FileHandle " constant MIRROR_ENABLE : boolean := FALSE ;"
170+
}
171+
puts $FileHandle "end package ${BaseName}SettingsPkg ;"
172+
close $FileHandle
173+
if {[FileDiff $TestSettingsPkgFile $NewFileName]} {
174+
file rename -force $NewFileName $TestSettingsPkgFile
175+
} else {
176+
file delete -force $NewFileName
177+
}
178+
analyze $TestSettingsPkgFile
179+
return $TestSettingsPkgFile
180+
}
181+
98182
# AutoGenerateFile
99183
# Extract from FileName everything up to and including the pattern in the string
100184
# Write Extracted contents to NewFileName
@@ -143,7 +227,7 @@ proc FileDiff {File1 File2} {
143227
# Don't export the following due to conflicts with Tcl built-ins
144228
# map
145229

146-
namespace export CreateOsvvmScriptSettingsPkg FindOsvvmSettingsDirectory
230+
namespace export CreateOsvvmScriptSettingsPkg FindOsvvmSettingsDirectory CreateAndAnalyzeTestSettingsPkg
147231

148232

149233

0 commit comments

Comments
 (0)