blob: 2ae0ced3fb9a8032be80d52f87650b4b1bf3d4e3 [file] [log] [blame] [edit]
#!/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" } \
}
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 ..