Surelog library, example exe, install Signed-off-by: Alain <alainmarcel@yahoo.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt index c1944ac..8f9df32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -123,7 +123,6 @@ ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParser.cpp ${PROJECT_SOURCE_DIR}/src/parser/SV3_1aSplitterParserListener.cpp ${PROJECT_SOURCE_DIR}/src/SourceCompile/VObjectTypes.cpp - ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/src/API/*.cpp ${PROJECT_SOURCE_DIR}/src/Design/*.cpp ${PROJECT_SOURCE_DIR}/src/Library/*.cpp @@ -155,25 +154,55 @@ ${PROJECT_SOURCE_DIR}/src/Package/*.cpp ) -add_executable(surelog ${surelog_SRC}) +set (SURELOG_PUBLIC_HEADERS + ${PROJECT_SOURCE_DIR}/src/surelog.h +) + -add_dependencies(surelog flatc) -add_dependencies(surelog antlr4_static) -add_dependencies(surelog flatbuffers) -add_dependencies(surelog GenerateParser) -add_dependencies(surelog GenerateSerializer) +add_library(surelog STATIC ${surelog_SRC}) +set_target_properties(surelog PROPERTIES PUBLIC_HEADER "${SURELOG_PUBLIC_HEADERS}") + +add_executable(surelog-bin ${PROJECT_SOURCE_DIR}/src/main.cpp +) +set_target_properties(surelog-bin + PROPERTIES OUTPUT_NAME surelog +) + +add_executable(hellosureworld ${PROJECT_SOURCE_DIR}/src/hellosureworld.cpp) + +add_dependencies(surelog-bin surelog) +add_dependencies(surelog-bin flatc) +add_dependencies(surelog-bin antlr4_static) +add_dependencies(surelog-bin flatbuffers) +add_dependencies(surelog-bin GenerateParser) +add_dependencies(surelog-bin GenerateSerializer) + +set (ALL_LIBRARIES_FOR_SURELOG + surelog + ${PYTHON_LIBRARIES} + -L${PROJECT_SOURCE_DIR}/dist/ libantlr4-runtime.a + -L${PROJECT_SOURCE_DIR}/build/third_party/flatbuffers libflatbuffers.a + dl util m rt pthread tcmalloc +) # Linkage instructions target_link_libraries( - surelog ${PYTHON_LIBRARIES} + surelog-bin ${ALL_LIBRARIES_FOR_SURELOG} ) + +add_dependencies(hellosureworld surelog) +add_dependencies(hellosureworld flatc) +add_dependencies(hellosureworld antlr4_static) +add_dependencies(hellosureworld flatbuffers) +add_dependencies(hellosureworld GenerateParser) +add_dependencies(hellosureworld GenerateSerializer) 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 tcmalloc + hellosureworld ${ALL_LIBRARIES_FOR_SURELOG} ) # Creation of the distribution directory, # Precompiled package creation -add_custom_command(TARGET surelog POST_BUILD +add_custom_command(TARGET surelog-bin POST_BUILD COMMAND echo " Creating staging for precompiled packages" COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/sv COMMAND mkdir -p ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python @@ -197,8 +226,13 @@ # Installation target INSTALL( - TARGETS surelog + TARGETS surelog-bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) +INSTALL( + TARGETS surelog + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog ) INSTALL( DIRECTORY ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/python @@ -206,3 +240,98 @@ ${CMAKE_BINARY_DIR}/dist/${CMAKE_BUILD_TYPE}/pkg DESTINATION ${CMAKE_INSTALL_LIBDIR}/surelog ) +INSTALL( + FILES ${PROJECT_SOURCE_DIR}/src/CommandLine/CommandLineParser.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/CommandLine +) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/SourceCompile/SymbolTable.h + ${PROJECT_SOURCE_DIR}/src/SourceCompile/CompilationUnit.h + ${PROJECT_SOURCE_DIR}/src/SourceCompile/PreprocessFile.h + ${PROJECT_SOURCE_DIR}/src/SourceCompile/CompileSourceFile.h + ${PROJECT_SOURCE_DIR}/src/SourceCompile/Compiler.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/SourceCompile + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/ErrorReporting/ErrorContainer.h + ${PROJECT_SOURCE_DIR}/src/ErrorReporting/Report.h + ${PROJECT_SOURCE_DIR}/src/ErrorReporting/Waiver.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/ErrorReporting + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/API/PythonAPI.h + ${PROJECT_SOURCE_DIR}/src/API/SLAPI.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/API + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Common/ClockingBlockHolder.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Common + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Design/ClockingBlock.h + ${PROJECT_SOURCE_DIR}/src/Design/Design.h + ${PROJECT_SOURCE_DIR}/src/Design/Instance.h + ${PROJECT_SOURCE_DIR}/src/Design/Signal.h + ${PROJECT_SOURCE_DIR}/src/Design/ValuedComponentI.h + ${PROJECT_SOURCE_DIR}/src/Design/DataType.h + ${PROJECT_SOURCE_DIR}/src/Design/Enum.h + ${PROJECT_SOURCE_DIR}/src/Design/ModuleDefinition.h + ${PROJECT_SOURCE_DIR}/src/Design/Statement.h + ${PROJECT_SOURCE_DIR}/src/Design/VObject.h + ${PROJECT_SOURCE_DIR}/src/Design/DefParam.h + ${PROJECT_SOURCE_DIR}/src/Design/FileCNodeId.h + ${PROJECT_SOURCE_DIR}/src/Design/ModuleInstance.h + ${PROJECT_SOURCE_DIR}/src/Design/Task.h + ${PROJECT_SOURCE_DIR}/src/Design/DesignComponent.h + ${PROJECT_SOURCE_DIR}/src/Design/FileContent.h + ${PROJECT_SOURCE_DIR}/src/Design/Parameter.h + ${PROJECT_SOURCE_DIR}/src/Design/TfPortItem.h + ${PROJECT_SOURCE_DIR}/src/Design/DesignElement.h + ${PROJECT_SOURCE_DIR}/src/Design/Function.h + ${PROJECT_SOURCE_DIR}/src/Design/Scope.h + ${PROJECT_SOURCE_DIR}/src/Design/TimeInfo.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Design + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Testbench/ClassDefinition.h + ${PROJECT_SOURCE_DIR}/src/Testbench/CoverGroupDefinition.h + ${PROJECT_SOURCE_DIR}/src/Testbench/Property.h + ${PROJECT_SOURCE_DIR}/src/Testbench/Variable.h + ${PROJECT_SOURCE_DIR}/src/Testbench/ClassObject.h + ${PROJECT_SOURCE_DIR}/src/Testbench/FunctionMethod.h + ${PROJECT_SOURCE_DIR}/src/Testbench/TaskMethod.h + ${PROJECT_SOURCE_DIR}/src/Testbench/Constraint.h + ${PROJECT_SOURCE_DIR}/src/Testbench/Program.h + ${PROJECT_SOURCE_DIR}/src/Testbench/TypeDef.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Testbench + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Package/Package.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Package +) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Library/Library.h + ${PROJECT_SOURCE_DIR}/src/Library/LibrarySet.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Library + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Config/Config.h + ${PROJECT_SOURCE_DIR}/src/Config/ConfigSet.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Config + ) +INSTALL( + FILES + ${PROJECT_SOURCE_DIR}/src/Expression/ExprBuilder.h + ${PROJECT_SOURCE_DIR}/src/Expression/Expr.h + ${PROJECT_SOURCE_DIR}/src/Expression/Value.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/surelog/Expression + )
diff --git a/Makefile b/Makefile index 2c32c9e..d223a0f 100644 --- a/Makefile +++ b/Makefile
@@ -5,6 +5,13 @@ cd build; cmake ../ -DCMAKE_BUILD_TYPE=Release $(MAKE) -C build cd build; ../tests/regression.tcl mt=0 show_diff +debug: + mkdir -p dbuild/tests; + mkdir -p dbuild/dist; + mkdir -p dist; + cd dbuild; cmake ../ -DCMAKE_BUILD_TYPE=Debug + $(MAKE) -C dbuild + test: mkdir -p build/tests;
diff --git a/src/CommandLine/CommandLineParser.h b/src/CommandLine/CommandLineParser.h index cec2ed5..6253976 100644 --- a/src/CommandLine/CommandLineParser.h +++ b/src/CommandLine/CommandLineParser.h
@@ -104,7 +104,7 @@ bool elaborate() { return m_elaborate; } bool pythonListener() { return m_pythonListener && m_pythonAllowed; } bool pythonAllowed() { return m_pythonAllowed; } - + void noPython() { m_pythonAllowed = false; } bool pythonEvalScriptPerFile() { return m_pythonEvalScriptPerFile && m_pythonAllowed; }
diff --git a/src/README.md b/src/README.md index 5ce0a60..83d1a71 100644 --- a/src/README.md +++ b/src/README.md
@@ -12,15 +12,16 @@ * cd Surelog ```bash make -``` -```bash make install (/usr/local/bin and /usr/local/lib/surelog by default, use DESTDIR= for alternative locations) ``` ### Run a test * dist/Release/surelog -help -* dist/Release/surelog -writepp -parse tests/UnitTest/top.v + +* dist/Release/surelog -writepp -parse ../tests/UnitElabBlock/top.v + +* dist/Release/hellosureworld ../tests/UnitElabBlock/top.v -parse -mutestdout ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## Modus operanti for grammar development:
diff --git a/src/hellosureworld.cpp b/src/hellosureworld.cpp new file mode 100644 index 0000000..62b8403 --- /dev/null +++ b/src/hellosureworld.cpp
@@ -0,0 +1,69 @@ +/* + 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. + */ + +/* + * File: hellosureworld.cpp + * Author: alain + * + * Created on November 20, 2019, 08:07 PM + */ + +// Example of usage: +// cd tests/UnitElabBlock +// hellosureworld top.v -parse -mutestdout + +#include "surelog.h" + +int main(int argc, const char** argv) { + // Read command line, compile a design, use -parse argument + unsigned int code = 0; + SURELOG::SymbolTable* symbolTable = new SURELOG::SymbolTable(); + SURELOG::ErrorContainer* errors = new SURELOG::ErrorContainer(symbolTable); + SURELOG::CommandLineParser* clp = + new SURELOG::CommandLineParser(errors, symbolTable, false, false); + clp->noPython(); + bool success = clp->parseCommandLine(argc, argv); + errors->printMessages(clp->muteStdout()); + SURELOG::Design* design = NULL; + if (success && (!clp->help())) { + SURELOG::Compiler* compiler = + new SURELOG::Compiler(clp, errors, symbolTable); + success = compiler->compile(); + design = compiler->getDesign(); + delete compiler; + auto stats = errors->getErrorStats(); + code = (!success) | stats.nbFatal | stats.nbSyntax | stats.nbError; + } + delete clp; + delete symbolTable; + delete errors; + + // Browse the Data Model + if (design) { + for (auto& top : design->getTopLevelModuleInstances()) { + std::function<void(SURELOG::ModuleInstance*)> inst_visit = + [&inst_visit](SURELOG::ModuleInstance* inst) { + std::cout << "Inst: " << inst->getFullPathName() << std::endl; + for (auto i = 0; i < inst->getNbChildren(); i++) { + inst_visit(inst->getChildren(i)); + } + }; + inst_visit(top); + } + } + delete design; + return code; +}
diff --git a/src/surelog.h b/src/surelog.h new file mode 100644 index 0000000..bcf78d4 --- /dev/null +++ b/src/surelog.h
@@ -0,0 +1,85 @@ +/* + 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. + */ + +// Header file for Surelog library + +// Compilation control classes +#include "CommandLine/CommandLineParser.h" +#include "SourceCompile/SymbolTable.h" +#include "SourceCompile/CompilationUnit.h" +#include "SourceCompile/PreprocessFile.h" +#include "SourceCompile/CompileSourceFile.h" +#include "SourceCompile/Compiler.h" +#include "ErrorReporting/ErrorContainer.h" +#include "ErrorReporting/Report.h" +#include "ErrorReporting/Waiver.h" + +// Antlr headers +#include "antlr4-runtime.h" +using namespace antlr4; + +// Python API (optional - needed to be enabled early in the main with PythonAPI::init if needed) +#include "API/PythonAPI.h" + +// Full C++ DataModel API +#include "Common/ClockingBlockHolder.h" +#include "Design/ClockingBlock.h" +#include "Design/Design.h" +#include "Design/Instance.h" +#include "Design/Signal.h" +#include "Design/ValuedComponentI.h" +#include "Design/DataType.h" +#include "Design/Enum.h" +#include "Design/ModuleDefinition.h" +#include "Design/Statement.h" +#include "Design/VObject.h" +#include "Design/DefParam.h" +#include "Design/FileCNodeId.h" +#include "Design/ModuleInstance.h" +#include "Design/Task.h" +#include "Design/DesignComponent.h" +#include "Design/FileContent.h" +#include "Design/Parameter.h" +#include "Design/TfPortItem.h" +#include "Design/DesignElement.h" +#include "Design/Function.h" +#include "Design/Scope.h" +#include "Design/TimeInfo.h" +#include "Testbench/ClassDefinition.h" +#include "Testbench/CoverGroupDefinition.h" +#include "Testbench/Property.h" +#include "Testbench/Variable.h" +#include "Testbench/ClassObject.h" +#include "Testbench/FunctionMethod.h" +#include "Testbench/TaskMethod.h" +#include "Testbench/Constraint.h" +#include "Testbench/Program.h" +#include "Testbench/TypeDef.h" +#include "Package/Package.h" +#include "Library/Library.h" +#include "Library/LibrarySet.h" +#include "Config/Config.h" +#include "Config/ConfigSet.h" +#include "Expression/ExprBuilder.h" +#include "Expression/Expr.h" +#include "Expression/Value.h" + +// Limited C-like API +#include "API/SLAPI.h" + + + +
diff --git a/tests/UnitLibrary/UnitLibrary.sl b/tests/UnitLibrary/UnitLibrary.sl index 06f921e..359e550 100644 --- a/tests/UnitLibrary/UnitLibrary.sl +++ b/tests/UnitLibrary/UnitLibrary.sl
@@ -1 +1 @@ - -map lib.map -cfgfile configs.cfg -cfg top -cfg bad -writepp -parse -verbose -d lib -d inst +incdir+../../../UVM/ovm-2.1.2/src/ +incdir+../../../UVM/vmm-1.1.1a/sv -mt max -fileunit + -map lib.map -cfgfile configs.cfg -cfg top -cfg bad -parse -verbose -d lib -d inst +incdir+../../third_party/UVM/ovm-2.1.2/src/ +incdir+../../third_party/UVM/vmm-1.1.1a/sv -mt 0 -fileunit