diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..a2683b8
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,96 @@
+Language: Cpp
+# BasedOnStyle: LLVM
+# should be in line with IndentWidth
+AccessModifierOffset: -4
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignOperands: true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: All
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: false
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+ AfterClass: false
+ AfterControlStatement: false
+ AfterEnum: false
+ AfterFunction: false
+ AfterNamespace: false
+ AfterObjCDeclaration: false
+ AfterStruct: false
+ AfterUnion: false
+ BeforeCatch: false
+ BeforeElse: false
+ IndentBraces: false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Attach
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: true
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: true
+ColumnLimit: 140
+CommentPragmas: '^( IWYU pragma:| @suppress)'
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 0
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: false
+DisableFormat: false
+ExperimentalAutoDetectBinPacking: false
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeCategories:
+ - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
+ Priority: 2
+ - Regex: '^(<|"(gtest|isl|json)/)'
+ Priority: 3
+ - Regex: '.*'
+ Priority: 1
+IncludeIsMainRegex: '$'
+IndentCaseLabels: false
+IndentWidth: 4
+IndentWrappedFunctionNames: false
+JavaScriptQuotes: Leave
+JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd: ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+PointerAlignment: Left
+ReflowComments: true
+SortIncludes: true
+SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: Never
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles: false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard: Cpp11
+TabWidth: 4
+UseTab: Never
+...
+
diff --git a/.cproject b/.cproject
index fee098f..23a37ba 100644
--- a/.cproject
+++ b/.cproject
@@ -14,9 +14,9 @@
-
+
-
+
-
+
-
-
-
+
+
+
@@ -112,8 +112,66 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -126,6 +184,7 @@
+
@@ -133,15 +192,37 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ make
+ $<cmake4eclipse_dyn>
+ format
+ true
+ true
+ true
+
+
-
\ No newline at end of file
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..de09571
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,8 @@
+module load ./Modulefile
+distro=`/bin/lsb_release -i -s`
+if [ $distro == "CentOS" ]; then
+ . /opt/rh/devtoolset-8/enable
+ . /opt/rh/rh-python38/enable
+fi
+layout python3
+[ -f .envrc.$USER ] && . .envrc.$USER
diff --git a/.gitignore b/.gitignore
index fad1dc6..58016a4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,24 @@
/build/
/Debug/
.settings
-/.venv
+/.venv*
/Debug-PA/
/_build/
/install/
-/analysis_results
\ No newline at end of file
+/analysis_results
+.vscode
+*.log
+*tcc_jit*.c
+*.disass
+*.dis
+*.objdump
+*.asm
+*.signature
+*.elf
+*.trc
+/*.core_desc
+/fasterDecoding/
+*.ll
+/dbt-rise-plugins
+/.direnv
+/TGC_C_XRB/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea67795..fcf0afd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,147 +1,240 @@
-cmake_minimum_required(VERSION 3.16)
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake)
+cmake_minimum_required(VERSION 3.20)
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake)
-project(TGFS-ISS VERSION 1.0.0 LANGUAGES CXX)
+project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
-option(CODEGEN "enable generation of ISS code" ON)
-set(CORE_NAME TGC_C CACHE STRING "The core to build the ISS for" )
set(WITH_LLVM FALSE CACHE BOOL "Build LLVM based backend")
-
-set(CMAKE_CXX_STANDARD 14)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
-set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-set(CMAKE_INSTALL_RPATH "${ORIGIN}")
-include(CheckCXXCompilerFlag)
-include(GNUInstallDirs)
-
-CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
-if(COMPILER_SUPPORTS_MARCH_NATIVE)
- if("${CMAKE_BUILD_TYPE}" STREQUAL "")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
- elseif(NOT(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo"))
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
- endif()
-endif()
-
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- set(warnings "-Wall -Wextra -Werror")
- #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
- set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
- set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
-elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
- set(warnings "/W4 /WX /EHsc")
-endif()
-
-include(ConanInline)
-if(BUILD_SHARED_LIBS)
- set(SHARED_FLAG "True")
-else()
- set(SHARED_FLAG "False")
-endif()
-
-set(CONAN_BOOST_OPTIONS
-boost:fPIC=True
-boost:shared=${SHARED_FLAG}
-boost:header_only=False
-boost:without_contract=True
-boost:without_graph=True
-boost:without_graph_parallel=True
-boost:without_iostreams=True
-boost:without_json=True
-boost:without_locale=True
-boost:without_log=True
-boost:without_math=True
-boost:without_mpi=True
-boost:without_nowide=True
-boost:without_python=True
-boost:without_random=True
-boost:without_regex=True
-boost:without_stacktrace=True
-boost:without_test=True
-boost:without_timer=True
-boost:without_type_erasure=True
-boost:without_wave=True
-)
-
-set(B2_VERSION 4.9.3)
-set(CONAN_PACKAGE_LIST
- fmt/8.0.1
- spdlog/1.9.2
- boost/1.75.0
- gsl-lite/0.37.0
- elfio/3.8
- tcc/0.9.27
- lz4/1.9.3
- yaml-cpp/0.7.0
- jsoncpp/1.9.5
-)
-
-set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
-if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
- list(APPEND CONAN_PACKAGE_OPTIONS lua:compile_as_cpp=False)
- list(APPEND CONAN_PACKAGE_LIST tcc/0.9.27 seasocks/1.4.4 lua/5.4.3)
-endif()
-if(NOT USE_CWR_SYSTEMC AND NOT USE_NCSC_SYSTEMC AND NOT DEFINED ENV{SYSTEMC_HOME})
- set(CONAN_PACKAGE_LIST ${CONAN_PACKAGE_LIST}
- systemc/2.3.3
- systemc-cci/1.0.0
- )
- set(CONAN_PACKAGE_OPTIONS ${CONAN_PACKAGE_OPTIONS}
- systemc:shared=${SHARED_FLAG}
- systemc-cci:shared=${SHARED_FLAG}
- )
-endif()
-
-conan_check()
-conan_add_remote(NAME minres URL https://git.minres.com/api/packages/Tooling/conan)
-# Boost on CentOS 7 quirks: the b2 of conan-center is build against a newer libstdc++ and therefore does not run
-# with the oooooold libs on CentOS 7. Therefore we build our own version of b2 if it is not there
-set(B2_META $ENV{HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
-if(DEFINED ENV{CONAN_USER_HOME})
- set(B2_META $ENV{CONAN_USER_HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
-endif()
-if(NOT EXISTS ${B2_META})
- conan_configure(REQUIRES b2/${B2_VERSION})
- conan_cmake_autodetect(settings)
- conan_cmake_install(PATH_OR_REFERENCE . BUILD b2 SETTINGS ${settings})
-endif()
-# Boost on CentOS 7 quirks end
-conan_cmake_configure(REQUIRES ${CONAN_PACKAGE_LIST}
- GENERATORS cmake_find_package
- OPTIONS ${CONAN_PACKAGE_OPTIONS}
- )
-conan_cmake_autodetect(settings)
-conan_install()
-set(CONAN_CMAKE_SILENT_OUTPUT ON)
-find_package(tcc QUIET)
-find_package(elfio)
-find_package(fmt)
-find_package(spdlog)
-find_package(gsl-lite)
-
-set(Boost_NO_BOOST_CMAKE ON) # Don't do a find_package in config mode before searching for a regular boost install.
-set(BOOST_ROOT ${CONAN_BOOST_ROOT})
-find_package(Threads)
-find_package(ZLIB)
-
-include(clang-format)
-set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Add clang-tidy automatically to builds")
-if (ENABLE_CLANG_TIDY)
- find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/local/opt/llvm/bin )
- if (CLANG_TIDY_EXE)
- message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
- set(CLANG_TIDY_CHECKS "-*,modernize-*")
- set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*';-fix"
- CACHE STRING "" FORCE)
+if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
+ ###########################################################################
+ # stand alone build settings
+ ###########################################################################
+ set(CORE_NAME TGC5C CACHE STRING "The core to build the ISS for" )
+ option(BUILD_COMMON_FW "Enable the automatic download and build of some firmware to run on the ISS" OFF)
+ option(ENABLE_SANITIZER "Enable address sanitizer" OFF)
+ option(ENABLE_CLANG_TIDY "Add clang-tidy and clang-format automatically to builds" OFF)
+ option(WITH_TCC "Build TCC backend" OFF)
+ option(WITH_LLVM "Build LLVM backend" OFF)
+ option(WITH_ASMJIT "Build ASMJIT backend" OFF)
+
+ set(CMAKE_CXX_STANDARD 14)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+ set(CMAKE_INSTALL_RPATH "${ORIGIN}")
+ include(CheckCXXCompilerFlag)
+ CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
+ if(COMPILER_SUPPORTS_MARCH_NATIVE)
+ if("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
+ elseif(NOT(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo"))
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
+ endif()
+ endif()
+
+ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(warnings "-Wall -Wextra -Werror")
+ set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
+ set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ set(warnings "/W4 /WX /EHsc")
+ endif()
+ if(ENABLE_SANITIZER)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
+ endif()
+ include(GNUInstallDirs)
+ include(ConanInline)
+ if(BUILD_SHARED_LIBS)
+ set(SHARED_FLAG "True")
else()
- message(AUTHOR_WARNING "clang-tidy not found!")
- set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it
+ set(SHARED_FLAG "False")
+ endif()
+
+ set(CONAN_BOOST_OPTIONS
+ boost:fPIC=True
+ boost:shared=False
+ boost:header_only=False
+ boost:without_contract=True
+ boost:without_graph=True
+ boost:without_graph_parallel=True
+ boost:without_iostreams=True
+ boost:without_json=True
+ boost:without_locale=True
+ boost:without_log=True
+ boost:without_math=True
+ boost:without_mpi=True
+ boost:without_nowide=True
+ boost:without_python=True
+ boost:without_random=True
+ boost:without_regex=True
+ boost:without_stacktrace=True
+ boost:without_test=True
+ boost:without_timer=True
+ boost:without_type_erasure=True
+ boost:without_wave=True
+ )
+
+ set(B2_VERSION 4.9.6)
+ set(CM_VERSION 3.20.5)
+ set(LLVM_VERSION 13.0.0)
+ set(CONAN_PACKAGE_LIST
+ fmt/8.0.1
+ spdlog/1.9.2
+ boost/1.75.0
+ gsl-lite/0.37.0
+ elfio/3.8
+ lz4/1.9.3
+ yaml-cpp/0.7.0
+ jsoncpp/1.9.5
+ zlib/1.2.12
+ )
+ set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
+
+ if(WITH_LLVM)
+ list(APPEND CONAN_PACKAGE_LIST llvm-core/${LLVM_VERSION})
+ list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
+ endif()
+ if(WITH_ASMJIT)
+ list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20230325)
+ list(APPEND CONAN_PACKAGE_OPTIONS asmjit:shared=False)
+ endif()
+ if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
+ list(APPEND CONAN_PACKAGE_OPTIONS lua:compile_as_cpp=False)
+ list(APPEND CONAN_PACKAGE_LIST lua/5.4.3)
+ endif()
+
+ conan_check()
+ conan_add_remote(NAME minres URL https://git.minres.com/api/packages/Tooling/conan)
+ ###########################################################################
+ # Boost on CentOS 7 quirks: the b2 of conan-center is build against a newer libstdc++ and therefore does not run
+ # with the oooooold libs on CentOS 7. Therefore we build our own version of b2 if it is not there
+ ###########################################################################
+ find_program(LSB_RELEASE_EXEC lsb_release)
+ if(NOT LSB_RELEASE_EXEC-NOTFOUND)
+ execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(LSB_RELEASE_ID_SHORT MATCHES "CentOS")
+ set(B2_META $ENV{HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
+ set(CM_META $ENV{HOME}/.conan/data/cmake/${CM_VERSION}/_/_/metadata.json)
+ set(LLVM_META $ENV{HOME}/.conan/data/llvm-core/${LLVM_VERSION}/_/_/metadata.json)
+ if(DEFINED ENV{CONAN_USER_HOME})
+ set(B2_META $ENV{CONAN_USER_HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
+ set(CMAKE_META $ENV{CONAN_USER_HOME}/.conan/data/cmake/${CM_VERSION}/_/_/metadata.json)
+ set(LLVM_META $ENV{CONAN_USER_HOME}/.conan/data/llvm-core/${LLVM_VERSION}/_/_/metadata.json)
+ endif()
+ if(NOT EXISTS ${B2_META})
+ conan_configure(REQUIRES b2/${B2_VERSION})
+ conan_cmake_autodetect(settings BUILD_TYPE Release)
+ conan_cmake_install(PATH_OR_REFERENCE . BUILD b2 SETTINGS ${settings})
+ endif()
+ if(NOT EXISTS ${CM_META})
+ conan_configure(REQUIRES cmake/${CM_VERSION})
+ conan_cmake_autodetect(settings BUILD_TYPE Release)
+ conan_cmake_install(PATH_OR_REFERENCE . BUILD cmake SETTINGS ${settings})
+ endif()
+ if(NOT EXISTS ${LLVM_META})
+ conan_configure(REQUIRES llvm-core/13.0.0)
+ conan_cmake_autodetect(settings BUILD_TYPE Release)
+ conan_cmake_install(PATH_OR_REFERENCE . BUILD llvm-core SETTINGS ${settings})
+ endif()
+ endif()
+ endif()
+ ###########################################################################
+ # Boost on CentOS 7 quirks end
+ ###########################################################################
+ conan_cmake_configure(REQUIRES ${CONAN_PACKAGE_LIST}
+ GENERATORS cmake_find_package
+ OPTIONS ${CONAN_PACKAGE_OPTIONS}
+ )
+ conan_cmake_autodetect(settings)
+ conan_install()
+ set(CONAN_CMAKE_SILENT_OUTPUT ON)
+
+ find_package(fmt)
+ find_package(spdlog)
+ find_package(lz4)
+ find_package(gsl-lite)
+ find_package(yaml-cpp)
+ set(Boost_NO_BOOST_CMAKE ON) # Don't do a find_package in config mode before searching for a regular boost install.
+ set(BOOST_ROOT ${CONAN_BOOST_ROOT})
+ find_package(Threads)
+ find_package(ZLIB)
+
+ if(USE_CWR_SYSTEMC)
+ include(SystemCPackage)
+ endif()
+ ###############################################################################
+ # setup clang-format and clang-tidy
+ ###############################################################################
+ if (ENABLE_CLANG_TIDY)
+ set(CLANG_FORMAT_EXCLUDE_PATTERNS "scc" "install")
+ find_package(ClangFormat)
+ find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin )
+ if (CLANG_TIDY_EXE)
+ message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
+ set(CLANG_TIDY_CHECKS "-*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-avoid-bind.PermissiveParameterList")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-loop-convert.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-make-shared.")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-make-unique.")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-pass-by-value.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-raw-string-literal.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-replace-auto-ptr.IncludeStyle")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-replace-disallow-copy-and-assign-macro.MacroName")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-replace-random-shuffle.IncludeStyle")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-auto.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-bool-literals.IgnoreMacros")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-default-member-init.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-emplace.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-equals-default.IgnoreMacros")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-equals-delete.IgnoreMacros")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-nodiscard.ReplacementString")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-noexcept.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-nullptr.NullMacros")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-override.*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-transparent-functors.SafeMode")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-use-using.IgnoreMacros")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors")
+ #set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},cppcoreguidelines-*")
+ set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},clang-diagnostic-*,clang-analyzer-*")
+ set(DO_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*';-fix"
+ CACHE STRING "" FORCE)
+ else()
+ message(WARNING "clang-tidy not found!")
+ set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it
+ endif()
+ endif()
+
+ if(FW_BUILD)
+ include(FetchContent)
+ set(FETCHCONTENT_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}/..)
+ FetchContent_Declare(
+ riscvfw
+ GIT_REPOSITORY https://git.minres.com/Firmware/Firmwares.git
+ GIT_TAG main
+ GIT_SHALLOW OFF
+ UPDATE_DISCONNECTED ON
+ )
+ FetchContent_GetProperties(riscvfw)
+ if(NOT riscvfw_POPULATED)
+ FetchContent_Populate(riscvfw)
+ endif()
+ add_subdirectory(${riscvfw_SOURCE_DIR})
endif()
endif()
add_subdirectory(dbt-rise-core)
-add_subdirectory(scc)
+if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS" AND NOT USE_CWR_SYSTEMC)
+ set(SCC_CMAKE_CONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/scc)
+ add_subdirectory(scc/src/common)
+else()
+ add_subdirectory(scc)
+endif()
add_subdirectory(dbt-rise-tgc)
+if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
+ add_subdirectory(dbt-rise-plugins)
+endif()
+include(CTest)
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..d21ea3d
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,74 @@
+void checkout_project(String repoUrl, String branch = 'develop') {
+ checkout([
+ $class: 'GitSCM',
+ branches: [
+ [name: "*/${branch}"]
+ ],
+ extensions: [
+ [$class: 'CleanBeforeCheckout'],
+ [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true, reference: '', trackingSubmodules: false]
+ ],
+ submoduleCfg: [],
+ userRemoteConfigs: [
+ [credentialsId: 'gitea-jenkins', url: repoUrl]
+ ]
+ ])
+}
+
+pipeline {
+ agent {
+ docker {
+ image 'git.minres.com/tooling/riscof_sail:latest'
+ args ' -e CONAN_USER_HOME=/var/jenkins_home/workspace/riscof_sail'
+ }
+ }
+ stages {
+ stage("Checkout TGC-ISS"){
+ steps {
+ checkout_project("https://git.minres.com/TGFS/TGC-ISS.git", "develop")
+ }
+ }
+ stage("build TGC-ISS"){
+ steps {
+ sh 'conan profile new default --detect --force '
+ sh 'cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_ASMJIT=ON -DWITH_TCC=ON -DWITH_LLVM=ON'
+ sh 'cmake --build build -j'
+ }
+ }
+ stage("Checkout TGC-Compliance"){
+ steps {
+ dir("TGC-COMPLIANCE"){
+ checkout_project("https://git.minres.com/TGFS/TGC-COMPLIANCE.git", "master")
+ }
+ }
+ }
+ stage("Test backends"){
+ parallel {
+ stage("Test interp") {
+ steps {
+ sh "mkdir interp"
+ sh "python3 TGC-COMPLIANCE/run_act.py -core TGC5C -sim build/dbt-rise-tgc/tgc-sim -w interp --dockerless --backend interp"
+ }
+ }
+ stage("Test tcc") {
+ steps {
+ sh "mkdir tcc"
+ sh "python3 TGC-COMPLIANCE/run_act.py -core TGC5C -sim build/dbt-rise-tgc/tgc-sim -w tcc --dockerless --backend tcc"
+ }
+ }
+ stage("Test asmjit") {
+ steps {
+ sh "mkdir asmjit"
+ sh "python3 TGC-COMPLIANCE/run_act.py -core TGC5C -sim build/dbt-rise-tgc/tgc-sim -w asmjit --dockerless --backend asmjit"
+ }
+ }
+ stage("Test llvm") {
+ steps {
+ sh "mkdir llvm"
+ sh "python3 TGC-COMPLIANCE/run_act.py -core TGC5C -sim build/dbt-rise-tgc/tgc-sim -w llvm --dockerless --backend llvm"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Modulefile b/Modulefile
index 6a191ef..92a2331 100644
--- a/Modulefile
+++ b/Modulefile
@@ -13,9 +13,10 @@ if { $distro == "CentOS" && ![info exists ::env(PROJECT)] && ![info exists ::env
puts stderr "Don't forget to execute 'scl enable devtoolset-7 bash'"
}
+module load tools/utilities
module load tools/cmake
-#module load tools/gcc-riscv64/9.2.0
-module load tools/gcc-riscv32-unknown-elf/11
+module load tools/clang
+module load tools/gcc-riscv64-unknown-elf/13
setenv PROJECT TGFS-ISS
diff --git a/README.md b/README.md
index f1a42f7..4f360f1 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
```
-### Accellera SystemC build
+### Standalone (C++) build
* start an out-of-source build:
@@ -65,14 +65,22 @@ Assuming environment for Platform Architect is properly set up.
```
cd TGC-ISS/
- export TGFS_INSTALL_ROOT `pwd`/install
+ export TGFS_INSTALL_ROOT=`pwd`/install
export SNPS_ENABLE_MEM_ON_DEMAND_IN_GENERIC_MEM=1
+ source $COWAREHOME/SLS/linux/setup.sh pae
export CC=$COWAREHOME/SLS/linux/common/bin/gcc
export CXX=$COWAREHOME/SLS/linux/common/bin/g++
cmake -S . -B build/PA -DCMAKE_BUILD_TYPE=Debug -DUSE_CWR_SYSTEMC=ON \
- -DBUILD_SHARED_LIBS=ON -DCODEGEN=OFF -DCMAKE_INSTALL_PREFIX=${TGFS_INSTALL_ROOT}
+ -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=${TGFS_INSTALL_ROOT}
cmake --build build/PA --target install -j16
```
+The Synopsys PA installation requirements may vary on your system.
+Now you may change to the directory dbt-rise-tgc/contrib to import the core model
-Now you may change to dbt-rise-tgc/contrib to import the core model
\ No newline at end of file
+```
+
+cd dbt-rise-tgc/contrib
+pct tgc_import.tcl
+
+```
\ No newline at end of file
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..16fd4e3
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,13 @@
+export TGFS_INSTALL_ROOT=`pwd`/install
+module load tools/pa/T-2022.06
+module load tools/cmake
+export SNPS_ENABLE_MEM_ON_DEMAND_IN_GENERIC_MEM=1
+export CC=$COWAREHOME/common/bin/gcc
+export CXX=$COWAREHOME/common/bin/g++
+cmake -S . -B build/PA -DCMAKE_BUILD_TYPE=Debug -DUSE_CWR_SYSTEMC=ON -DBUILD_SHARED_LIBS=ON \
+ -DCODEGEN=OFF -DCMAKE_INSTALL_PREFIX=${TGFS_INSTALL_ROOT}
+cmake --build build/PA --target install -j16
+#cd dbt-rise-tgc/contrib
+# import the TGC core itself
+#pct tgc_import.tcl
+
diff --git a/dbt-rise-core b/dbt-rise-core
index fa6166a..6a5bb0f 160000
--- a/dbt-rise-core
+++ b/dbt-rise-core
@@ -1 +1 @@
-Subproject commit fa6166ae43b90d4263e9d50402a055d6172ccb69
+Subproject commit 6a5bb0fe5e067c23678876716777f8e65c60636a
diff --git a/dbt-rise-tgc b/dbt-rise-tgc
index cfa7b72..3fd51cc 160000
--- a/dbt-rise-tgc
+++ b/dbt-rise-tgc
@@ -1 +1 @@
-Subproject commit cfa7b7236397dc84062dc108aadf4bb9c2a02e2b
+Subproject commit 3fd51cc68c4547cb1e89d56a2010ff3af0ff5e97
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..5cbe7e7
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+conan==1.59
diff --git a/scc b/scc
index dfb06a9..4dcc549 160000
--- a/scc
+++ b/scc
@@ -1 +1 @@
-Subproject commit dfb06a90801b3a7e55b5d4a03d8f161a26063a1c
+Subproject commit 4dcc5497c587afb0c77423aa532a29082bf03969
diff --git a/scripts/makeJitOutputReadable.py b/scripts/makeJitOutputReadable.py
new file mode 100644
index 0000000..674b736
--- /dev/null
+++ b/scripts/makeJitOutputReadable.py
@@ -0,0 +1,26 @@
+import re
+import os
+'''
+This script takes all files that get dumped by the tcc backend when using the --dump-ir
+option and replaces the Integers of addresses with their hex representation to allow
+for easier debugging.
+'''
+current_dir = os.getcwd() # Get the current directory
+
+files_with_tcc_jit = [file for file in os.listdir(current_dir) if"jit" in file and not file.startswith("readable")]
+
+for each in files_with_tcc_jit:
+ readable_file = f"readable_{each}"
+ if os.path.exists(readable_file):
+ os.remove(readable_file)
+ with open(each, "r") as file:
+ content = file.read()
+for each in files_with_tcc_jit:
+ with open(each, "r") as file:
+ content = file.read()
+
+ # Replace numbers ending with "U" by their hex representation
+ content = re.sub(r'\b(\d+)U\b(?=U)?', lambda m: hex(int(m.group(1))), content)
+
+ with open(f"readable_{each}", "w") as file:
+ file.write(content)
\ No newline at end of file
diff --git a/scripts/run_riscv_tests.sh b/scripts/run_riscv_tests.sh
new file mode 100755
index 0000000..f168835
--- /dev/null
+++ b/scripts/run_riscv_tests.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+##
+
+# Absolute path to this script, e.g. /home/user/bin/foo.sh
+SCRIPT=`readlink -f "$0"`
+# Absolute path this script is in, thus /home/user/bin
+SCRIPTDIR=`dirname "$SCRIPT"`
+SCRIPTNAME=`basename "$SCRIPT"`
+function print_help {
+ echo "Usage: $SCRIPTNAME [-b ] [-s ]}"
+ echo "Run UCB risc-v compliance test suite on backends"
+ echo "Optional cli arguments:"
+ echo " -b backend type, default all"
+ echo " -s simulator arguments"
+ echo " -h print help"
+ echo " -v increase verbosity"
+ echo " -t set build type"
+}
+SIM_ARGS="-v1"
+BACKENDS=("interp" "tcc" "llvm" "asmjit")
+DEBUG=0
+BUILD_TYPE=Debug
+while getopts 'b:s:hvt:' c
+do
+ case $c in
+ b) BACKENDS=($OPTARG);;
+ s) SIM_ARGS=$OPTARG ;;
+ h) print_help; exit 0 ;;
+ v) DEBUG=1 ;;
+ t) BUILD_TYPE = $OPTARG;;
+ ?)
+ print_help >&2
+ exit 1
+ ;;
+ esac
+done
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+ROOT_DIR="$(dirname "$DIR")"
+
+RISCV_TEST=$ROOT_DIR/build/riscv-tests
+# prepare riscv-test binaries
+if [ ! -d $RISCV_TEST ]; then
+ mkdir -p $ROOT_DIR/build; cd $ROOT_DIR/build
+ git clone --recursive https://github.com/riscv/riscv-tests.git
+ cd $RISCV_TEST
+ autoconf
+ ./configure --with-xlen=32
+ cd $ROOT_DIR
+ make -C $RISCV_TEST -j -k
+fi
+# check that we have an executable
+RISCV_EXE=$ROOT_DIR/build/${BUILD_TYPE}/dbt-rise-tgc/tgc-sim
+if [ ! -x $RISCV_EXE ]; then
+ mkdir -p build/${BUILD_TYPE}
+ echo "running cmake -B build/${BUILD_TYPE} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DWITH_TCC=ON -DWITH_LLVM=ON "
+ cmake -S . -B build/${BUILD_TYPE} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DWITH_TCC=ON -DWITH_LLVM=ON ../.. || exit 1
+ cmake --build build/${BUILD_TYPE} -j 20 || exit 1
+fi
+
+test_ui_list=`find ${RISCV_TEST}/isa -type f -name rv32ui-p-\* -executable | grep -v fence | grep -v ma_data |sort`
+test_uc_list=`find ${RISCV_TEST}/isa -type f -name rv32uc-p-\* -executable | grep -v fence | sort`
+test_um_list=`find ${RISCV_TEST}/isa -type f -name rv32um-p-\* -executable | grep -v fence | sort`
+test_list="$test_ui_list $test_uc_list $test_um_list $test_mmode_list"
+
+for backend in "${BACKENDS[@]}"; do
+ failed_list=()
+ for elf in $test_list; do
+ [ $DEBUG -eq 0 ] || echo Running "${RISCV_EXE} $SIM_ARGS -f $elf --backend $backend"
+ ${RISCV_EXE} $SIM_ARGS -f $elf --backend $backend
+ if [ $? != 0 ]; then
+ failed_list+="$backend:$elf "
+ fi
+ done
+ tcount=`echo $test_list | wc -w`
+ if [ ! -z "$failed_list" ]; then
+ fcount=`echo $failed_list | wc -w`
+ echo "($backend) $fcount of $tcount test(s) failed:"
+ echo $failed_list | tr ' ' '\n'
+ else
+ echo
+ echo "($backend) All $tcount tests passed."
+ if [ $DEBUG -eq 1 ];then
+ echo "List of executed tests:"
+ for t in $test_list; do
+ name=`basename $t`
+ echo " $name"
+ done
+ fi
+ fi
+done