3939# limitations under the License.
4040#
4141
42+ package require fileutil
4243
4344namespace eval ::osvvm {
4445
4546# -------------------------------------------------
46- # CreateOsvvmScriptSettingsPkg
47- # do an operation on a list of items
47+ # FindOsvvmSettingsDirectory
4848#
4949proc 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+ #
6275proc 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