Compare commits
159 Commits
1baed20dbb
...
main
Author | SHA1 | Date | |
---|---|---|---|
788d52885c | |||
bd3139b623 | |||
6fe60e03cd | |||
8d6fdb6ba7 | |||
4a74a73bee | |||
5d78cdf4df | |||
e192c71104 | |||
140c2d67b1 | |||
7d41bb9525 | |||
b2f87e8fad | |||
27b23dce8d | |||
2ff133732d | |||
dee78d1279 | |||
dfad138010 | |||
de4a6124e6 | |||
d063650904 | |||
8eed85377b | |||
fabceb7a93 | |||
88ad16ec94 | |||
abef96d93d | |||
478d1d4ac5 | |||
5f43bb9c0f | |||
d9706c58f9 | |||
45b55d5c24 | |||
bacc9a8296 | |||
b6e22e863a | |||
aad4a27516 | |||
e6b34cfad9 | |||
3fb45df48c | |||
3489fd1516 | |||
8d199ba7ca | |||
30dd1044b0 | |||
d27cbcc05b | |||
020a4d793f | |||
ed08913f26 | |||
17773cf9b1 | |||
ae71682920 | |||
5cfbbbc9ca | |||
7d71ebca30 | |||
0b7969becf | |||
5bb29d2d3a | |||
46128e395f | |||
3dc80460ac | |||
5d9d146aa2 | |||
a4ac323306 | |||
97190a133c | |||
c09fda3f25 | |||
47d7357ed9 | |||
78245ec817 | |||
4058eed106 | |||
1fee44c084 | |||
497b1d33d4 | |||
db0d125651 | |||
c365d4f822 | |||
6ce8eada3e | |||
6ee4840d8d | |||
2a0899a671 | |||
c0e557316f | |||
c4a746d4c8 | |||
45e5ab6133 | |||
8811f13d1c | |||
c2056c30f3 | |||
3da38170ff | |||
5c31d06a58 | |||
99e36acbae | |||
21ca5aee7a | |||
c99a7982b7 | |||
3d657d42bc | |||
8de84ca4be | |||
fa1c960247 | |||
ab4a0eeb6e | |||
cc61e0b476 | |||
856e251be4 | |||
b118b43988 | |||
e8037b9c27 | |||
c0bae483c1 | |||
d7d072bb0b | |||
d488581e3a | |||
97b52b9e05 | |||
6dbce5cb23 | |||
c19e7c6a46 | |||
bfea2374b4 | |||
2825646edc | |||
c1e0379f7b | |||
d602c61dfe | |||
4b65d31b89 | |||
bbe7e7525e | |||
ac23db44cf | |||
4964fe3f79 | |||
bea38f761d | |||
405bae926c | |||
9c0cb351fe | |||
3b6f7b5e83 | |||
dc8e631824 | |||
e67306b781 | |||
f8152e8ca5 | |||
2dc4409928 | |||
558d5849a6 | |||
aa69088189 | |||
92283be000 | |||
73c9934708 | |||
ff649a9d97 | |||
4c2d8f2d97 | |||
6e3bbad01b | |||
ae03038323 | |||
b8fa095940 | |||
d4a2e133eb | |||
17b8e4a7fc | |||
ddec62b3a3 | |||
5a7ab89f43 | |||
36487d1b75 | |||
c65cf3a804 | |||
e03001dd91 | |||
3d216107d9 | |||
ff1fe0f1af | |||
493b8be2ed | |||
b347393ff6 | |||
bdb7cbd36d | |||
646452e0ea | |||
f41056924c | |||
bc1e82952a | |||
03bb12efdb | |||
7b6c0291b2 | |||
bd30872ed3 | |||
74abd3032a | |||
2e14223e1e | |||
4a09f1c634 | |||
d322c7c9d8 | |||
bc6eed67e8 | |||
57ce6aab92 | |||
734522f6c3 | |||
9c7b95ae23 | |||
cf8472f2fc | |||
cc23e02b89 | |||
f21461e1ab | |||
13094e78ce | |||
7bb4c283a3 | |||
86f58adaa4 | |||
4efcbfbd35 | |||
ac08908336 | |||
60e6fec07d | |||
061b21ed51 | |||
406cec6d27 | |||
95096fe98a | |||
5bbdb3bfa2 | |||
6c304055bf | |||
6ef27d8c58 | |||
4c64d076fc | |||
538406e9f3 | |||
0d5eb6c1ce | |||
c785b0e33c | |||
dd47d9d9d1 | |||
c9ce22379b | |||
607aca574c | |||
247bed12ee | |||
b7ee50dc21 | |||
417921fc55 | |||
e0e9a207e8 | |||
de56a5c5a3 |
77
.cproject
77
.cproject
@@ -54,7 +54,7 @@
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="Debug"/>
|
||||
<def name="CMAKE_INSTALL_PREFIX" type="FILEPATH" val="${ProjDirPath}/install"/>
|
||||
<def name="WITH_TCC" type="BOOL" val="ON"/>
|
||||
<def name="FW_BUILD" type="BOOL" val="ON"/>
|
||||
<def name="BUILD_COMMON_FW" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
@@ -164,7 +164,7 @@
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1698593290265" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1741980051132" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<options/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="RelWithDebInfo"/>
|
||||
@@ -172,6 +172,66 @@
|
||||
<def name="WITH_TCC" type="BOOL" val="ON"/>
|
||||
<def name="FW_BUILD" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
|
||||
<def name="WITH_LLVM" type="BOOL" val="ON"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221" moduleId="org.eclipse.cdt.core.settings" name="RelWithDebInfo4Prof">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221" name="RelWithDebInfo4Prof" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221." name="/" resourcePath="">
|
||||
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1676282966" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
|
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.base.199403809" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
|
||||
<builder buildPath="/TGC-ISS/_build/Debug" id="cmake4eclipse.mbs.builder.1047317958" keepEnvironmentInBuildfile="false" name="CMake Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="cmake4eclipse.mbs.builder"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1763962491" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.300429051" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.934487129" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="CWR_SYSTEMC=1"/>
|
||||
</option>
|
||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1430696020" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
||||
</tool>
|
||||
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.9511508" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
|
||||
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.695529941" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
||||
</tool>
|
||||
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1813114373" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1557756316" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
|
||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.536309197" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
|
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||
</inputType>
|
||||
</tool>
|
||||
<tool id="cdt.managedbuild.tool.gnu.assembler.base.587229911" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
|
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1060210827" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
<storageModule buildDir="build/${ConfigName}" moduleId="de.marw.cdt.cmake.core.settings">
|
||||
<options/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1727093289061" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<options/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="RelWithDebInfo"/>
|
||||
<def name="CMAKE_INSTALL_PREFIX" type="FILEPATH" val="${ProjDirPath}/install"/>
|
||||
<def name="WITH_TCC" type="BOOL" val="ON"/>
|
||||
<def name="FW_BUILD" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_GPROF" type="BOOL" val="ON"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
</cconfiguration>
|
||||
@@ -192,7 +252,6 @@
|
||||
<resource resourceType="PROJECT" workspacePath="/TGC-ISS"/>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||
<storageModule cmakelistsFolder="" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<targets>
|
||||
@@ -214,4 +273,16 @@
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
|
||||
<buildTargets>
|
||||
<target name="format" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||
<buildCommand>make</buildCommand>
|
||||
<buildArguments>$<cmake4eclipse_dyn></buildArguments>
|
||||
<buildTarget>format</buildTarget>
|
||||
<stopOnError>true</stopOnError>
|
||||
<useDefaultCommand>true</useDefaultCommand>
|
||||
<runAllBuilders>true</runAllBuilders>
|
||||
</target>
|
||||
</buildTargets>
|
||||
</storageModule>
|
||||
</cproject>
|
2
.envrc
2
.envrc
@@ -3,6 +3,8 @@ distro=`/bin/lsb_release -i -s`
|
||||
if [ $distro == "CentOS" ]; then
|
||||
. /opt/rh/devtoolset-8/enable
|
||||
. /opt/rh/rh-python38/enable
|
||||
elif [ $distro == "Rocky" ]; then
|
||||
. /opt/rh/gcc-toolset-11/enable
|
||||
fi
|
||||
layout python3
|
||||
[ -f .envrc.$USER ] && . .envrc.$USER
|
||||
|
@@ -1,24 +0,0 @@
|
||||
name: Interp architectural test suite
|
||||
on: push
|
||||
jobs:
|
||||
Build and test interp backend:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: git.minres.com/tooling/riscof_sail:latest
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
run: git clone --recursive https://git.minres.com/TGFS/TGC-ISS.git
|
||||
|
||||
- name: Checkout TGC-COMPLIANCE
|
||||
run: |
|
||||
echo "${{ secrets.ACTRUNNER_PRIVATE_SSHKEY }}" > ssh_key
|
||||
chmod 600 ssh_key
|
||||
git clone --recursive -c core.sshCommand="/usr/bin/ssh -i ssh_key -o StrictHostKeyChecking=accept-new" ssh://git@git.minres.com:2221/TGFS/TGC-COMPLIANCE.git
|
||||
|
||||
- name: Build tgc-sim executable
|
||||
run: |
|
||||
cmake -S TGC-ISS -B TGC-ISS/build -DCMAKE_BUILD_TYPE=Debug -DWITH_ASMJIT=OFF -DWITH_TCC=OFF -DWITH_LLVM=OFF
|
||||
cmake --build TGC-ISS/build -j24
|
||||
|
||||
- name: run tests
|
||||
run: python3 TGC-COMPLIANCE/run_act.py -core TGC5C -sim TGC-ISS/build/dbt-rise-tgc/tgc-sim -w . --dockerless --backend interp
|
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,5 +1,4 @@
|
||||
/build/
|
||||
/Debug/
|
||||
.settings
|
||||
/.venv*
|
||||
/Debug-PA/
|
||||
@@ -10,9 +9,17 @@
|
||||
*.log
|
||||
*tcc_jit*.c
|
||||
*.disass
|
||||
*.dis
|
||||
*.objdump
|
||||
*.asm
|
||||
*.signature
|
||||
*.elf
|
||||
*.trc
|
||||
/*.core_desc
|
||||
/fasterDecoding/
|
||||
*.ll
|
||||
/dbt-rise-plugins
|
||||
/.direnv
|
||||
/TGC_C_XRB/
|
||||
/.envrc.eyck
|
||||
/.cache
|
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake)
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
|
||||
project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
|
||||
|
||||
@@ -9,12 +9,14 @@ 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(FW_BUILD "Enable the automatic download and build of some firmware to run on the ISS" OFF)
|
||||
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_GRPOF "Enable gprof instrumentation" OFF)
|
||||
option(ENABLE_CLANG_TIDY "Add clang-tidy and clang-format automatically to builds" OFF)
|
||||
option(WITH_TCC "Build TCC backend" ON)
|
||||
option(WITH_TCC "Build TCC backend" OFF)
|
||||
option(WITH_LLVM "Build LLVM backend" OFF)
|
||||
option(WITH_ASMJIT "Build ASMJIT backend" ON)
|
||||
option(PORTABLE "Build executable without platform specific optimizations" OFF)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
@@ -24,12 +26,9 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
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 "")
|
||||
if(COMPILER_SUPPORTS_MARCH_NATIVE AND NOT PORTABLE)
|
||||
message(STATUS "Applying platform specific optimizations")
|
||||
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")
|
||||
@@ -40,10 +39,16 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
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")
|
||||
list(APPEND CMAKE_C_FLAGS "-fsanitize=address")
|
||||
list(APPEND CMAKE_CXX_FLAGS "-fsanitize=address")
|
||||
list(APPEND CMAKE_EXE_LINKER_FLAGS "-fsanitize=address")
|
||||
list(APPEND CMAKE_SHARED_LINKER_FLAGS "-fsanitize=address")
|
||||
endif()
|
||||
if(ENABLE_GPROF)
|
||||
list(APPEND CMAKE_C_FLAGS "-pg")
|
||||
list(APPEND CMAKE_CXX_FLAGS "-pg")
|
||||
list(APPEND CMAKE_EXE_LINKER_FLAGS "-pg")
|
||||
list(APPEND CMAKE_SHARED_LINKER_FLAGS "-pg")
|
||||
endif()
|
||||
include(GNUInstallDirs)
|
||||
include(ConanInline)
|
||||
@@ -79,30 +84,26 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
|
||||
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
|
||||
elfio/3.11
|
||||
lz4/1.9.3
|
||||
yaml-cpp/0.7.0
|
||||
jsoncpp/1.9.5
|
||||
zlib/1.2.13
|
||||
zlib/1.2.12
|
||||
)
|
||||
set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
list(APPEND CONAN_PACKAGE_LIST tcc/0.9.27)
|
||||
option(WITH_TCC "Build TCC backend" ON)
|
||||
endif()
|
||||
|
||||
if(WITH_LLVM)
|
||||
list(APPEND CONAN_PACKAGE_LIST llvm-core/13.0.0)
|
||||
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
|
||||
list(APPEND CONAN_PACKAGE_LIST llvm-core/${LLVM_VERSION})
|
||||
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True llvm-code:targets=X85)
|
||||
endif()
|
||||
if(WITH_ASMJIT)
|
||||
list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20230325)
|
||||
list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20240531)
|
||||
list(APPEND CONAN_PACKAGE_OPTIONS asmjit:shared=False)
|
||||
endif()
|
||||
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
|
||||
@@ -116,11 +117,17 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
# 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})
|
||||
@@ -132,6 +139,13 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
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
|
||||
###########################################################################
|
||||
@@ -160,7 +174,7 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
# setup clang-format and clang-tidy
|
||||
###############################################################################
|
||||
if (ENABLE_CLANG_TIDY)
|
||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS "scc" "install")
|
||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS "build" "install")
|
||||
find_package(ClangFormat)
|
||||
find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin )
|
||||
if (CLANG_TIDY_EXE)
|
||||
@@ -204,7 +218,7 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
FetchContent_Declare(
|
||||
riscvfw
|
||||
GIT_REPOSITORY https://git.minres.com/Firmware/Firmwares.git
|
||||
GIT_TAG main
|
||||
GIT_TAG develop
|
||||
GIT_SHALLOW OFF
|
||||
UPDATE_DISCONNECTED ON
|
||||
)
|
||||
@@ -217,18 +231,9 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
endif()
|
||||
|
||||
add_subdirectory(dbt-rise-core)
|
||||
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)
|
||||
message("blah")
|
||||
else()
|
||||
message("blub")
|
||||
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)
|
||||
|
39
CMakePresets.json
Normal file
39
CMakePresets.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"version": 3,
|
||||
"cmakeMinimumRequired": {
|
||||
"major": 3,
|
||||
"minor": 21,
|
||||
"patch": 0
|
||||
},
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "Debug",
|
||||
"displayName": "Debug build",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Release",
|
||||
"displayName": "Release build",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release",
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "Debug",
|
||||
"description": "Debug build",
|
||||
"displayName": "Debug"
|
||||
}
|
||||
]
|
||||
}
|
114
Jenkinsfile
vendored
Normal file
114
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
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, shallow: true]
|
||||
],
|
||||
submoduleCfg: [],
|
||||
userRemoteConfigs: [
|
||||
[credentialsId: 'gitea-jenkins', url: repoUrl]
|
||||
]
|
||||
])
|
||||
}
|
||||
|
||||
pipeline {
|
||||
agent any
|
||||
stages {
|
||||
stage("Checkout and build"){
|
||||
agent {docker { image 'ubuntu-riscv' }}
|
||||
stages{
|
||||
stage("Checkout TGC-Compliance and TGC-GEN"){
|
||||
steps {
|
||||
sh 'rm -rf * .??* '
|
||||
checkout_project("https://git.minres.com/TGFS/TGC-ISS.git", "develop")
|
||||
dir("TGC-COMPLIANCE"){
|
||||
checkout_project("https://git.minres.com/TGFS/TGC-COMPLIANCE.git", "master")
|
||||
}
|
||||
dir("TGC-GEN"){
|
||||
checkout_project("https://git.minres.com/TGFS/TGC-GEN.git", "develop")
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Generate cores and build TGC-ISS"){
|
||||
steps {
|
||||
sh '''
|
||||
for core in TGC5A TGC5B TGC5D TGC5E TGC5F RV32GC; do
|
||||
for backend in interp llvm tcc asmjit; do
|
||||
TGC-GEN/scripts/generate_iss.sh -o dbt-rise-tgc/ -c $core -b ${backend} TGC-GEN/CoreDSL/${core}.core_desc
|
||||
done
|
||||
done
|
||||
for core in TGC6B TGC6C TGC6D TGC6E RV64GC; do
|
||||
for backend in interp llvm asmjit; do
|
||||
TGC-GEN/scripts/generate_iss.sh -o dbt-rise-tgc/ -c $core -b ${backend} TGC-GEN/CoreDSL/${core}.core_desc
|
||||
done
|
||||
done
|
||||
'''
|
||||
sh 'conan profile new default --detect --force'
|
||||
sh 'rm -rf build'
|
||||
sh 'cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_ASMJIT=ON -DWITH_TCC=ON -DWITH_LLVM=ON'
|
||||
sh 'cmake --build build -j'
|
||||
sh 'build/dbt-rise-tgc/tgc-sim --isa ?'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Run test suite") {
|
||||
agent {
|
||||
docker {
|
||||
image 'git.minres.com/tooling/riscof_sail:latest'
|
||||
args ' -e CONAN_USER_HOME=/var/jenkins_home/workspace/riscof_sail'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('ACT 32bit') {
|
||||
matrix {
|
||||
axes {
|
||||
axis {
|
||||
name 'CORE'
|
||||
values 'TGC5A', 'TGC5B', 'TGC5C', 'TGC5D', 'TGC5E', 'TGC5F', 'RV32GC'
|
||||
}
|
||||
axis {
|
||||
name 'BACKEND'
|
||||
values 'interp', 'llvm', 'tcc', 'asmjit'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Run riscof') {
|
||||
steps {
|
||||
sh "mkdir -p ${BACKEND}"
|
||||
sh "python3 TGC-COMPLIANCE/run_act.py -core ${CORE} -sim build/dbt-rise-tgc/tgc-sim -w ${BACKEND} --local --backend ${BACKEND}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('ACT 64bit') {
|
||||
matrix {
|
||||
axes {
|
||||
axis {
|
||||
name 'CORE'
|
||||
values 'TGC6B', 'TGC6C', 'TGC6D', 'TGC6E', 'RV64GC'
|
||||
}
|
||||
axis {
|
||||
name 'BACKEND'
|
||||
values 'interp', 'llvm', 'asmjit'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Run riscof') {
|
||||
steps {
|
||||
sh "mkdir -p ${BACKEND}"
|
||||
sh "python3 TGC-COMPLIANCE/run_act.py -core ${CORE} -sim build/dbt-rise-tgc/tgc-sim -w ${BACKEND} --local --backend ${BACKEND}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -14,7 +14,7 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
|
||||
|
||||
```
|
||||
|
||||
pip3 install --user conan==1.59
|
||||
pip3 install --user 'conan<2.0'
|
||||
|
||||
```
|
||||
|
||||
@@ -31,9 +31,10 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
|
||||
|
||||
Using conan for the first time you need to create a profile:
|
||||
|
||||
```
|
||||
```sh
|
||||
|
||||
conan profile create default --detect
|
||||
conan profile new --detect default
|
||||
conan remote add gitea https://git.minres.com/api/packages/Tooling/conan
|
||||
|
||||
```
|
||||
|
||||
|
107
cmake/ConanInline.cmake
Normal file
107
cmake/ConanInline.cmake
Normal file
@@ -0,0 +1,107 @@
|
||||
|
||||
set(CONAN_CMAKE_LIST_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
macro(conan_check)
|
||||
# for backwards compatibility
|
||||
cmake_parse_arguments(MARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
find_program(CONAN conan)
|
||||
if(NOT EXISTS ${CONAN})
|
||||
message(FATAL_ERROR "Conan is required. Please see README.md")
|
||||
return()
|
||||
endif()
|
||||
execute_process(COMMAND ${CONAN} --version
|
||||
OUTPUT_VARIABLE CONAN_VERSION_OUTPUT)
|
||||
string(REGEX MATCHALL "[0-9.]+" CONAN_VERSION ${CONAN_VERSION_OUTPUT})
|
||||
if (NOT (CONAN_VERSION VERSION_GREATER_EQUAL 1.36.0))
|
||||
message(FATAL_ERROR "Please upgrade your conan to a version greater or equal 1.36")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS ${CONAN_CMAKE_LIST_DIR}/conan.cmake)
|
||||
message("Downloading conan.cmake to ${CONAN_CMAKE_LIST_DIR}")
|
||||
set(URL https://raw.githubusercontent.com/conan-io/cmake-conan/0.18.1/conan.cmake)
|
||||
file(DOWNLOAD ${URL} ${CONAN_CMAKE_LIST_DIR}/conan.cmake TIMEOUT 60 STATUS DOWNLOAD_STATUS)
|
||||
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
|
||||
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
|
||||
if(NOT (${STATUS_CODE} EQUAL 0))
|
||||
# Exit CMake if the download failed, printing the error message.
|
||||
message(FATAL_ERROR "Error occurred during download: ${ERROR_MESSAGE}")
|
||||
endif()
|
||||
if(NOT EXISTS ${CONAN_CMAKE_LIST_DIR}/conan.cmake)
|
||||
message(FATAL_ERROR "Could not download conan.cmake. Please check your internet connection or proxy settings")
|
||||
endif()
|
||||
file (SIZE ${CONAN_CMAKE_LIST_DIR}/conan.cmake CONAN_CMAKE_SIZE)
|
||||
if(${CONAN_CMAKE_SIZE} EQUAL 0)
|
||||
message(FATAL_ERROR "Could not download conan.cmake. Please check your internet connection or proxy settings")
|
||||
endif()
|
||||
endif()
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
|
||||
include(${CONAN_CMAKE_LIST_DIR}/conan.cmake)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR})
|
||||
endmacro()
|
||||
|
||||
macro(conan_setup)
|
||||
set(options TARGETS)
|
||||
cmake_parse_arguments(MARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
|
||||
set(conanfile_cmake_paths ${CMAKE_BINARY_DIR}/conan_paths.cmake)
|
||||
|
||||
set(conanfile_cmake ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
set(conanfile_cmake ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
endif()
|
||||
|
||||
if(EXISTS "${conanfile_cmake_paths}")
|
||||
include(${conanfile_cmake_paths})
|
||||
elseif(EXISTS "${conanfile_cmake}")
|
||||
include(${conanfile_cmake})
|
||||
if( MARGS_TARGETS)
|
||||
conan_basic_setup(TARGETS)
|
||||
else()
|
||||
conan_basic_setup()
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(conan_configure)
|
||||
conan_cmake_generate_conanfile(OFF ${ARGV})
|
||||
endfunction()
|
||||
|
||||
macro(conan_install)
|
||||
set(options BUILD_TYPE BUILD)
|
||||
set(oneValueArgs BUILD_TYPE BUILD)
|
||||
cmake_parse_arguments(MARGS "" "${oneValueArgs}" "" ${ARGN} )
|
||||
if(MARGS_BUILD_TYPE)
|
||||
conan_cmake_autodetect(settings BUILD_TYPE ${MARGS_BUILD_TYPE})
|
||||
else()
|
||||
conan_cmake_autodetect(settings BUILD_TYPE)
|
||||
endif()
|
||||
if(CMAKE_CXX_STANDARD)
|
||||
list(APPEND settings compiler.cppstd=${CMAKE_CXX_STANDARD})
|
||||
endif()
|
||||
if(USE_NCSC_SYSTEMC)
|
||||
list(APPEND settings compiler.libcxx=libstdc++)
|
||||
endif()
|
||||
if (NOT "$ENV{CONAN_PROFILE_NAME}" STREQUAL "")
|
||||
set(CONAN_PROFILE "$ENV{CONAN_PROFILE_NAME}" CACHE INTERNAL "Copied from environment variable")
|
||||
else()
|
||||
set(CONAN_PROFILE "default" CACHE INTERNAL "Copied from environment variable")
|
||||
endif()
|
||||
|
||||
if(MARGS_BUILD)
|
||||
conan_cmake_install(PATH_OR_REFERENCE .
|
||||
BUILD ${MARGS_BUILD}
|
||||
PROFILE_BUILD ${CONAN_PROFILE}
|
||||
SETTINGS ${settings})
|
||||
else()
|
||||
conan_cmake_install(PATH_OR_REFERENCE .
|
||||
BUILD missing
|
||||
PROFILE_BUILD ${CONAN_PROFILE}
|
||||
SETTINGS ${settings})
|
||||
endif()
|
||||
endmacro()
|
34
cmake/FindClangFormat.cmake
Normal file
34
cmake/FindClangFormat.cmake
Normal file
@@ -0,0 +1,34 @@
|
||||
# Find Clang format
|
||||
#
|
||||
#
|
||||
if(NOT CLANG_FORMAT_BIN_NAME)
|
||||
set(CLANG_FORMAT_BIN_NAME clang-format)
|
||||
endif()
|
||||
|
||||
# if custom path check there first
|
||||
if(CLANG_FORMAT_ROOT_DIR)
|
||||
find_program(CLANG_FORMAT_BIN
|
||||
NAMES
|
||||
${CLANG_FORMAT_BIN_NAME}
|
||||
PATHS
|
||||
"${CLANG_FORMAT_ROOT_DIR}"
|
||||
NO_DEFAULT_PATH)
|
||||
else()
|
||||
find_program(CLANG_FORMAT_BIN NAMES ${CLANG_FORMAT_BIN_NAME})
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
|
||||
ClangFormat
|
||||
DEFAULT_MSG
|
||||
CLANG_FORMAT_BIN)
|
||||
|
||||
mark_as_advanced(
|
||||
CLANG_FORMAT_BIN)
|
||||
|
||||
if(ClangFormat_FOUND)
|
||||
# A CMake script to find all source files and setup clang-format targets for them
|
||||
include(clang-format)
|
||||
else()
|
||||
message("clang-format not found. Not setting up format targets")
|
||||
endif()
|
40
cmake/clang-format.cmake
Normal file
40
cmake/clang-format.cmake
Normal file
@@ -0,0 +1,40 @@
|
||||
# additional target to perform clang-format run, requires clang-format
|
||||
|
||||
set(CLANG_FORMAT_CXX_FILE_EXTENSIONS ${CLANG_FORMAT_CXX_FILE_EXTENSIONS} *.cpp *.h *.cxx *.hxx *.hpp *.cc *.ipp)
|
||||
file(GLOB_RECURSE ALL_SOURCE_FILES ${CLANG_FORMAT_CXX_FILE_EXTENSIONS})
|
||||
|
||||
# Don't include some common build folders
|
||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS ${CLANG_FORMAT_EXCLUDE_PATTERNS} "/CMakeFiles/" "cmake")
|
||||
|
||||
# get all project files file
|
||||
foreach (SOURCE_FILE ${ALL_SOURCE_FILES})
|
||||
foreach (EXCLUDE_PATTERN ${CLANG_FORMAT_EXCLUDE_PATTERNS})
|
||||
string(FIND ${SOURCE_FILE} ${EXCLUDE_PATTERN} EXCLUDE_FOUND)
|
||||
if (NOT ${EXCLUDE_FOUND} EQUAL -1)
|
||||
list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE})
|
||||
endif ()
|
||||
endforeach ()
|
||||
endforeach ()
|
||||
|
||||
set(FORMAT_TARGET_NAME format)
|
||||
if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
||||
set(FORMAT_TARGET_NAME format-${PROJECT_NAME})
|
||||
endif()
|
||||
|
||||
add_custom_target(${FORMAT_TARGET_NAME}
|
||||
COMMENT "Running clang-format to change files"
|
||||
COMMAND ${CLANG_FORMAT_BIN} -style=file -i ${ALL_SOURCE_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
|
||||
add_custom_target(${FORMAT_TARGET_NAME}-check
|
||||
COMMENT "Checking clang-format changes"
|
||||
# Use ! to negate the result for correct output
|
||||
COMMAND !
|
||||
${CLANG_FORMAT_BIN}
|
||||
-style=file
|
||||
-output-replacements-xml
|
||||
${ALL_SOURCE_FILES}
|
||||
| grep -q "replacement offset"
|
||||
)
|
Submodule dbt-rise-core updated: e967e23541...678c8ac223
Submodule dbt-rise-tgc updated: b25b7848c6...f7e3db11ad
5
docs/.gitignore
vendored
Normal file
5
docs/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
*.log
|
||||
*.dis
|
||||
*.asm
|
||||
*.ll
|
||||
*tcc_*
|
43
docs/offsets.txt
Normal file
43
docs/offsets.txt
Normal file
@@ -0,0 +1,43 @@
|
||||
X0 (zero) : 0 (0x00)
|
||||
X1 (ra) : 4 (0x04)
|
||||
X2 (sp) : 8 (0x08)
|
||||
X3 (gp) : 12 (0x0c)
|
||||
X4 (tp) : 16 (0x10)
|
||||
X5 (t0) : 20 (0x14)
|
||||
X6 (t1) : 24 (0x18)
|
||||
X7 (t2) : 28 (0x1c)
|
||||
X8 (s0/fp): 32 (0x20)
|
||||
X9 (s1) : 36 (0x24)
|
||||
X10 (a0) : 40 (0x28)
|
||||
X11 (a1) : 44 (0x2c)
|
||||
X12 (a2) : 48 (0x30)
|
||||
X13 (a3) : 52 (0x34)
|
||||
X14 (a4) : 56 (0x38)
|
||||
X15 (a5) : 60 (0x3c)
|
||||
X16 (a6) : 64 (0x40)
|
||||
X17 (a7) : 68 (0x44)
|
||||
X18 (s2) : 72 (0x48)
|
||||
X19 (s3) : 76 (0x4c)
|
||||
X20 (s4) : 80 (0x50)
|
||||
X21 (s5) : 84 (0x54)
|
||||
X22 (s6) : 88 (0x58)
|
||||
X23 (s7) : 92 (0x5c)
|
||||
X24 (s8) : 96 (0x60)
|
||||
X25 (s9) : 100 (0x64)
|
||||
X26 (s10) : 104 (0x68)
|
||||
X27 (s11) : 108 (0x6c)
|
||||
X28 (t3) : 112 (0x70)
|
||||
X29 (t4) : 116 (0x74)
|
||||
X30 (t5) : 120 (0x78)
|
||||
X31 (t6) : 124 (0x7c)
|
||||
PC : 128 (0x80)
|
||||
NEXT_PC : 132 (0x84)
|
||||
PRIV : 136 (0x88)
|
||||
DPC : 137 (0x89)
|
||||
trap_state : 141 (0x8d)
|
||||
pending_trap : 145 (0x91)
|
||||
icount : 149 (0x95)
|
||||
cycle : 157 (0x9d)
|
||||
instret : 165 (0xa5)
|
||||
instruction : 173 (0xad)
|
||||
last_branch : 177 (0xb1)
|
1
scc
1
scc
Submodule scc deleted from 0bdd2db84d
75
scripts/annotate_addr_to_signature.py
Normal file
75
scripts/annotate_addr_to_signature.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import argparse
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
|
||||
def get_address_from_objdump(elf_file, symbol):
|
||||
result = subprocess.run(
|
||||
["riscv64-unknown-elf-objdump", "-t", elf_file], capture_output=True, text=True
|
||||
)
|
||||
for line in result.stdout.splitlines():
|
||||
if symbol in line:
|
||||
return int(line.split()[0], 16)
|
||||
return None
|
||||
|
||||
|
||||
def annotate_dump(signature_file, elf_file):
|
||||
begin_signature = get_address_from_objdump(elf_file, "begin_signature")
|
||||
end_signature = get_address_from_objdump(elf_file, "end_signature")
|
||||
|
||||
if begin_signature is None or end_signature is None:
|
||||
print(f"Symbols not found in {elf_file}")
|
||||
return
|
||||
|
||||
address = begin_signature
|
||||
annotated_lines = []
|
||||
|
||||
with open(signature_file, "r") as sig_file:
|
||||
for line in sig_file:
|
||||
annotated_lines.append(f"{hex(address)}: {line.strip()}")
|
||||
address += 4
|
||||
|
||||
output_file = signature_file + ".annotated"
|
||||
with open(output_file, "w") as out_file:
|
||||
out_file.write("\n".join(annotated_lines))
|
||||
print(f"Annotated file created: {output_file}")
|
||||
|
||||
|
||||
def process_directory(root_dir):
|
||||
for subdir, _, files in os.walk(root_dir):
|
||||
elf_file = None
|
||||
signature_file = None
|
||||
|
||||
for file in files:
|
||||
if file.endswith(".elf"):
|
||||
elf_file = os.path.join(subdir, file)
|
||||
elif file.endswith(".signature"):
|
||||
signature_file = os.path.join(subdir, file)
|
||||
|
||||
if elf_file and signature_file:
|
||||
annotate_dump(signature_file, elf_file)
|
||||
elif signature_file:
|
||||
print(f"No ELF file found for {signature_file}")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="""
|
||||
Annotate memory dumps with addresses. Parses all subdirectories from the given root.
|
||||
Expects a .signature with a corresponding .elf in the same directory.
|
||||
Designed to annotate riscof signatures."""
|
||||
)
|
||||
parser.add_argument(
|
||||
"root_dir", type=str, help="Root directory to search for .signature files"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not os.path.isdir(args.root_dir):
|
||||
print("Invalid root directory")
|
||||
return
|
||||
|
||||
process_directory(args.root_dir)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
157
scripts/create_reg_traces.py
Normal file
157
scripts/create_reg_traces.py
Normal file
@@ -0,0 +1,157 @@
|
||||
import argparse
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def validate_elf_file(filepath: str) -> str:
|
||||
if not os.path.isfile(filepath):
|
||||
raise argparse.ArgumentTypeError(f"{filepath} is not a valid file.")
|
||||
|
||||
# Use the 'file' command to check if it's an ELF file
|
||||
result = subprocess.run(
|
||||
["file", filepath], capture_output=True, text=True, check=False
|
||||
)
|
||||
if "ELF" not in result.stdout:
|
||||
raise argparse.ArgumentTypeError(f"{filepath} is not a valid ELF file.")
|
||||
|
||||
return filepath
|
||||
|
||||
|
||||
def run_test_and_move_output(elf_file: str, backend: str, isa: str = "tgc5c") -> None:
|
||||
# Call 'test' with the specified backend mode
|
||||
os.chdir(Path(__file__).parent.parent)
|
||||
sim_path = "build/Debug/dbt-rise-tgc/tgc-sim"
|
||||
run_command = [
|
||||
sim_path,
|
||||
"-f",
|
||||
elf_file,
|
||||
"--backend",
|
||||
backend,
|
||||
"--isa",
|
||||
isa,
|
||||
"-p",
|
||||
"build/Debug/dbt-rise-plugins/pctrace/pctrace.so=dbt-rise-tgc/contrib/instr/TGC5C_instr.yaml",
|
||||
"-i",
|
||||
"10000",
|
||||
]
|
||||
print(f"Running: \n{' '.join(run_command)}")
|
||||
try:
|
||||
subprocess.run(run_command, check=False, timeout=10)
|
||||
except subprocess.TimeoutExpired:
|
||||
print("Execution timed out")
|
||||
|
||||
# Move the output.trc file
|
||||
if os.path.exists("output.trc"):
|
||||
shutil.move("output.trc", f"Debug/{backend}.trc")
|
||||
else:
|
||||
print(
|
||||
f"output.trc does not exist after running with backend {backend}, so it cannot be renamed."
|
||||
)
|
||||
|
||||
|
||||
def create_shortened_diff_files(backend: str) -> None:
|
||||
file1_path = "Debug/interp.trc"
|
||||
file2_path = f"Debug/{backend}.trc"
|
||||
|
||||
def validate_file(filepath: str) -> str:
|
||||
if not os.path.isfile(filepath):
|
||||
raise ValueError(f"{filepath} is not a valid file.")
|
||||
return filepath
|
||||
|
||||
file1_path = validate_file(file1_path)
|
||||
file2_path = validate_file(file2_path)
|
||||
|
||||
with open(file1_path, "r", encoding="utf8") as file1, open(
|
||||
file2_path, "r", encoding="utf8"
|
||||
) as file2:
|
||||
lines1 = file1.readlines()
|
||||
lines2 = file2.readlines()
|
||||
|
||||
diff_index = -1
|
||||
for index, (line1, line2) in enumerate(zip(lines1, lines2)):
|
||||
if line1 != line2:
|
||||
diff_index = index
|
||||
break
|
||||
|
||||
if diff_index == -1:
|
||||
print("The files are identical.")
|
||||
return
|
||||
|
||||
start_index = max(0, diff_index - 5)
|
||||
end_index = min(len(lines1), diff_index + 6)
|
||||
|
||||
shortened_lines1 = lines1[start_index:end_index]
|
||||
shortened_lines2 = lines2[start_index:end_index]
|
||||
|
||||
with open("Debug/short_interp.trc", "w", encoding="utf8") as short_file1:
|
||||
short_file1.writelines(shortened_lines1)
|
||||
|
||||
with open(f"Debug/short_{backend}.trc", "w", encoding="utf8") as short_file2:
|
||||
short_file2.writelines(shortened_lines2)
|
||||
|
||||
|
||||
def create_disassembly(elf_file_path: str) -> None:
|
||||
def validate_file(filepath: str) -> str:
|
||||
if not os.path.isfile(filepath):
|
||||
raise ValueError(f"{filepath} is not a valid file.")
|
||||
return filepath
|
||||
|
||||
elf_file_path = validate_file(elf_file_path)
|
||||
|
||||
output_file_path = "Debug/dut.dis"
|
||||
with open(output_file_path, "w", encoding="utf8") as output_file:
|
||||
subprocess.run(
|
||||
[
|
||||
"riscv64-unknown-elf-objdump",
|
||||
"-d",
|
||||
"-Mnumeric",
|
||||
"-Mno-aliases",
|
||||
elf_file_path,
|
||||
],
|
||||
stdout=output_file,
|
||||
check=True,
|
||||
)
|
||||
|
||||
|
||||
def main(args: argparse.Namespace) -> None:
|
||||
elf_file = args.elf_file
|
||||
backend = args.backend
|
||||
isa = args.isa
|
||||
|
||||
# Set environment variable
|
||||
os.environ["REGDUMP"] = "True"
|
||||
|
||||
# Run the tests and move the output files
|
||||
run_test_and_move_output(elf_file, "interp", isa)
|
||||
run_test_and_move_output(elf_file, backend, isa)
|
||||
create_shortened_diff_files(backend)
|
||||
create_disassembly(elf_file)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# sys.exit(
|
||||
# "This script needs to be adapted, it assumed to be in a directory named 'Debug'"
|
||||
# )
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Process an ELF file with a specified backend. Generates register traces for interp and the specified backend"
|
||||
)
|
||||
parser.add_argument(
|
||||
"elf_file", type=validate_elf_file, help="The ELF file to be processed."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--backend",
|
||||
type=str,
|
||||
default="asmjit",
|
||||
help="The backend to be used. Default is asmjit.",
|
||||
required=False,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--isa",
|
||||
type=str,
|
||||
default="tgc5c",
|
||||
help="The isa to be used. Default 'tgc5c'",
|
||||
required=False,
|
||||
)
|
||||
main(args=parser.parse_args())
|
29
scripts/simplify_sail_trace.py
Normal file
29
scripts/simplify_sail_trace.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import argparse
|
||||
import re
|
||||
|
||||
|
||||
def simplify_trace(input_file, output_file):
|
||||
with open(input_file, "r") as infile, open(output_file, "w") as outfile:
|
||||
for line in infile:
|
||||
# Enhanced regex to match the instruction number, mode, and PC
|
||||
match = re.search(r"\[\d+\] \[[MI]\]: (0x[0-9A-Fa-f]+)", line)
|
||||
if match:
|
||||
pc = match.group(1).lower()
|
||||
outfile.write(f"{pc}\n")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Simplify a trace from an instruction set simulator."
|
||||
)
|
||||
parser.add_argument("input_file", type=str, help="The input trace file")
|
||||
parser.add_argument(
|
||||
"output_file", type=str, help="The output file for the simplified trace"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
simplify_trace(args.input_file, args.output_file)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
26
scripts/simplify_tgc_trace.py
Normal file
26
scripts/simplify_tgc_trace.py
Normal file
@@ -0,0 +1,26 @@
|
||||
import argparse
|
||||
|
||||
|
||||
def simplify_trace(input_file, output_file):
|
||||
with open(input_file, "r") as infile, open(output_file, "w") as outfile:
|
||||
for line in infile:
|
||||
# Split the line by the first comma and take the PC part
|
||||
pc = line.split(",")[0].strip().lower()
|
||||
outfile.write(f"{pc}\n")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Simplify traces from instruction set simulators."
|
||||
)
|
||||
parser.add_argument("input_file", type=str, help="The input trace file")
|
||||
parser.add_argument(
|
||||
"output_file", type=str, help="The output file for the simplified trace"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
simplify_trace(args.input_file, args.output_file)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Reference in New Issue
Block a user