Compare commits
	
		
			163 Commits
		
	
	
		
			37a47b0f83
			...
			feature/pr
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4a74a73bee | |||
| 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 | |||
| 1baed20dbb | |||
| 246fbdefb6 | |||
| afff028374 | |||
| 070f179ca8 | |||
| b157d916cb | |||
| eb98e7525f | |||
| a817b7b47b | |||
| 5545f58f85 | |||
| 11d7a731ce | 
							
								
								
									
										15
									
								
								.cproject
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								.cproject
									
									
									
									
									
								
							@@ -54,7 +54,7 @@
 | 
				
			|||||||
					<def name="CMAKE_BUILD_TYPE" type="STRING" val="Debug"/>
 | 
										<def name="CMAKE_BUILD_TYPE" type="STRING" val="Debug"/>
 | 
				
			||||||
					<def name="CMAKE_INSTALL_PREFIX" type="FILEPATH" val="${ProjDirPath}/install"/>
 | 
										<def name="CMAKE_INSTALL_PREFIX" type="FILEPATH" val="${ProjDirPath}/install"/>
 | 
				
			||||||
					<def name="WITH_TCC" type="BOOL" val="ON"/>
 | 
										<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"/>
 | 
										<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
 | 
				
			||||||
				</defs>
 | 
									</defs>
 | 
				
			||||||
			</storageModule>
 | 
								</storageModule>
 | 
				
			||||||
@@ -192,7 +192,6 @@
 | 
				
			|||||||
			<resource resourceType="PROJECT" workspacePath="/TGC-ISS"/>
 | 
								<resource resourceType="PROJECT" workspacePath="/TGC-ISS"/>
 | 
				
			||||||
		</configuration>
 | 
							</configuration>
 | 
				
			||||||
	</storageModule>
 | 
						</storageModule>
 | 
				
			||||||
	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
 | 
					 | 
				
			||||||
	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
 | 
						<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
 | 
				
			||||||
	<storageModule cmakelistsFolder="" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
						<storageModule cmakelistsFolder="" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
				
			||||||
		<targets>
 | 
							<targets>
 | 
				
			||||||
@@ -214,4 +213,16 @@
 | 
				
			|||||||
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 | 
								<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 | 
				
			||||||
		</scannerConfigBuildInfo>
 | 
							</scannerConfigBuildInfo>
 | 
				
			||||||
	</storageModule>
 | 
						</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>
 | 
					</cproject>
 | 
				
			||||||
							
								
								
									
										2
									
								
								.envrc
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.envrc
									
									
									
									
									
								
							@@ -3,6 +3,8 @@ distro=`/bin/lsb_release -i -s`
 | 
				
			|||||||
if [ $distro == "CentOS" ]; then 
 | 
					if [ $distro == "CentOS" ]; then 
 | 
				
			||||||
    . /opt/rh/devtoolset-8/enable
 | 
					    . /opt/rh/devtoolset-8/enable
 | 
				
			||||||
    . /opt/rh/rh-python38/enable
 | 
					    . /opt/rh/rh-python38/enable
 | 
				
			||||||
 | 
					elif [ $distro == "Rocky" ]; then
 | 
				
			||||||
 | 
					    . /opt/rh/gcc-toolset-11/enable
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
layout python3
 | 
					layout python3
 | 
				
			||||||
[ -f .envrc.$USER ] && . .envrc.$USER
 | 
					[ -f .envrc.$USER ] && . .envrc.$USER
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
name: Interp architectural test suite
 | 
					 | 
				
			||||||
on: push
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  test and publish job:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    container:
 | 
					 | 
				
			||||||
      image: git.minres.com/tooling/riscof_sail:latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Check out repository code
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build tgc-sim executable
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DWITH_ASMJIT=OFF -DWITH_TCC=OFF -DWITH_LLVM=OFF
 | 
					 | 
				
			||||||
          cmake --build build -j24
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Checkout TGC-COMPLIANCE
 | 
					 | 
				
			||||||
        run: git clone --recursive https://actrunner@git.minres.com/TGFS/TGC-COMPLIANCE.git
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      - name: run tests
 | 
					 | 
				
			||||||
        run: python TGC-COMPLIANCE/run_act.py -core TGC5C -sim build/dbt-rise-tgc/tgc-sim --dockerless --backend interp
 | 
					 | 
				
			||||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,4 @@
 | 
				
			|||||||
/build/
 | 
					/build/
 | 
				
			||||||
/Debug/
 | 
					 | 
				
			||||||
