Remove release.tcl, replace with cmake

Signed-off-by: Alain <alainmarcel@yahoo.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fafa1ea..d361ffd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,8 +2,8 @@
 cmake_minimum_required (VERSION 2.8)
 # 2.8 needed because of ExternalProject
 
-add_subdirectory(third_party/flatbuffers)
-add_subdirectory(third_party/antlr4/runtime/Cpp)
+add_subdirectory(third_party/flatbuffers EXCLUDE_FROM_ALL)
+add_subdirectory(third_party/antlr4/runtime/Cpp EXCLUDE_FROM_ALL)
 
 FIND_PACKAGE(SWIG REQUIRED)
 
@@ -47,6 +47,11 @@
 message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
 message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
 
+# Directories
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/)
+set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
+set(CMAKE_BUILD_DIRECTORY ${dir})
+
 # C++
 set(CMAKE_CXX_FLAGS                  "${CMAKE_CXX_FLAGS} ${MY_CXX_WARNING_FLAGS}")
 set(CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g ${MY_CXX_WARNING_FLAGS}")
@@ -78,7 +83,6 @@
 endif ()
 
 # Flatbuffer
-
 set(flatbuffer-GENERATED_SRC
   ${PROJECT_SOURCE_DIR}/src/Cache/header_generated.h
   ${PROJECT_SOURCE_DIR}/src/Cache/parser_generated.h
@@ -106,11 +110,11 @@
 find_package(Java)
 find_package(Java COMPONENTS Runtime)
 set(ANTLR_JAR_LOCATION ${PROJECT_SOURCE_DIR}/third_party/antlr4/antlr4-4.7.2-complete.jar)
-#
 
 enable_testing()
 #add_test(NAME GenerateFromGrammar COMMAND ${Java_JAVA_EXECUTABLE}  org.antlr.v4.Tool -Dlanguage=Cpp *.g4)
 
+add_custom_target(CreateDirectories)
 
 add_custom_target(GenerateParser DEPENDS ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp)
 add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp
@@ -122,12 +126,7 @@
   COMMAND API/embed_python_api.tcl
   WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/src/"
   DEPENDS ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterLexer.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aPpParser.g4 ${PROJECT_SOURCE_DIR}/grammar/SV3_1aSplitterParser.g4 ${PROJECT_SOURCE_DIR}/src/API/slapi.i
-   )
-
-set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
-set(CMAKE_BUILD_DIRECTORY ${dir})
-
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../dist/${CMAKE_BUILD_TYPE}/GNU-Linux/ )
+ )
 
 include_directories(
   ${PROJECT_SOURCE_DIR}/src/API
@@ -148,7 +147,6 @@
 )
 
 file(GLOB surelog_SRC
-
   ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aLexer.cpp
   ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aParserBaseListener.cpp
   ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aParser.cpp
@@ -195,21 +193,43 @@
   )
 
 add_executable(surelog ${surelog_SRC})
+
 add_dependencies(surelog flatc)
 add_dependencies(surelog antlr4_static)
 add_dependencies(surelog flatbuffers)
-
 add_dependencies(surelog GenerateParser)
 add_dependencies(surelog GenerateSerializer)
 
 target_link_libraries(
   surelog ${PYTHON_LIBRARIES}
-  )
-
-#target_link_libraries(
-#  surelog  ${ANTLR_LIB}
-#)
+ )
 
 target_link_libraries(
   surelog -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a dl util m rt pthread
 )
