release.tcl file
diff --git a/src/release.tcl b/src/release.tcl new file mode 100755 index 0000000..998bc95 --- /dev/null +++ b/src/release.tcl
@@ -0,0 +1,204 @@ +#!/usr/bin/tclsh + +# Copyright 2019 Alain Dargelas +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Either creates all releases, or just the one passed as argument: +# +# ./release.tcl +# +# Or +# +# ./release.tcl "<build_type> <lib_type>" +# +# Ex.: ./release.tcl "release tcmalloc" + +# build_type: release, debug, advanced (debug) + +#set RELEASES { { "release" "notcmalloc" } { "release" "tcmalloc" } \ +# { "debug" "notcmalloc" } { "debug" "tcmalloc" } \ +# { "advanced" "notcmalloc" } { "advanced" "tcmalloc" } \ +# } + +set RELEASES { { "release" "notcmalloc" } { "release" "tcmalloc" } \ + { "debug" "notcmalloc" } { "debug" "tcmalloc" } + } + + +if {$argv != ""} { + set RELEASES $argv +} + +proc precompilePackages { } { + set source_file "../parser/SV3_1aParser.cpp" + set compiled_file "Release/GNU-Linux/pkg/work/uvm_pkg.sv.slpa" + set source_time 0 + if [file exist $source_file] { + set source_time [file mtime $source_file] + } + set compiled_time 0 + if [file exist $compiled_file] { + set compiled_time [file mtime $compiled_file] + } + exec sh -c "rm -rf Release/sv" + exec sh -c "mkdir -p Release/sv; cp ../API/builtin.sv Release/sv" + if {($compiled_time == 0) || ($source_time >= $compiled_time)} { + exec sh -c "rm -rf slpp_all" + exec sh -c "rm -rf slpp_unit" + exec sh -c "rm -rf dist/slpp_all" + exec sh -c "rm -rf dist/slpp_unit" + exec sh -c "rm -rf Release/GNU-Linux/pkg/work/" + exec sh -c "rm -f ovm-2.1.2 uvm-1.2 vmm-1.1.1a" + exec sh -c "ln -s ../../UVM/ovm-2.1.2 ovm-2.1.2" + exec sh -c "ln -s ../../UVM/uvm-1.2 uvm-1.2" + exec sh -c "ln -s ../../UVM/vmm-1.1.1a vmm-1.1.1a" + puts "Precompiling ovm_pkg..." + puts "Begin: The time is: [clock format [clock seconds] -format %H:%M:%S]" + exec sh -c "Release/GNU-Linux/surelog -profile -createcache +incdir+ovm-2.1.2/src/ +incdir+vmm-1.1.1a/sv ovm-2.1.2/src/ovm_pkg.sv -writepp -verbose -mt 0 -parse; cp slpp_all/surelog.log ovm_pkg.log" + puts "End: The time is: [clock format [clock seconds] -format %H:%M:%S]" + puts "Precompiling uvm_pkg..." + puts "Begin: The time is: [clock format [clock seconds] -format %H:%M:%S]" + exec sh -c "Release/GNU-Linux/surelog -profile -createcache +incdir+.+uvm-1.2/src/ uvm-1.2/src/uvm_pkg.sv -writepp -verbose -mt 0 -parse; cp slpp_all/surelog.log uvm_pkg.log" + puts "End: The time is: [clock format [clock seconds] -format %H:%M:%S]" + + } else { + puts "Skipping ovm_pkg..." + puts "Skipping uvm_pkg..." + + } + + catch {exec sh -c "cp -R -f Release/GNU-Linux/pkg/work Debug/GNU-Linux/pkg"} dummy + catch {exec sh -c "cp -R -f Release/GNU-Linux/pkg/work AdvancedDebug/GNU-Linux/pkg"} dummy + catch {exec sh -c "cp -R -f Release/GNU-Linux/pkg/work ReleaseNoTcMalloc/GNU-Linux/pkg"} dummy + +} + +proc createReleases { } { + global RELEASES + foreach release $RELEASES { + set build_type [lindex $release 0] + set lib_type [lindex $release 1] + set tar_filename "surelog_${build_type}_${lib_type}" + catch {exec sh -c "chmod 777 -R surelog/"} dummy + exec sh -c "rm -rf surelog" + file mkdir surelog + file mkdir surelog/bin + file mkdir surelog/bin/pkg + file mkdir surelog/bin/pkg/work + file mkdir surelog/lib + file mkdir surelog/python + file mkdir surelog/sv + file copy Release/GNU-Linux/pkg/work/uvm_pkg.sv.slpp surelog/bin/pkg/work + file copy Release/GNU-Linux/pkg/work/uvm_pkg.sv.slpa surelog/bin/pkg/work + file copy Release/GNU-Linux/pkg/work/ovm_pkg.sv.slpp surelog/bin/pkg/work + file copy Release/GNU-Linux/pkg/work/ovm_pkg.sv.slpa surelog/bin/pkg/work + if {($build_type == "release")} { + if {$lib_type == "tcmalloc"} { + file copy Release/GNU-Linux/surelog surelog/bin/surelog.exe + catch {exec sh -c "mkdir -p Release/python; ln -s ../../../API/slSV3_1aPythonListener.py Release/python"} dummy + catch {exec sh -c "mkdir -p Release/sv; ln -s ../../../API/builtin.sv Release/sv"} dummy + } else { + file copy ReleaseNoTcMalloc/GNU-Linux/surelog surelog/bin/surelog.exe + catch {exec sh -c "mkdir -p ReleaseNoTcMalloc/python; ln -s ../../../API/slSV3_1aPythonListener.py ReleaseNoTcMalloc/python"} dummy + catch {exec sh -c "mkdir -p ReleaseNoTcMalloc/sv; ln -s ../../../API/builtin.sv ReleaseNoTcMalloc/sv"} dummy + } + } elseif {$build_type == "debug"} { + file copy Debug/GNU-Linux/surelog surelog/bin/surelog.exe + catch {exec sh -c "mkdir -p Debug/python; ln -s ../../../API/slSV3_1aPythonListener.py Debug/python"} dummy + catch {exec sh -c "mkdir -p Debug/sv; ln -s ../../../API/builtin.sv Debug/sv"} dummy + } elseif {$build_type == "advanced"} { + file copy AdvancedDebug/GNU-Linux/surelog surelog/bin/surelog.exe + catch {exec sh -c "mkdir -p AdvancedDebug/python; ln -s ../../../API/slSV3_1aPythonListener.py AdvancedDebug/python"} dummy + catch {exec sh -c "mkdir -p AdvancedDebug/sv; ln -s ../../../API/builtin.sv AdvancedDebug/sv"} dummy + } else { + puts "ERROR!!! UNSUPPORTED BUILD TYPE: $build_type" + exit + } + + if {$lib_type == "tcmalloc"} { + catch {file copy /usr/lib/x86_64-linux-gnu/libtcmalloc.so.4 surelog/lib/} dummy + catch {file copy /usr/lib/x86_64-linux-gnu/libtcmalloc.so.4.2.6 surelog/lib/} dummy + catch {file copy /usr/lib/libtcmalloc.so.4 surelog/lib/} dummy + catch {file copy /usr/lib/libtcmalloc.so.4.2.6 surelog/lib/} dummy + #if ![file exists "surelog/lib/libtcmalloc.so.4"] { + # error "No Tclmalloc found on system" + # } + + } + + file copy ../API/slSV3_1aPythonListener.py surelog/python/ + file copy ../API/slformatmsg.py surelog/python/slformatmsg.py + file copy ../API/slwaivers.py surelog/python/ + file copy ../API/surelog.bash surelog/surelog + file copy ../API/yosys.tcl surelog/yosys.tcl + file copy ../API/builtin.sv surelog/sv + catch {set copy_result [file copy /usr/local/lib64/libstdc++.so.6.0.21 surelog/lib/libstdc++.so.6]} copy_result + catch {set copy_result [file copy /usr/local/lib64/libgcc_s.so.1 surelog/lib/]} copy_result + exec sh -c "chmod 555 -R surelog/" + + exec sh -c "tar cvzf ${tar_filename}.tar.gz surelog/" + puts "Created dist/${tar_filename}.tar.gz" + } + +} + +proc testReleases { } { + global RELEASES + foreach release $RELEASES { + set build_type [lindex $release 0] + set lib_type [lindex $release 1] + set tar_filename "surelog_${build_type}_${lib_type}" + + exec sh -c "chmod 777 -R surelog/" + exec sh -c "rm -rf surelog" + + exec sh -c "tar xvzf ${tar_filename}.tar.gz" + + catch {exec sh -c "chmod 777 -R surelog_test/"} dummy + exec sh -c "rm -rf surelog_test" + file mkdir surelog_test + file copy "../python_listener.py" "surelog_test/slSV3_1aPythonListener.py" + cd surelog_test + + set fid [open "test.v" "w"] + puts $fid "module toto();\ + `TOTO \ + endmodule" + close $fid + + catch {set result [exec sh -c "../surelog/surelog test.v -parse -pythonlistener"]} result + if {[regexp {PY0403} $result] && [regexp {module toto} $result]} { + puts "PASS: $tar_filename" + } else { + puts "FAIL: $tar_filename" + puts "$result" + } + + cd .. + + } + +} + +cd dist + +precompilePackages + +createReleases + +testReleases + +cd .. + +