.settings
 | 
					.settings
 | 
				
			||||||
/.venv*
 | 
					/.venv*
 | 
				
			||||||
/Debug-PA/
 | 
					/Debug-PA/
 | 
				
			||||||
@@ -10,9 +9,17 @@
 | 
				
			|||||||
*.log
 | 
					*.log
 | 
				
			||||||
*tcc_jit*.c
 | 
					*tcc_jit*.c
 | 
				
			||||||
*.disass
 | 
					*.disass
 | 
				
			||||||
 | 
					*.dis
 | 
				
			||||||
 | 
					*.objdump
 | 
				
			||||||
 | 
					*.asm
 | 
				
			||||||
 | 
					*.signature
 | 
				
			||||||
 | 
					*.elf
 | 
				
			||||||
*.trc
 | 
					*.trc
 | 
				
			||||||
/*.core_desc
 | 
					/*.core_desc
 | 
				
			||||||
/fasterDecoding/
 | 
					/fasterDecoding/
 | 
				
			||||||
*.ll
 | 
					*.ll
 | 
				
			||||||
/dbt-rise-plugins
 | 
					/dbt-rise-plugins
 | 
				
			||||||
/.direnv
 | 
					/.direnv
 | 
				
			||||||
 | 
					/TGC_C_XRB/
 | 
				
			||||||
 | 
					/.envrc.eyck
 | 
				
			||||||
 | 
					/.cache
 | 
				
			||||||
							
								
								
									
										422
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										422
									
								
								CMakeLists.txt
									
									
									
									
									
								
							@@ -1,234 +1,240 @@
 | 
				
			|||||||
cmake_minimum_required(VERSION 3.16)
 | 
					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}/scc/cmake)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
 | 
					project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set(WITH_LLVM FALSE CACHE BOOL "Build LLVM based backend")
 | 
					set(WITH_LLVM FALSE CACHE BOOL "Build LLVM based backend")
 | 
				
			||||||
if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
 | 
					if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
 | 
				
			||||||
	###########################################################################
 | 
					    ###########################################################################
 | 
				
			||||||
	# stand alone build settings
 | 
					    # stand alone build settings
 | 
				
			||||||
	###########################################################################
 | 
					    ###########################################################################
 | 
				
			||||||
	set(CORE_NAME TGC5C CACHE STRING "The core to build the ISS for" )
 | 
					    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_SANITIZER "Enable address sanitizer" OFF)
 | 
				
			||||||
    option(ENABLE_CLANG_TIDY "Add clang-tidy and clang-format automatically to builds" 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_LLVM "Build LLVM backend" OFF)
 | 
				
			||||||
	option(WITH_ASMJIT "Build ASMJIT backend" ON)
 | 
					    option(WITH_ASMJIT "Build ASMJIT backend" OFF)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
	set(CMAKE_CXX_STANDARD 14)
 | 
					    set(CMAKE_CXX_STANDARD 14)
 | 
				
			||||||
	set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
					    set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
				
			||||||
	set(CMAKE_CXX_EXTENSIONS OFF)
 | 
					    set(CMAKE_CXX_EXTENSIONS OFF)
 | 
				
			||||||
	set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 | 
					    set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 | 
				
			||||||
	set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 | 
					    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 | 
				
			||||||
	set(CMAKE_INSTALL_RPATH "${ORIGIN}")
 | 
					    set(CMAKE_INSTALL_RPATH "${ORIGIN}")
 | 
				
			||||||
	include(CheckCXXCompilerFlag)
 | 
					    include(CheckCXXCompilerFlag)
 | 
				
			||||||
	CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
					    CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
				
			||||||
	if(COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
					    if(COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
				
			||||||
		if("${CMAKE_BUILD_TYPE}" STREQUAL "") 
 | 
					        if("${CMAKE_BUILD_TYPE}" STREQUAL "") 
 | 
				
			||||||
		    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
					            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
				
			||||||
		elseif(NOT(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo"))
 | 
					        elseif(NOT(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo"))
 | 
				
			||||||
		    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
					            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
				
			||||||
		endif()
 | 
					        endif()
 | 
				
			||||||
	endif()
 | 
					    endif()
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
	if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
 | 
					    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
 | 
				
			||||||
	    set(warnings "-Wall -Wextra -Werror")
 | 
					        set(warnings "-Wall -Wextra -Werror")
 | 
				
			||||||
	    set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
					        set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
				
			||||||
	    set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
					        set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
				
			||||||
	elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
 | 
					    elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
 | 
				
			||||||
	    set(warnings "/W4 /WX /EHsc")
 | 
					        set(warnings "/W4 /WX /EHsc")
 | 
				
			||||||
	endif()
 | 
					    endif()
 | 
				
			||||||
	if(ENABLE_SANITIZER)
 | 
					    if(ENABLE_SANITIZER)
 | 
				
			||||||
		set(CMAKE_C_FLAGS             "${CMAKE_C_FLAGS} -fsanitize=address")
 | 
					        set(CMAKE_C_FLAGS             "${CMAKE_C_FLAGS} -fsanitize=address")
 | 
				
			||||||
		set(CMAKE_CXX_FLAGS           "${CMAKE_CXX_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_EXE_LINKER_FLAGS    "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
 | 
				
			||||||
		set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
 | 
					        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
 | 
				
			||||||
	endif()
 | 
					    endif()
 | 
				
			||||||
	include(GNUInstallDirs)
 | 
					    include(GNUInstallDirs)
 | 
				
			||||||
	include(ConanInline)
 | 
					    include(ConanInline)
 | 
				
			||||||
	if(BUILD_SHARED_LIBS)
 | 
					    if(BUILD_SHARED_LIBS)
 | 
				
			||||||
		set(SHARED_FLAG "True")
 | 
					        set(SHARED_FLAG "True")
 | 
				
			||||||
	else()
 | 
					    else()
 | 
				
			||||||
		set(SHARED_FLAG "False")
 | 
					        set(SHARED_FLAG "False")
 | 
				
			||||||
	endif()
 | 
					    endif()
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
	set(CONAN_BOOST_OPTIONS
 | 
					    set(CONAN_BOOST_OPTIONS
 | 
				
			||||||
	boost:fPIC=True
 | 
					    boost:fPIC=True
 | 
				
			||||||
	boost:shared=False
 | 
					    boost:shared=False
 | 
				
			||||||
	boost:header_only=False 
 | 
					    boost:header_only=False 
 | 
				
			||||||
	boost:without_contract=True
 | 
					    boost:without_contract=True
 | 
				
			||||||
	boost:without_graph=True
 | 
					    boost:without_graph=True
 | 
				
			||||||
	boost:without_graph_parallel=True
 | 
					    boost:without_graph_parallel=True
 | 
				
			||||||
	boost:without_iostreams=True
 | 
					    boost:without_iostreams=True
 | 
				
			||||||
	boost:without_json=True
 | 
					    boost:without_json=True
 | 
				
			||||||
	boost:without_locale=True
 | 
					    boost:without_locale=True
 | 
				
			||||||
	boost:without_log=True
 | 
					    boost:without_log=True
 | 
				
			||||||
	boost:without_math=True
 | 
					    boost:without_math=True
 | 
				
			||||||
	boost:without_mpi=True
 | 
					    boost:without_mpi=True
 | 
				
			||||||
	boost:without_nowide=True
 | 
					    boost:without_nowide=True
 | 
				
			||||||
	boost:without_python=True
 | 
					    boost:without_python=True
 | 
				
			||||||
	boost:without_random=True
 | 
					    boost:without_random=True
 | 
				
			||||||
	boost:without_regex=True
 | 
					    boost:without_regex=True
 | 
				
			||||||
	boost:without_stacktrace=True
 | 
					    boost:without_stacktrace=True
 | 
				
			||||||
	boost:without_test=True
 | 
					    boost:without_test=True
 | 
				
			||||||
	boost:without_timer=True
 | 
					    boost:without_timer=True
 | 
				
			||||||
	boost:without_type_erasure=True
 | 
					    boost:without_type_erasure=True
 | 
				
			||||||
	boost:without_wave=True
 | 
					    boost:without_wave=True
 | 
				
			||||||
	)
 | 
					    )
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
	set(B2_VERSION 4.9.6)
 | 
					    set(B2_VERSION 4.9.6)
 | 
				
			||||||
	set(CM_VERSION 3.20.5)
 | 
					    set(CM_VERSION 3.20.5)
 | 
				
			||||||
	set(CONAN_PACKAGE_LIST 
 | 
					    set(LLVM_VERSION 13.0.0)
 | 
				
			||||||
		fmt/8.0.1
 | 
					    set(CONAN_PACKAGE_LIST 
 | 
				
			||||||
		spdlog/1.9.2
 | 
					        fmt/8.0.1
 | 
				
			||||||
		boost/1.75.0 
 | 
					        spdlog/1.9.2
 | 
				
			||||||
		gsl-lite/0.37.0 
 | 
					        boost/1.75.0 
 | 
				
			||||||
		elfio/3.8 
 | 
					        gsl-lite/0.37.0 
 | 
				
			||||||
		lz4/1.9.3 
 | 
					        elfio/3.11 
 | 
				
			||||||
		yaml-cpp/0.7.0 
 | 
					        lz4/1.9.3 
 | 
				
			||||||
		jsoncpp/1.9.5
 | 
					        yaml-cpp/0.7.0 
 | 
				
			||||||
		zlib/1.2.13
 | 
					        jsoncpp/1.9.5
 | 
				
			||||||
	)
 | 
					        zlib/1.2.12
 | 
				
			||||||
	set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
 | 
					    )
 | 
				
			||||||
 | 
					    set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
 | 
					    if(WITH_LLVM)
 | 
				
			||||||
	    list(APPEND CONAN_PACKAGE_LIST tcc/0.9.27)
 | 
					        list(APPEND CONAN_PACKAGE_LIST llvm-core/${LLVM_VERSION})
 | 
				
			||||||
		option(WITH_TCC "Build TCC backend" ON)
 | 
					        list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
 | 
				
			||||||
	endif()
 | 
					    endif()
 | 
				
			||||||
 | 
					    if(WITH_ASMJIT)
 | 
				
			||||||
 | 
					        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)
 | 
				
			||||||
 | 
					         list(APPEND CONAN_PACKAGE_OPTIONS lua:compile_as_cpp=False)
 | 
				
			||||||
 | 
					         list(APPEND CONAN_PACKAGE_LIST lua/5.4.3)
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(WITH_LLVM)
 | 
					    conan_check()
 | 
				
			||||||
	    list(APPEND CONAN_PACKAGE_LIST llvm-core/13.0.0)
 | 
					    conan_add_remote(NAME minres URL https://git.minres.com/api/packages/Tooling/conan)
 | 
				
			||||||
		list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
 | 
					    ###########################################################################
 | 
				
			||||||
	endif()
 | 
					    # Boost on CentOS 7 quirks: the b2 of conan-center is build against a newer libstdc++ and therefore does not run
 | 
				
			||||||
	if(WITH_ASMJIT)
 | 
					    # with the oooooold libs on CentOS 7. Therefore we build our own version of b2 if it is not there
 | 
				
			||||||
	    list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20230325)
 | 
					    ###########################################################################
 | 
				
			||||||
		list(APPEND CONAN_PACKAGE_OPTIONS asmjit:shared=False)
 | 
					    find_program(LSB_RELEASE_EXEC lsb_release)
 | 
				
			||||||
	endif()
 | 
					    if(NOT LSB_RELEASE_EXEC-NOTFOUND)
 | 
				
			||||||
	if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
 | 
					        execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
				
			||||||
	     list(APPEND CONAN_PACKAGE_OPTIONS lua:compile_as_cpp=False)
 | 
						    if(LSB_RELEASE_ID_SHORT MATCHES "CentOS")
 | 
				
			||||||
	     list(APPEND CONAN_PACKAGE_LIST lua/5.4.3)
 | 
						        set(B2_META   $ENV{HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
 | 
				
			||||||
	endif()
 | 
						        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)               
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
	conan_check()
 | 
					    find_package(fmt)
 | 
				
			||||||
	conan_add_remote(NAME minres URL https://git.minres.com/api/packages/Tooling/conan)
 | 
					    find_package(spdlog)
 | 
				
			||||||
	###########################################################################
 | 
					    find_package(lz4)
 | 
				
			||||||
	# Boost on CentOS 7 quirks: the b2 of conan-center is build against a newer libstdc++ and therefore does not run
 | 
					    find_package(gsl-lite)
 | 
				
			||||||
	# with the oooooold libs on CentOS 7. Therefore we build our own version of b2 if it is not there
 | 
					    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(B2_META $ENV{HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
 | 
					    set(BOOST_ROOT ${CONAN_BOOST_ROOT})
 | 
				
			||||||
	set(CM_META $ENV{HOME}/.conan/data/cmake/${CM_VERSION}/_/_/metadata.json)
 | 
					    find_package(Threads)
 | 
				
			||||||
	if(DEFINED ENV{CONAN_USER_HOME})
 | 
					    find_package(ZLIB)
 | 
				
			||||||
		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)
 | 
					 | 
				
			||||||
	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()
 | 
					 | 
				
			||||||
	###########################################################################
 | 
					 | 
				
			||||||
	# 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)
 | 
					    if(USE_CWR_SYSTEMC)
 | 
				
			||||||
	find_package(spdlog)
 | 
					        include(SystemCPackage)
 | 
				
			||||||
	find_package(lz4)
 | 
					    endif()
 | 
				
			||||||
	find_package(gsl-lite)
 | 
					    ###############################################################################
 | 
				
			||||||
	find_package(yaml-cpp)
 | 
					    # setup clang-format and clang-tidy
 | 
				
			||||||
	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})
 | 
					    if (ENABLE_CLANG_TIDY)
 | 
				
			||||||
	find_package(Threads)
 | 
					        set(CLANG_FORMAT_EXCLUDE_PATTERNS "scc" "install")
 | 
				
			||||||
	find_package(ZLIB)
 | 
					        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(USE_CWR_SYSTEMC)
 | 
					    if(FW_BUILD)
 | 
				
			||||||
		include(SystemCPackage)
 | 
					        include(FetchContent)
 | 
				
			||||||
	endif()
 | 
					        set(FETCHCONTENT_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}/..)
 | 
				
			||||||
	###############################################################################
 | 
					        FetchContent_Declare(
 | 
				
			||||||
	# setup clang-format and clang-tidy
 | 
					              riscvfw
 | 
				
			||||||
	###############################################################################
 | 
					              GIT_REPOSITORY https://git.minres.com/Firmware/Firmwares.git
 | 
				
			||||||
	if (ENABLE_CLANG_TIDY)
 | 
					              GIT_TAG        develop
 | 
				
			||||||
	    set(CLANG_FORMAT_EXCLUDE_PATTERNS "scc" "install")
 | 
					              GIT_SHALLOW OFF
 | 
				
			||||||
	    find_package(ClangFormat)
 | 
					              UPDATE_DISCONNECTED ON
 | 
				
			||||||
	    find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin )
 | 
					        )
 | 
				
			||||||
	    if (CLANG_TIDY_EXE)
 | 
					        FetchContent_GetProperties(riscvfw)
 | 
				
			||||||
	        message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}")
 | 
					        if(NOT riscvfw_POPULATED)
 | 
				
			||||||
	        set(CLANG_TIDY_CHECKS "-*")
 | 
					              FetchContent_Populate(riscvfw)
 | 
				
			||||||
	        set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-avoid-bind.PermissiveParameterList")
 | 
					        endif()
 | 
				
			||||||
	        set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-loop-convert.*")
 | 
					         add_subdirectory(${riscvfw_SOURCE_DIR})
 | 
				
			||||||
	        set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},modernize-make-shared.")
 | 
					    endif()
 | 
				
			||||||
	        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()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_subdirectory(dbt-rise-core)
 | 
					 | 
				
			||||||
if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS" AND NOT USE_CWR_SYSTEMC)
 | 
					if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS" AND NOT USE_CWR_SYSTEMC)
 | 
				
			||||||
	set(SCC_CMAKE_CONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/scc)
 | 
					    set(SCC_CMAKE_CONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/scc)
 | 
				
			||||||
	add_subdirectory(scc/src/common)
 | 
					    add_subdirectory(scc/src/common)
 | 
				
			||||||
	message("blah")
 | 
					 | 
				
			||||||
else()
 | 
					else()
 | 
				
			||||||
	message("blub")
 | 
					    add_subdirectory(scc)
 | 
				
			||||||
	add_subdirectory(scc)
 | 
					 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					add_subdirectory(dbt-rise-core)
 | 
				
			||||||
add_subdirectory(dbt-rise-tgc)
 | 
					add_subdirectory(dbt-rise-tgc)
 | 
				
			||||||
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
 | 
					if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
 | 
				
			||||||
	add_subdirectory(dbt-rise-plugins)
 | 
					    add_subdirectory(dbt-rise-plugins)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
include(CTest)
 | 
					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:
 | 
					  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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ```
 | 
					  ```
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 
 | 
				
			|||||||
 Submodule dbt-rise-core updated: e967e23541...01d81b03fb
									
								
							 Submodule dbt-rise-tgc updated: b25b7848c6...502f3e8df9
									
								
							
							
								
								
									
										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)
 | 
				
			||||||
							
								
								
									
										2
									
								
								scc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								scc
									
									
									
									
									
								
							 Submodule scc updated: 0bdd2db84d...7960982947
									
								
							
							
								
								
									
										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