+
+add_custom_command(TARGET surelog POST_BUILD
+  COMMAND echo "       Creating staging for precompiled packages"
+  COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/pkg/work/
+  COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv 
+  COMMAND cp -f ${CMAKE_BINARY_DIR}/../src/API/builtin.sv ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv
+  COMMAND ln -fs ${CMAKE_BINARY_DIR}/../third_party/UVM/ovm-2.1.2  ovm-2.1.2
+  COMMAND ln -fs ${CMAKE_BINARY_DIR}/../third_party/UVM/uvm-1.2    uvm-1.2
+  COMMAND ln -fs ${CMAKE_BINARY_DIR}/../third_party/UVM/vmm-1.1.1a vmm-1.1.1a
+  COMMAND rm -rf slpp_all slpp_unit
+  COMMAND echo "       Creating OVM precompiled package..."
+  COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/surelog -nobuiltin -createcache +incdir+ovm-2.1.2/src/ +incdir+vmm-1.1.1a/sv ovm-2.1.2/src/ovm_pkg.sv -writepp  -mt 0 -parse -nocomp -noelab -nostdout
+  COMMAND echo "       Creating UVM precompiled package..."
+  COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/surelog -nobuiltin -createcache +incdir+.+uvm-1.2/src/ uvm-1.2/src/uvm_pkg.sv -writepp   -mt 0 -parse -nocomp -noelab -nostdout
+  COMMAND echo "       Packages created"
+
+  WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
+ )
+
+
+
+
+INSTALL( 
+  TARGETS surelog
+  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
diff --git a/Makefile b/Makefile
index bb2621c..1dfd2ae 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,7 @@
 release:
 	mkdir -p build/tests;
 	mkdir -p dist;
-	cd build; cmake ../ -DCMAKE_BUILD_TYPE=Release; make -j 4
-	cd build; ../src/release.tcl release 
+	cd build; cmake ../ -DCMAKE_BUILD_TYPE=Release; make -j 4 
 	cd build; ../tests/regression.tcl mt=0 show_diff
 
 test:
@@ -12,3 +11,7 @@
 clean:
 	rm -rf build;
 	chmod -fR u+rwx dist; rm -rf dist;
+
+install:
+	cd build; make install
+
diff --git a/README.md b/README.md
index 90efabe..ff19cb8 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
 
 # Contributing to this project
 
-This project is open to contributions from any user! From the commercial vendor to the Verilog enthousiast are welcome.
+This project is open to contributions from any users! From the commercial vendor to the Verilog enthousiast, all are welcome.
 
 # Features
 
@@ -21,6 +21,11 @@
  * Surelog accepts IEEE Simulator-compliant project specification.
  * Surelog issues Errors/Warning/Info/Notes about language compliance.
  * Surelog allows for pre-compiled packages (UVM,...).
+ * A comprehensive Python API allows to:
+    * listen or visit the Parser grammar and create custom linting rules
+    * Visit the design data model and create custom linting rules
+    * Customize the message formats
+    * Waive messages
 
 # Build instructions and test: 
 
@@ -41,7 +46,7 @@
    * -f <file>             Accepts a file containing command line arguments
    * -v <file>             Library file
    * -y <path>             Library directory
-   * +incdir+<dir>+...     Specifies include paths
+   * +incdir+<dir>[+<dir>...]  Specifies include paths
    * -Idir                 Specifies include paths
    * +libext+<extname>+... Specifies the library extensions
    * <file>.v              Verilog File
@@ -50,7 +55,7 @@
    * +librescan            Lib Rescan option (ignored)
    * +libverbose           Lib Verbose option (ignored)
    * +nolibcell            No Lib Cell option (ignored)
-   * +define+macro_name=definition+...
+   * +define+name=value[+name=value...]
    *                      Defines a macro and optionally its value
    * -L <libName>          Defines library compilation order
    * -map <mapFile>        Specifies a library mapping file (multiple -map options supported)
@@ -105,5 +110,6 @@
    * -nonote               Filters out NOTE messages
    * -nowarning            Filters out WARNING messages
    * -o <path>             Turns on all compilation stages, produces all outputs under that path
-
+   * --help                This help 
+   * --version             Surelog version and build date
 
diff --git a/src/release.tcl b/src/release.tcl
deleted file mode 100755
index 4a6537f..0000000
--- a/src/release.tcl
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/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
-
-#  build_type: release, debug
-
-set RELEASES { "release" "debug" } 
-
-if {$argv != ""} {
-    set RELEASES $argv
-} 
-
-proc precompilePackages { } {
-    set source_file "../src/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 ../src/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 ../third_party/UVM/ovm-2.1.2 ovm-2.1.2"
-	exec sh -c "ln -s ../third_party/UVM/uvm-1.2 uvm-1.2"
-	exec sh -c "ln -s ../third_party/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
-}
-
-proc createReleases { } {
-    global RELEASES 
-    foreach release $RELEASES {
-	set build_type [lindex $release 0] 
-	set tar_filename "surelog_${build_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")} {
-	    file copy Release/GNU-Linux/surelog surelog/bin/surelog.exe
-	    catch {exec sh -c "mkdir -p Release/python; cp ../src/API/slSV3_1aPythonListener.py Release/python"} dummy
-	    catch {exec sh -c "mkdir -p Release/sv; cp ../src/API/builtin.sv Release/sv"} dummy	   
-	} elseif {$build_type == "debug"}  {
-	    file copy Debug/GNU-Linux/surelog surelog/bin/surelog.exe
-	    catch {exec sh -c "mkdir -p Debug/python; cp ../src/API/slSV3_1aPythonListener.py Debug/python"} dummy
-	    catch {exec sh -c "mkdir -p Debug/sv; cp ../src/API/builtin.sv Debug/sv"} dummy
-	} else {
-	    puts "ERROR!!! UNSUPPORTED BUILD TYPE: $build_type"
-	    exit
-	}
-
-	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
-	
-	file copy ../src/API/slSV3_1aPythonListener.py surelog/python/
-	file copy ../src/API/slformatmsg.py surelog/python/slformatmsg.py
-	file copy ../src/API/slwaivers.py surelog/python/
-	file copy ../src/API/surelog.bash surelog/surelog
-	file copy ../src/API/yosys.tcl surelog/yosys.tcl
-	file copy ../src/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 tar_filename "surelog_${build_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 "../src/API/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 ../build
-
-
diff --git a/tests/regression.tcl b/tests/regression.tcl
index d539de1..a603f2c 100755
--- a/tests/regression.tcl
+++ b/tests/regression.tcl
@@ -20,8 +20,7 @@
     puts "regression.tcl tests=<testname>                  (Tests matching regular expression)"
     puts "               test=<testname>                   (Just that test)"
     puts "               debug=<none, valgrind, ddd>"
-    puts "               build=<debug, advanced, release, notcmalloc, undertow>"
-    puts "               commit=\"commit text\""
+    puts "               build=<Debug, Release>"
     puts "               mt=<nbThreads>"
     puts "               large                             (large tests too)"
     puts "               show_diff                         (Shows text diff)"
@@ -144,7 +143,7 @@
     set ONETEST $TESTTARGET
 }
 
