50 Commits

Author SHA1 Message Date
788d52885c Merge branch 'develop' into main 2025-03-15 07:13:37 +01:00
bd3139b623 removes scc submodule 2025-03-15 07:08:21 +01:00
6fe60e03cd updates submodule 2025-03-14 20:04:01 +01:00
8d6fdb6ba7 Merge branch 'feature/privilege_refactor' into develop 2025-03-14 20:01:35 +01:00
4a74a73bee updates CMakeLists.txt and dbt-rise-tgc submodule 2025-03-14 19:45:21 +01:00
5d78cdf4df updates CMakeLists.txt and adds build config 2025-03-14 08:52:57 +01:00
e192c71104 updates submodules and adds cmake presets 2025-03-14 07:15:21 +01:00
140c2d67b1 updates dbt-rise-tgc 2025-02-13 13:41:38 +01:00
7d41bb9525 updates submodules 2025-02-12 20:45:47 +01:00
b2f87e8fad updates dbt-rise-core and scc 2025-02-03 20:53:59 +01:00
27b23dce8d Merge branch 'develop' of https://git.minres.com/TGFS/TGC-ISS.git into develop 2025-02-03 20:52:52 +01:00
2ff133732d forces clean build in Jenkins 2025-01-11 12:03:55 +01:00
dee78d1279 updates scc 2025-01-08 14:45:21 +01:00
dfad138010 update submodules 2024-12-28 13:11:41 +01:00
de4a6124e6 updates SCC 2024-12-23 20:15:32 +01:00
d063650904 updates scc 2024-12-23 16:49:25 +01:00
8eed85377b updates dbt-rise-tgc 2024-12-06 15:51:12 +01:00
fabceb7a93 updates submodules 2024-12-06 13:40:30 +01:00
88ad16ec94 updates submodules 2024-11-14 17:27:50 +01:00
abef96d93d lowers CXX standard and elfio version 2024-11-14 17:26:37 +01:00
478d1d4ac5 includes GC cores into Jenkins 2024-09-30 09:51:56 +02:00
5f43bb9c0f updates submodules 2024-09-30 08:48:31 +02:00
d9706c58f9 updates submodules 2024-09-27 20:10:53 +02:00
45b55d5c24 updates submodule 2024-09-24 08:42:33 +02:00
bacc9a8296 updates elfio and c++ version 2024-09-24 08:42:17 +02:00
b6e22e863a updates dbt-rise-tgc submodule 2024-09-23 10:06:10 +02:00
aad4a27516 updates dbt-rise submodules 2024-09-23 09:30:33 +02:00
e6b34cfad9 updates submodule, Jenkins displays available isa after building 2024-08-21 12:09:41 +02:00
3fb45df48c updates submodule 2024-08-21 11:05:01 +02:00
3489fd1516 updates submodule 2024-08-17 23:22:14 +02:00
8d199ba7ca changes c++ back to 14 2024-08-17 23:20:29 +02:00
30dd1044b0 updates submodule 2024-08-17 11:20:03 +02:00
d27cbcc05b adds TGC5F to testing 2024-08-17 09:22:33 +02:00
020a4d793f updates submodules 2024-08-17 09:22:03 +02:00
ed08913f26 updates submodules 2024-08-04 18:42:54 +02:00
17773cf9b1 updates tgc 2024-08-02 11:59:10 +02:00
ae71682920 updates TGC impl 2024-08-02 10:33:29 +02:00
5cfbbbc9ca updates dbt-rise-tgc to fix fcsr presence 2024-08-02 08:59:48 +02:00
7d71ebca30 update submodules 2024-08-01 11:02:45 +02:00
0b7969becf updates submodule 2024-07-31 12:31:10 +02:00
5bb29d2d3a adds script for annotating memory addrs to riscof memory dumps 2024-07-31 12:30:54 +02:00
46128e395f update submodule 2024-07-30 13:34:57 +02:00
3dc80460ac updates submodules 2024-07-25 19:35:37 +02:00
5d9d146aa2 updates submodules and script 2024-07-25 13:08:38 +02:00
a4ac323306 updates submodules 2024-07-24 14:49:19 +02:00
97190a133c updates submodules 2024-07-24 12:45:23 +02:00
c09fda3f25 updates submodules 2024-07-24 12:29:21 +02:00
47d7357ed9 updates submodules 2024-07-23 14:36:16 +02:00
78245ec817 updates submodules 2024-07-23 13:47:51 +02:00
4058eed106 updates submodules 2024-07-22 09:24:19 +02:00
18 changed files with 393 additions and 34 deletions

View File

@ -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>

1
.gitignore vendored
View File

@ -22,3 +22,4 @@
/.direnv
/TGC_C_XRB/
/.envrc.eyck
/.cache

View File

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.20)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
@ -11,12 +11,14 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
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_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" OFF)
option(WITH_LLVM "Build LLVM backend" OFF)
option(WITH_ASMJIT "Build ASMJIT backend" OFF)
option(WITH_ASMJIT "Build ASMJIT backend" ON)
option(PORTABLE "Build executable without platform specific optimizations" OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE 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)
@ -85,7 +90,7 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
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
@ -95,7 +100,7 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
if(WITH_LLVM)
list(APPEND CONAN_PACKAGE_LIST llvm-core/${LLVM_VERSION})
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True llvm-code:targets=X85)
endif()
if(WITH_ASMJIT)
list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20240531)
@ -169,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)
@ -213,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
)
@ -225,12 +230,6 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
endif()
endif()
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-core)
add_subdirectory(dbt-rise-tgc)
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)

39
CMakePresets.json Normal file
View 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"
}
]
}

10
Jenkinsfile vendored
View File

@ -36,20 +36,22 @@ pipeline {
stage("Generate cores and build TGC-ISS"){
steps {
sh '''
for core in TGC5A TGC5B TGC5D TGC5E; do
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; do
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 ?'
}
}
}
@ -67,7 +69,7 @@ pipeline {
axes {
axis {
name 'CORE'
values 'TGC5A', 'TGC5B','TGC5C', 'TGC5D', 'TGC5E'
values 'TGC5A', 'TGC5B', 'TGC5C', 'TGC5D', 'TGC5E', 'TGC5F', 'RV32GC'
}
axis {
name 'BACKEND'
@ -89,7 +91,7 @@ pipeline {
axes {
axis {
name 'CORE'
values 'TGC6B', 'TGC6C', 'TGC6D', 'TGC6E'
values 'TGC6B', 'TGC6C', 'TGC6D', 'TGC6E', 'RV64GC'
}
axis {
name 'BACKEND'

107
cmake/ConanInline.cmake Normal file
View 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()

View 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
View 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"
)

View File

1
scc

Submodule scc deleted from cecb22f13d

View 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()

View File

@ -131,6 +131,9 @@ def main(args: argparse.Namespace) -> None:
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"
)
@ -140,8 +143,8 @@ if __name__ == "__main__":
parser.add_argument(
"--backend",
type=str,
default="amsjit",
help="The backend to be used. Default is amsjit.",
default="asmjit",
help="The backend to be used. Default is asmjit.",
required=False,
)
parser.add_argument(