-set BUILD "release"
+set BUILD "Release"
 if [regexp {build=([A-Za-z0-9_]+)} $argv tmp BUILD] {
 }
 
@@ -161,20 +160,11 @@
 if [regexp {commit=([A-Za-z0-9_ \.]+)} $argv tmp COMMIT_TEXT] {
 }
 
-set env(LD_LIBRARY_PATH) "[pwd]/../../python3.6/python/lib/"
-
-set SURELOG_VERSION "[pwd]/../dist/surelog/surelog"
+set SURELOG_VERSION "[pwd]/dist/Release/surelog"
 set REGRESSION_PATH [pwd]
 
 set SURELOG_COMMAND "$TIME $DEBUG_TOOL $SURELOG_VERSION"
 
-proc init_regression { } {
-    global BUILD
-    log "Creating release for regression..."
-    log [exec sh -c "../src/release.tcl \"$BUILD tcmalloc\""]
-    cd tests
-}
-
 proc findFiles { basedir pattern } {
 
     # Fix the directory name, this ensures the directory name is in the
@@ -205,7 +195,7 @@
 
 proc load_tests { } {
     global TESTS TESTS_DIR LONGESTTESTNAME TESTTARGET ONETEST LARGE_TESTS LONG_TESTS MT_MAX
-    set dirs "../../tests/ ../../third_party/tests/"
+    set dirs "../tests/ ../third_party/tests/"
     set fileLists ""
     foreach dir $dirs {
 	append fileList "[findFiles $dir *.sl] "
@@ -583,7 +573,6 @@
 log "$date"
 log "COMMAND: $SURELOG_COMMAND"
 
-init_regression
 load_tests
 set result [run_regression]