Compare commits
	
		
			240 Commits
		
	
	
		
			edb8c6ef5b
			...
			develop
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f55fc06867 | |||
| dc12101e25 | |||
| 4379b2647d | |||
| 1075d381f1 | |||
| b2049d3df1 | |||
| 5a3ef5575c | |||
| acb9c85abd | |||
| 5b86f90bbf | |||
| f0cf3ea154 | |||
| 9acaeff409 | |||
| 565958c631 | |||
| 6a3e32ac50 | |||
| 8efb009adf | |||
| 28e332c527 | |||
| b7c0f20db6 | |||
| a272a1ee39 | |||
| eb861daf9c | |||
| a5e6948487 | |||
| 64d97ae834 | |||
| 785428fb09 | |||
| 3492a72128 | |||
| 3eb3ebd795 | |||
| ff89ccdfdb | |||
| 9e42487366 | |||
| b9ba205a52 | |||
| 85982a0d1c | |||
| 44682cdf0e | |||
| b8e5b38e3a | |||
| fc8f95da51 | |||
| bd3139b623 | |||
| 6fe60e03cd | |||
| 8d6fdb6ba7 | |||
| 4a74a73bee | |||
| 5d78cdf4df | |||
| e192c71104 | |||
| 140c2d67b1 | |||
| 7d41bb9525 | |||
| b2f87e8fad | |||
| 27b23dce8d | |||
| 2ff133732d | |||
| dee78d1279 | |||
| dfad138010 | |||
| de4a6124e6 | |||
| d063650904 | |||
| 8eed85377b | |||
| fabceb7a93 | |||
| 88ad16ec94 | |||
| abef96d93d | |||
| 478d1d4ac5 | |||
| 5f43bb9c0f | |||
| d9706c58f9 | |||
| 45b55d5c24 | |||
| bacc9a8296 | |||
| b6e22e863a | |||
| aad4a27516 | |||
| e6b34cfad9 | |||
| 3fb45df48c | |||
| 3489fd1516 | |||
| 8d199ba7ca | |||
| 30dd1044b0 | |||
| d27cbcc05b | |||
| 020a4d793f | |||
| ed08913f26 | |||
| 17773cf9b1 | |||
| ae71682920 | |||
| 5cfbbbc9ca | |||
| 7d71ebca30 | |||
| 0b7969becf | |||
| 5bb29d2d3a | |||
| 46128e395f | |||
| 3dc80460ac | |||
| 5d9d146aa2 | |||
| a4ac323306 | |||
| 97190a133c | |||
| c09fda3f25 | |||
| 47d7357ed9 | |||
| 78245ec817 | |||
| 4058eed106 | |||
| 1fee44c084 | |||
| 497b1d33d4 | |||
| db0d125651 | |||
| c365d4f822 | |||
| 6ce8eada3e | |||
| 6ee4840d8d | |||
| 2a0899a671 | |||
| c0e557316f | |||
| c4a746d4c8 | |||
| 45e5ab6133 | |||
| 8811f13d1c | |||
| c2056c30f3 | |||
| 3da38170ff | |||
| 5c31d06a58 | |||
| 99e36acbae | |||
| 21ca5aee7a | |||
| c99a7982b7 | |||
| 3d657d42bc | |||
| 8de84ca4be | |||
| fa1c960247 | |||
| ab4a0eeb6e | |||
| cc61e0b476 | |||
| 856e251be4 | |||
| b118b43988 | |||
| e8037b9c27 | |||
| c0bae483c1 | |||
| d7d072bb0b | |||
| d488581e3a | |||
| 97b52b9e05 | |||
| 6dbce5cb23 | |||
| c19e7c6a46 | |||
| bfea2374b4 | |||
| 2825646edc | |||
| c1e0379f7b | |||
| d602c61dfe | |||
| 4b65d31b89 | |||
| bbe7e7525e | |||
| ac23db44cf | |||
| 4964fe3f79 | |||
| bea38f761d | |||
| 405bae926c | |||
| 9c0cb351fe | |||
| 3b6f7b5e83 | |||
| dc8e631824 | |||
| e67306b781 | |||
| f8152e8ca5 | |||
| 2dc4409928 | |||
| 558d5849a6 | |||
| aa69088189 | |||
| 92283be000 | |||
| 73c9934708 | |||
| ff649a9d97 | |||
| 4c2d8f2d97 | |||
| 6e3bbad01b | |||
| ae03038323 | |||
| b8fa095940 | |||
| d4a2e133eb | |||
| 17b8e4a7fc | |||
| ddec62b3a3 | |||
| 5a7ab89f43 | |||
| 36487d1b75 | |||
| c65cf3a804 | |||
| e03001dd91 | |||
| 3d216107d9 | |||
| ff1fe0f1af | |||
| 493b8be2ed | |||
| b347393ff6 | |||
| bdb7cbd36d | |||
| 646452e0ea | |||
| f41056924c | |||
| bc1e82952a | |||
| 03bb12efdb | |||
| 7b6c0291b2 | |||
| bd30872ed3 | |||
| 74abd3032a | |||
| 2e14223e1e | |||
| 4a09f1c634 | |||
| d322c7c9d8 | |||
| bc6eed67e8 | |||
| 57ce6aab92 | |||
| 734522f6c3 | |||
| 9c7b95ae23 | |||
| cf8472f2fc | |||
| cc23e02b89 | |||
| f21461e1ab | |||
| 13094e78ce | |||
| 7bb4c283a3 | |||
| 86f58adaa4 | |||
| 4efcbfbd35 | |||
| ac08908336 | |||
| 60e6fec07d | |||
| 061b21ed51 | |||
| 406cec6d27 | |||
| 95096fe98a | |||
| 5bbdb3bfa2 | |||
| 6c304055bf | |||
| 6ef27d8c58 | |||
| 4c64d076fc | |||
| 538406e9f3 | |||
| 0d5eb6c1ce | |||
| c785b0e33c | |||
| dd47d9d9d1 | |||
| c9ce22379b | |||
| 607aca574c | |||
| 247bed12ee | |||
| b7ee50dc21 | |||
| 417921fc55 | |||
| e0e9a207e8 | |||
| de56a5c5a3 | |||
| 1baed20dbb | |||
| 246fbdefb6 | |||
| afff028374 | |||
| 070f179ca8 | |||
| b157d916cb | |||
| eb98e7525f | |||
| a817b7b47b | |||
| 5545f58f85 | |||
| 11d7a731ce | |||
| 37a47b0f83 | |||
| cbdf6aab01 | |||
| 0050dfd523 | |||
| 262df83e8e | |||
| 5c6732f1ae | |||
| 4c107e03a0 | |||
| 862b852f96 | |||
| 7a70f103f2 | |||
| 9d647b72d7 | |||
| bd23b776bd | |||
| fa79e3f0c9 | |||
| 17f9f06dae | |||
| 8393aa568f | |||
| e4ee3fc7d8 | |||
| 5bc46da768 | |||
| 6c0d7d91aa | |||
| 3c6c0337e5 | |||
| 4bcad78a22 | |||
| 5a121af14a | |||
| e38d3e3b13 | |||
| d4f71de938 | |||
| 6418867a28 | |||
| 8902d96ad4 | |||
| c8d6537fde | |||
| 0690f07fca | |||
| 5e0c19f7a0 | |||
| 940b05e71d | |||
| a9d2b5b564 | |||
| a8c9b5fe18 | |||
| 9b1f8de430 | |||
| d5f5eae880 | |||
| d07614989e | |||
| 614c8702bf | |||
| 5bec3c33b0 | |||
| 9235848c6a | |||
| 4ef49674ec | |||
| a703188c8b | |||
| 864ccd9165 | |||
| b48d2b76d2 | |||
| b1c78c19bd | |||
| eda55ae93e | |||
| bff845d5dc | |||
| 9560956e8d | |||
| fbcabc4fd5 | 
							
								
								
									
										96
									
								
								.clang-format
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								.clang-format
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
Language:        Cpp
 | 
			
		||||
# BasedOnStyle:  LLVM
 | 
			
		||||
# should be in line with IndentWidth
 | 
			
		||||
AccessModifierOffset: -4
 | 
			
		||||
AlignAfterOpenBracket: Align
 | 
			
		||||
AlignConsecutiveAssignments: false
 | 
			
		||||
AlignConsecutiveDeclarations: false
 | 
			
		||||
AlignEscapedNewlinesLeft: false
 | 
			
		||||
AlignOperands:   true
 | 
			
		||||
AlignTrailingComments: true
 | 
			
		||||
AllowAllParametersOfDeclarationOnNextLine: true
 | 
			
		||||
AllowShortBlocksOnASingleLine: false
 | 
			
		||||
AllowShortCaseLabelsOnASingleLine: false
 | 
			
		||||
AllowShortFunctionsOnASingleLine: All
 | 
			
		||||
AllowShortIfStatementsOnASingleLine: false
 | 
			
		||||
AllowShortLoopsOnASingleLine: false
 | 
			
		||||
AlwaysBreakAfterDefinitionReturnType: None
 | 
			
		||||
AlwaysBreakAfterReturnType: None
 | 
			
		||||
AlwaysBreakBeforeMultilineStrings: false
 | 
			
		||||
AlwaysBreakTemplateDeclarations: false
 | 
			
		||||
BinPackArguments: true
 | 
			
		||||
BinPackParameters: true
 | 
			
		||||
BraceWrapping:   
 | 
			
		||||
  AfterClass:      false
 | 
			
		||||
  AfterControlStatement: false
 | 
			
		||||
  AfterEnum:       false
 | 
			
		||||
  AfterFunction:   false
 | 
			
		||||
  AfterNamespace:  false
 | 
			
		||||
  AfterObjCDeclaration: false
 | 
			
		||||
  AfterStruct:     false
 | 
			
		||||
  AfterUnion:      false
 | 
			
		||||
  BeforeCatch:     false
 | 
			
		||||
  BeforeElse:      false
 | 
			
		||||
  IndentBraces:    false
 | 
			
		||||
BreakBeforeBinaryOperators: None
 | 
			
		||||
BreakBeforeBraces: Attach
 | 
			
		||||
BreakBeforeTernaryOperators: true
 | 
			
		||||
BreakConstructorInitializersBeforeComma: true
 | 
			
		||||
BreakAfterJavaFieldAnnotations: false
 | 
			
		||||
BreakStringLiterals: true
 | 
			
		||||
ColumnLimit:     140
 | 
			
		||||
CommentPragmas:  '^( IWYU pragma:| @suppress)'
 | 
			
		||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
 | 
			
		||||
ConstructorInitializerIndentWidth: 0
 | 
			
		||||
ContinuationIndentWidth: 4
 | 
			
		||||
Cpp11BracedListStyle: true
 | 
			
		||||
DerivePointerAlignment: false
 | 
			
		||||
DisableFormat:   false
 | 
			
		||||
ExperimentalAutoDetectBinPacking: false
 | 
			
		||||
ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
 | 
			
		||||
IncludeCategories: 
 | 
			
		||||
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
 | 
			
		||||
    Priority:        2
 | 
			
		||||
  - Regex:           '^(<|"(gtest|isl|json)/)'
 | 
			
		||||
    Priority:        3
 | 
			
		||||
  - Regex:           '.*'
 | 
			
		||||
    Priority:        1
 | 
			
		||||
IncludeIsMainRegex: '$'
 | 
			
		||||
IndentCaseLabels: false
 | 
			
		||||
IndentWidth:     4
 | 
			
		||||
IndentWrappedFunctionNames: false
 | 
			
		||||
JavaScriptQuotes: Leave
 | 
			
		||||
JavaScriptWrapImports: true
 | 
			
		||||
KeepEmptyLinesAtTheStartOfBlocks: true
 | 
			
		||||
MacroBlockBegin: ''
 | 
			
		||||
MacroBlockEnd:   ''
 | 
			
		||||
MaxEmptyLinesToKeep: 1
 | 
			
		||||
NamespaceIndentation: None
 | 
			
		||||
ObjCBlockIndentWidth: 2
 | 
			
		||||
ObjCSpaceAfterProperty: false
 | 
			
		||||
ObjCSpaceBeforeProtocolList: true
 | 
			
		||||
PenaltyBreakBeforeFirstCallParameter: 19
 | 
			
		||||
PenaltyBreakComment: 300
 | 
			
		||||
PenaltyBreakFirstLessLess: 120
 | 
			
		||||
PenaltyBreakString: 1000
 | 
			
		||||
PenaltyExcessCharacter: 1000000
 | 
			
		||||
PenaltyReturnTypeOnItsOwnLine: 60
 | 
			
		||||
PointerAlignment: Left
 | 
			
		||||
ReflowComments:  true
 | 
			
		||||
SortIncludes:    true
 | 
			
		||||
SpaceAfterCStyleCast: false
 | 
			
		||||
SpaceAfterTemplateKeyword: true
 | 
			
		||||
SpaceBeforeAssignmentOperators: true
 | 
			
		||||
SpaceBeforeParens: Never
 | 
			
		||||
SpaceInEmptyParentheses: false
 | 
			
		||||
SpacesBeforeTrailingComments: 1
 | 
			
		||||
SpacesInAngles:  false
 | 
			
		||||
SpacesInContainerLiterals: true
 | 
			
		||||
SpacesInCStyleCastParentheses: false
 | 
			
		||||
SpacesInParentheses: false
 | 
			
		||||
SpacesInSquareBrackets: false
 | 
			
		||||
Standard:        Cpp11
 | 
			
		||||
TabWidth:        4
 | 
			
		||||
UseTab:          Never
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										83
									
								
								.cproject
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								.cproject
									
									
									
									
									
								
							@@ -48,13 +48,15 @@
 | 
			
		||||
					<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
 | 
			
		||||
				</defs>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
			<storageModule buildDir="build/${ConfigName}" dirtyTs="1697917985878" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
			
		||||
				<options/>
 | 
			
		||||
			<storageModule buildDir="build/${ConfigName}" dirtyTs="1746805637052" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
			
		||||
				<options otherArguments="--preset RelWithDebInfo"/>
 | 
			
		||||
				<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="WITH_LLVM" type="BOOL" val="ON"/>
 | 
			
		||||
				</defs>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
		</cconfiguration>
 | 
			
		||||
@@ -163,13 +165,74 @@
 | 
			
		||||
					<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
 | 
			
		||||
				</defs>
 | 
			
		||||
			</storageModule>
 | 
			
		||||
			<storageModule buildDir="build/${ConfigName}" dirtyTs="1697917985878" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
			
		||||
			<storageModule buildDir="build/${ConfigName}" dirtyTs="1746805637052" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
			
		||||
				<options otherArguments="--preset RelWithDebInfo"/>
 | 
			
		||||
				<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="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>
 | 
			
		||||
@@ -179,6 +242,7 @@
 | 
			
		||||
	</storageModule>
 | 
			
		||||
	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 | 
			
		||||
	<storageModule moduleId="refreshScope" versionNumber="2">
 | 
			
		||||
		<configuration configurationName="RelWithDebInfo4Prof"/>
 | 
			
		||||
		<configuration configurationName="Debug-PA">
 | 
			
		||||
			<resource resourceType="PROJECT" workspacePath="/TGC-ISS"/>
 | 
			
		||||
		</configuration>
 | 
			
		||||
@@ -190,7 +254,6 @@
 | 
			
		||||
			<resource resourceType="PROJECT" workspacePath="/TGC-ISS"/>
 | 
			
		||||
		</configuration>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
 | 
			
		||||
	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
 | 
			
		||||
	<storageModule cmakelistsFolder="" moduleId="de.marw.cmake4eclipse.mbs.settings">
 | 
			
		||||
		<targets>
 | 
			
		||||
@@ -212,4 +275,16 @@
 | 
			
		||||
			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 | 
			
		||||
		</scannerConfigBuildInfo>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
 | 
			
		||||
		<buildTargets>
 | 
			
		||||
			<target name="format" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
 | 
			
		||||
				<buildCommand>make</buildCommand>
 | 
			
		||||
				<buildArguments>$<cmake4eclipse_dyn></buildArguments>
 | 
			
		||||
				<buildTarget>format</buildTarget>
 | 
			
		||||
				<stopOnError>true</stopOnError>
 | 
			
		||||
				<useDefaultCommand>true</useDefaultCommand>
 | 
			
		||||
				<runAllBuilders>true</runAllBuilders>
 | 
			
		||||
			</target>
 | 
			
		||||
		</buildTargets>
 | 
			
		||||
	</storageModule>
 | 
			
		||||
</cproject>
 | 
			
		||||
							
								
								
									
										3
									
								
								.envrc
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								.envrc
									
									
									
									
									
								
							@@ -2,8 +2,9 @@ module load ./Modulefile
 | 
			
		||||
distro=`/bin/lsb_release -i -s`
 | 
			
		||||
if [ $distro == "CentOS" ]; then 
 | 
			
		||||
    . /opt/rh/devtoolset-8/enable
 | 
			
		||||
    . /opt/rh/llvm-toolset-7/enable
 | 
			
		||||
    . /opt/rh/rh-python38/enable
 | 
			
		||||
elif [ $distro == "Rocky" ]; then
 | 
			
		||||
    . /opt/rh/gcc-toolset-11/enable
 | 
			
		||||
fi
 | 
			
		||||
layout python3
 | 
			
		||||
[ -f .envrc.$USER ] && . .envrc.$USER
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,4 @@
 | 
			
		||||
/build/
 | 
			
		||||
/Debug/
 | 
			
		||||
.settings
 | 
			
		||||
/.venv*
 | 
			
		||||
/Debug-PA/
 | 
			
		||||
@@ -10,7 +9,18 @@
 | 
			
		||||
*.log
 | 
			
		||||
*tcc_jit*.c
 | 
			
		||||
*.disass
 | 
			
		||||
*.dis
 | 
			
		||||
*.objdump
 | 
			
		||||
*.asm
 | 
			
		||||
*.signature
 | 
			
		||||
*.elf
 | 
			
		||||
*.trc
 | 
			
		||||
/*.core_desc
 | 
			
		||||
/fasterDecoding/
 | 
			
		||||
*.ll
 | 
			
		||||
/dbt-rise-plugins
 | 
			
		||||
/.direnv
 | 
			
		||||
/TGC_C_XRB/
 | 
			
		||||
/.envrc.eyck
 | 
			
		||||
/.cache
 | 
			
		||||
CMakeUserPresets.json
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,3 @@
 | 
			
		||||
[submodule "scc"]
 | 
			
		||||
	path = scc
 | 
			
		||||
	url = https://github.com/Minres/SystemC-Components.git
 | 
			
		||||
[submodule "dbt-rise-core"]
 | 
			
		||||
	path = dbt-rise-core
 | 
			
		||||
	url = https://github.com/Minres/DBT-RISE-Core.git
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										284
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										284
									
								
								CMakeLists.txt
									
									
									
									
									
								
							@@ -1,181 +1,141 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.16)
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake)
 | 
			
		||||
cmake_minimum_required(VERSION 3.20)
 | 
			
		||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 | 
			
		||||
 | 
			
		||||
project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
 | 
			
		||||
 | 
			
		||||
set(WITH_LLVM FALSE CACHE BOOL "Build LLVM based backend")
 | 
			
		||||
if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
 | 
			
		||||
	###########################################################################
 | 
			
		||||
	# stand alone build settings
 | 
			
		||||
	###########################################################################
 | 
			
		||||
	set(CORE_NAME TGC5C CACHE STRING "The core to build the ISS for" )
 | 
			
		||||
	option(FW_BUILD "Enable the automatic download and build of some firmware to run on the ISS" OFF)
 | 
			
		||||
	option(ENABLE_SANITIZER "Enable address sanitizer" OFF)
 | 
			
		||||
    ###########################################################################
 | 
			
		||||
    # stand alone build settings
 | 
			
		||||
    ###########################################################################
 | 
			
		||||
    set(CORE_NAME TGC5C CACHE STRING "The core to build the ISS for" )
 | 
			
		||||
    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" ON)
 | 
			
		||||
    option(PORTABLE "Build executable without platform specific optimizations" OFF)
 | 
			
		||||
 | 
			
		||||
	set(CMAKE_CXX_STANDARD 14)
 | 
			
		||||
	set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
			
		||||
	set(CMAKE_CXX_EXTENSIONS OFF)
 | 
			
		||||
	set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 | 
			
		||||
	set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 | 
			
		||||
	set(CMAKE_INSTALL_RPATH "${ORIGIN}")
 | 
			
		||||
	include(CheckCXXCompilerFlag)
 | 
			
		||||
	CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
			
		||||
	if(COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
			
		||||
		if("${CMAKE_BUILD_TYPE}" STREQUAL "") 
 | 
			
		||||
		    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
			
		||||
		elseif(NOT(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo"))
 | 
			
		||||
		    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
			
		||||
		endif()
 | 
			
		||||
	endif()
 | 
			
		||||
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
			
		||||
    set(CMAKE_CXX_EXTENSIONS OFF)
 | 
			
		||||
    set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 | 
			
		||||
    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 | 
			
		||||
    set(CMAKE_INSTALL_RPATH "${ORIGIN}")
 | 
			
		||||
    include(CheckCXXCompilerFlag)
 | 
			
		||||
    CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
 | 
			
		||||
    if(COMPILER_SUPPORTS_MARCH_NATIVE AND NOT PORTABLE)
 | 
			
		||||
        message(STATUS "Applying platform specific optimizations")
 | 
			
		||||
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
 | 
			
		||||
    endif()
 | 
			
		||||
    
 | 
			
		||||
	if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
 | 
			
		||||
	    set(warnings "-Wall -Wextra -Werror")
 | 
			
		||||
	    set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
			
		||||
	    set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
			
		||||
	elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
 | 
			
		||||
	    set(warnings "/W4 /WX /EHsc")
 | 
			
		||||
	endif()
 | 
			
		||||
	if(ENABLE_SANITIZER)
 | 
			
		||||
		set(CMAKE_C_FLAGS             "${CMAKE_C_FLAGS} -fsanitize=address")
 | 
			
		||||
		set(CMAKE_CXX_FLAGS           "${CMAKE_CXX_FLAGS} -fsanitize=address")
 | 
			
		||||
		set(CMAKE_EXE_LINKER_FLAGS    "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
 | 
			
		||||
		set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
 | 
			
		||||
	endif()
 | 
			
		||||
	include(GNUInstallDirs)
 | 
			
		||||
	include(ConanInline)
 | 
			
		||||
	if(BUILD_SHARED_LIBS)
 | 
			
		||||
		set(SHARED_FLAG "True")
 | 
			
		||||
	else()
 | 
			
		||||
		set(SHARED_FLAG "False")
 | 
			
		||||
	endif()
 | 
			
		||||
    if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
 | 
			
		||||
        set(warnings "-Wall -Wextra -Werror")
 | 
			
		||||
        set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
			
		||||
        set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
 | 
			
		||||
    elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
 | 
			
		||||
        set(warnings "/W4 /WX /EHsc")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(ENABLE_SANITIZER)
 | 
			
		||||
        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)
 | 
			
		||||
    if(BUILD_SHARED_LIBS)
 | 
			
		||||
        set(SHARED_FLAG "True")
 | 
			
		||||
    else()
 | 
			
		||||
        set(SHARED_FLAG "False")
 | 
			
		||||
    endif()
 | 
			
		||||
    
 | 
			
		||||
	set(CONAN_BOOST_OPTIONS
 | 
			
		||||
	boost:fPIC=True
 | 
			
		||||
	boost:shared=${SHARED_FLAG}
 | 
			
		||||
	boost:header_only=False 
 | 
			
		||||
	boost:without_contract=True
 | 
			
		||||
	boost:without_graph=True
 | 
			
		||||
	boost:without_graph_parallel=True
 | 
			
		||||
	boost:without_iostreams=True
 | 
			
		||||
	boost:without_json=True
 | 
			
		||||
	boost:without_locale=True
 | 
			
		||||
	boost:without_log=True
 | 
			
		||||
	boost:without_math=True
 | 
			
		||||
	boost:without_mpi=True
 | 
			
		||||
	boost:without_nowide=True
 | 
			
		||||
	boost:without_python=True
 | 
			
		||||
	boost:without_random=True
 | 
			
		||||
	boost:without_regex=True
 | 
			
		||||
	boost:without_stacktrace=True
 | 
			
		||||
	boost:without_test=True
 | 
			
		||||
	boost:without_timer=True
 | 
			
		||||
	boost:without_type_erasure=True
 | 
			
		||||
	boost:without_wave=True
 | 
			
		||||
	)
 | 
			
		||||
    set(B2_VERSION 4.9.6)
 | 
			
		||||
    set(CM_VERSION 3.20.5)
 | 
			
		||||
    set(LLVM_VERSION 13.0.0)
 | 
			
		||||
 | 
			
		||||
	set(B2_VERSION 4.9.6)
 | 
			
		||||
	set(CM_VERSION 3.20.5)
 | 
			
		||||
	set(CONAN_PACKAGE_LIST 
 | 
			
		||||
		fmt/8.0.1
 | 
			
		||||
		spdlog/1.9.2
 | 
			
		||||
		boost/1.75.0 
 | 
			
		||||
		gsl-lite/0.37.0 
 | 
			
		||||
		elfio/3.8 
 | 
			
		||||
		lz4/1.9.3 
 | 
			
		||||
		yaml-cpp/0.7.0 
 | 
			
		||||
		jsoncpp/1.9.5
 | 
			
		||||
		zlib/1.2.13
 | 
			
		||||
	)
 | 
			
		||||
	set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
 | 
			
		||||
    find_package(fmt)
 | 
			
		||||
    find_package(spdlog)
 | 
			
		||||
    find_package(lz4)
 | 
			
		||||
    find_package(gsl-lite)
 | 
			
		||||
    find_package(yaml-cpp)
 | 
			
		||||
    set(Boost_NO_BOOST_CMAKE ON) #  Don't do a find_package in config mode before searching for a regular boost install.
 | 
			
		||||
    set(BOOST_ROOT ${CONAN_BOOST_ROOT})
 | 
			
		||||
    find_package(Threads)
 | 
			
		||||
    find_package(ZLIB)
 | 
			
		||||
    
 | 
			
		||||
	if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
 | 
			
		||||
	    list(APPEND CONAN_PACKAGE_LIST tcc/0.9.27)
 | 
			
		||||
		option(WITH_TCC "Build TCC backend" ON)
 | 
			
		||||
	endif()
 | 
			
		||||
    if(USE_CWR_SYSTEMC)
 | 
			
		||||
        include(SystemCPackage)
 | 
			
		||||
    endif()
 | 
			
		||||
    ###############################################################################
 | 
			
		||||
    # setup clang-format and clang-tidy
 | 
			
		||||
    ###############################################################################
 | 
			
		||||
    if (ENABLE_CLANG_TIDY)
 | 
			
		||||
        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)
 | 
			
		||||
            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(WITH_LLVM)
 | 
			
		||||
	    list(APPEND CONAN_PACKAGE_LIST llvm-core/13.0.0)
 | 
			
		||||
		list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
 | 
			
		||||
	endif()
 | 
			
		||||
	if(WITH_ASMJIT)
 | 
			
		||||
	    list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20230325)
 | 
			
		||||
		list(APPEND CONAN_PACKAGE_OPTIONS asmjit:shared=False)
 | 
			
		||||
	endif()
 | 
			
		||||
	if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
 | 
			
		||||
	     list(APPEND CONAN_PACKAGE_OPTIONS lua:compile_as_cpp=False)
 | 
			
		||||
	     list(APPEND CONAN_PACKAGE_LIST lua/5.4.3)
 | 
			
		||||
	endif()
 | 
			
		||||
 | 
			
		||||
	conan_check()
 | 
			
		||||
	conan_add_remote(NAME minres URL https://git.minres.com/api/packages/Tooling/conan)
 | 
			
		||||
	###########################################################################
 | 
			
		||||
	# Boost on CentOS 7 quirks: the b2 of conan-center is build against a newer libstdc++ and therefore does not run
 | 
			
		||||
	# with the oooooold libs on CentOS 7. Therefore we build our own version of b2 if it is not there
 | 
			
		||||
	###########################################################################
 | 
			
		||||
	set(B2_META $ENV{HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
 | 
			
		||||
	set(CM_META $ENV{HOME}/.conan/data/cmake/${CM_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)
 | 
			
		||||
	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)
 | 
			
		||||
	find_package(spdlog)
 | 
			
		||||
	find_package(lz4)
 | 
			
		||||
	find_package(gsl-lite)
 | 
			
		||||
	find_package(yaml-cpp)
 | 
			
		||||
	set(Boost_NO_BOOST_CMAKE ON) #  Don't do a find_package in config mode before searching for a regular boost install.
 | 
			
		||||
	set(BOOST_ROOT ${CONAN_BOOST_ROOT})
 | 
			
		||||
	find_package(Threads)
 | 
			
		||||
	find_package(ZLIB)
 | 
			
		||||
	
 | 
			
		||||
	if(USE_CWR_SYSTEMC)
 | 
			
		||||
		include(SystemCPackage)
 | 
			
		||||
	endif()
 | 
			
		||||
	if(FW_BUILD)
 | 
			
		||||
		include(FetchContent)
 | 
			
		||||
		set(FETCHCONTENT_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}/..)
 | 
			
		||||
		FetchContent_Declare(
 | 
			
		||||
		  	riscvfw
 | 
			
		||||
		  	GIT_REPOSITORY https://git.minres.com/VP/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()
 | 
			
		||||
    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        develop
 | 
			
		||||
              GIT_SHALLOW OFF
 | 
			
		||||
              UPDATE_DISCONNECTED ON
 | 
			
		||||
        )
 | 
			
		||||
        FetchContent_GetProperties(riscvfw)
 | 
			
		||||
        if(NOT riscvfw_POPULATED)
 | 
			
		||||
              FetchContent_Populate(riscvfw)
 | 
			
		||||
        endif()
 | 
			
		||||
         add_subdirectory(${riscvfw_SOURCE_DIR})
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_subdirectory(dbt-rise-core)
 | 
			
		||||
add_subdirectory(scc)
 | 
			
		||||
add_subdirectory(dbt-rise-tgc)
 | 
			
		||||
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
 | 
			
		||||
	add_subdirectory(dbt-rise-plugins)
 | 
			
		||||
    add_subdirectory(dbt-rise-plugins)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
include(CTest)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								CMakePresets.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								CMakePresets.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
{
 | 
			
		||||
    "version": 3,
 | 
			
		||||
    "vendor": {
 | 
			
		||||
        "conan": {}
 | 
			
		||||
    },
 | 
			
		||||
    "cmakeMinimumRequired": {
 | 
			
		||||
        "major": 3,
 | 
			
		||||
        "minor": 24,
 | 
			
		||||
        "patch": 0
 | 
			
		||||
    },
 | 
			
		||||
    "configurePresets": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Debug",
 | 
			
		||||
            "displayName": "Debug build",
 | 
			
		||||
            "generator": "Ninja",
 | 
			
		||||
            "binaryDir": "${sourceDir}/build/${presetName}",
 | 
			
		||||
            "cacheVariables": {
 | 
			
		||||
                "CMAKE_POLICY_DEFAULT_CMP0091": "NEW",
 | 
			
		||||
                "CMAKE_BUILD_TYPE": "Debug",
 | 
			
		||||
                "CMAKE_CXX_STANDARD": "17",
 | 
			
		||||
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
 | 
			
		||||
                "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
 | 
			
		||||
                "CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "cmake/conan_provider.cmake"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "RelWithDebInfo",
 | 
			
		||||
            "cacheVariables": {
 | 
			
		||||
                "CMAKE_POLICY_DEFAULT_CMP0091": "NEW",
 | 
			
		||||
                "CMAKE_BUILD_TYPE": "RelWithDebInfo",
 | 
			
		||||
                "CMAKE_CXX_STANDARD": "17",
 | 
			
		||||
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
 | 
			
		||||
                "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
 | 
			
		||||
                "CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "cmake/conan_provider.cmake"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Release",
 | 
			
		||||
            "displayName": "Release build",
 | 
			
		||||
            "generator": "Ninja",
 | 
			
		||||
            "binaryDir": "${sourceDir}/build/${presetName}",
 | 
			
		||||
            "cacheVariables": {
 | 
			
		||||
                "CMAKE_POLICY_DEFAULT_CMP0091": "NEW",
 | 
			
		||||
                "CMAKE_BUILD_TYPE": "Release",
 | 
			
		||||
                "CMAKE_CXX_STANDARD": "17",
 | 
			
		||||
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
 | 
			
		||||
                "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
 | 
			
		||||
                "CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "cmake/conan_provider.cmake"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										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 detect --force'
 | 
			
		||||
                        sh 'rm -rf build'
 | 
			
		||||
                        sh 'cmake -S . -B build --preset Release -DWITH_ASMJIT=ON -DWITH_TCC=ON -DWITH_LLVM=OFF'
 | 
			
		||||
                        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} --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} --backend ${BACKEND}"
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -13,10 +13,10 @@ if { $distro == "CentOS" && ![info exists ::env(PROJECT)] && ![info exists ::env
 | 
			
		||||
    puts stderr     "Don't forget to execute 'scl enable devtoolset-7 bash'"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#module load tools/utilities
 | 
			
		||||
module load tools/utilities
 | 
			
		||||
module load tools/cmake
 | 
			
		||||
#module load tools/gcc-riscv64/9.2.0
 | 
			
		||||
module load tools/gcc-riscv32-unknown-elf/11
 | 
			
		||||
module load tools/clang
 | 
			
		||||
module load tools/gcc-riscv64-unknown-elf/13
 | 
			
		||||
 | 
			
		||||
setenv PROJECT TGFS-ISS
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
									
									
									
									
								
							@@ -7,6 +7,7 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
 | 
			
		||||
## Quick start
 | 
			
		||||
 | 
			
		||||
* you need to have a C++14 capable compiler, make or ninja, python, and cmake installed
 | 
			
		||||
 > **Warning:** With the Usage of conan2 the LLVM backend became deprecated as there is no conan package available yet.
 | 
			
		||||
 | 
			
		||||
### common setup
 | 
			
		||||
 | 
			
		||||
@@ -14,7 +15,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'
 | 
			
		||||
 | 
			
		||||
  ```
 | 
			
		||||
  
 | 
			
		||||
@@ -25,15 +26,16 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
 | 
			
		||||
 | 
			
		||||
  python -mvenv .venv
 | 
			
		||||
  source .venv/bin/activate
 | 
			
		||||
  pip3 install conan==1.59
 | 
			
		||||
  pip3 install conan
 | 
			
		||||
 | 
			
		||||
  ``` 
 | 
			
		||||
  
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
  ```
 | 
			
		||||
  
 | 
			
		||||
@@ -52,7 +54,7 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
  cd TGC-ISS
 | 
			
		||||
  cmake -S . -B build/Debug
 | 
			
		||||
  cmake --preset Debug -S . -B build/Debug
 | 
			
		||||
  cmake --build build/Debug -j10
 | 
			
		||||
 | 
			
		||||
  ```
 | 
			
		||||
@@ -70,7 +72,7 @@ Assuming environment for Platform Architect is properly set up.
 | 
			
		||||
  source $COWAREHOME/SLS/linux/setup.sh pae
 | 
			
		||||
  export CC=$COWAREHOME/SLS/linux/common/bin/gcc
 | 
			
		||||
  export CXX=$COWAREHOME/SLS/linux/common/bin/g++
 | 
			
		||||
  cmake -S . -B build/PA -DCMAKE_BUILD_TYPE=Debug -DUSE_CWR_SYSTEMC=ON \
 | 
			
		||||
  cmake --preset Debug -S . -B build/PA -DUSE_CWR_SYSTEMC=ON \
 | 
			
		||||
    -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=${TGFS_INSTALL_ROOT}
 | 
			
		||||
  cmake --build build/PA --target install -j16
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										107
									
								
								cmake/ConanInline.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								cmake/ConanInline.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
 | 
			
		||||
set(CONAN_CMAKE_LIST_DIR ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
 | 
			
		||||
macro(conan_check)
 | 
			
		||||
  # for backwards compatibility
 | 
			
		||||
  cmake_parse_arguments(MARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 | 
			
		||||
 
 | 
			
		||||
  find_program(CONAN conan)
 | 
			
		||||
  if(NOT EXISTS ${CONAN})
 | 
			
		||||
    message(FATAL_ERROR "Conan is required. Please see README.md")
 | 
			
		||||
    return()
 | 
			
		||||
  endif()
 | 
			
		||||
  execute_process(COMMAND ${CONAN} --version
 | 
			
		||||
                  OUTPUT_VARIABLE CONAN_VERSION_OUTPUT)
 | 
			
		||||
  string(REGEX MATCHALL "[0-9.]+" CONAN_VERSION ${CONAN_VERSION_OUTPUT})
 | 
			
		||||
  if (NOT (CONAN_VERSION VERSION_GREATER_EQUAL 1.36.0))
 | 
			
		||||
    message(FATAL_ERROR "Please upgrade your conan to a version greater or equal 1.36")
 | 
			
		||||
  endif()
 | 
			
		||||
 
 | 
			
		||||
  if(NOT EXISTS ${CONAN_CMAKE_LIST_DIR}/conan.cmake)
 | 
			
		||||
    message("Downloading conan.cmake to ${CONAN_CMAKE_LIST_DIR}")
 | 
			
		||||
    set(URL https://raw.githubusercontent.com/conan-io/cmake-conan/0.18.1/conan.cmake)
 | 
			
		||||
    file(DOWNLOAD ${URL} ${CONAN_CMAKE_LIST_DIR}/conan.cmake TIMEOUT 60 STATUS DOWNLOAD_STATUS)
 | 
			
		||||
    list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
 | 
			
		||||
    list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
 | 
			
		||||
    if(NOT (${STATUS_CODE} EQUAL 0))
 | 
			
		||||
        # Exit CMake if the download failed, printing the error message.
 | 
			
		||||
        message(FATAL_ERROR "Error occurred during download: ${ERROR_MESSAGE}")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(NOT EXISTS ${CONAN_CMAKE_LIST_DIR}/conan.cmake)
 | 
			
		||||
        message(FATAL_ERROR "Could not download conan.cmake. Please check your internet connection or proxy settings")
 | 
			
		||||
    endif()
 | 
			
		||||
    file (SIZE ${CONAN_CMAKE_LIST_DIR}/conan.cmake CONAN_CMAKE_SIZE)
 | 
			
		||||
    if(${CONAN_CMAKE_SIZE} EQUAL 0)
 | 
			
		||||
         message(FATAL_ERROR "Could not download conan.cmake. Please check your internet connection or proxy settings")
 | 
			
		||||
    endif()
 | 
			
		||||
  endif()
 | 
			
		||||
  if("${CMAKE_BUILD_TYPE}" STREQUAL "")
 | 
			
		||||
      set(CMAKE_BUILD_TYPE Release)
 | 
			
		||||
  endif()
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  include(${CONAN_CMAKE_LIST_DIR}/conan.cmake)
 | 
			
		||||
  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR})
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
macro(conan_setup)
 | 
			
		||||
  set(options TARGETS) 
 | 
			
		||||
  cmake_parse_arguments(MARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
  set(conanfile_cmake_paths ${CMAKE_BINARY_DIR}/conan_paths.cmake)
 | 
			
		||||
 | 
			
		||||
  set(conanfile_cmake ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
 | 
			
		||||
  if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
 | 
			
		||||
	  set(conanfile_cmake ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  if(EXISTS "${conanfile_cmake_paths}")
 | 
			
		||||
    include(${conanfile_cmake_paths})
 | 
			
		||||
  elseif(EXISTS "${conanfile_cmake}")
 | 
			
		||||
    include(${conanfile_cmake})
 | 
			
		||||
    if( MARGS_TARGETS)
 | 
			
		||||
      conan_basic_setup(TARGETS)
 | 
			
		||||
    else()
 | 
			
		||||
      conan_basic_setup()
 | 
			
		||||
    endif()
 | 
			
		||||
  endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
function(conan_configure)
 | 
			
		||||
    conan_cmake_generate_conanfile(OFF ${ARGV})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
macro(conan_install)
 | 
			
		||||
  	set(options BUILD_TYPE BUILD) 
 | 
			
		||||
 	set(oneValueArgs BUILD_TYPE BUILD)
 | 
			
		||||
	cmake_parse_arguments(MARGS "" "${oneValueArgs}" "" ${ARGN} )
 | 
			
		||||
  	if(MARGS_BUILD_TYPE)
 | 
			
		||||
		conan_cmake_autodetect(settings BUILD_TYPE ${MARGS_BUILD_TYPE})
 | 
			
		||||
  	else()
 | 
			
		||||
		conan_cmake_autodetect(settings BUILD_TYPE)
 | 
			
		||||
	endif()
 | 
			
		||||
	if(CMAKE_CXX_STANDARD)
 | 
			
		||||
		list(APPEND settings compiler.cppstd=${CMAKE_CXX_STANDARD})
 | 
			
		||||
	endif()
 | 
			
		||||
	if(USE_NCSC_SYSTEMC)
 | 
			
		||||
		list(APPEND settings compiler.libcxx=libstdc++)
 | 
			
		||||
	endif()
 | 
			
		||||
	if (NOT "$ENV{CONAN_PROFILE_NAME}" STREQUAL "")
 | 
			
		||||
    	set(CONAN_PROFILE "$ENV{CONAN_PROFILE_NAME}" CACHE INTERNAL "Copied from environment variable")
 | 
			
		||||
    else()
 | 
			
		||||
    	set(CONAN_PROFILE "default" CACHE INTERNAL "Copied from environment variable")
 | 
			
		||||
   endif()
 | 
			
		||||
	
 | 
			
		||||
  	if(MARGS_BUILD)
 | 
			
		||||
	conan_cmake_install(PATH_OR_REFERENCE .
 | 
			
		||||
	                    BUILD ${MARGS_BUILD}
 | 
			
		||||
	                    PROFILE_BUILD ${CONAN_PROFILE}
 | 
			
		||||
	                    SETTINGS ${settings})
 | 
			
		||||
	else()
 | 
			
		||||
	conan_cmake_install(PATH_OR_REFERENCE .
 | 
			
		||||
	                    BUILD missing
 | 
			
		||||
	                    PROFILE_BUILD ${CONAN_PROFILE}
 | 
			
		||||
	                    SETTINGS ${settings})
 | 
			
		||||
    endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
							
								
								
									
										34
									
								
								cmake/FindClangFormat.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								cmake/FindClangFormat.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
# Find Clang format
 | 
			
		||||
# 
 | 
			
		||||
# 
 | 
			
		||||
if(NOT CLANG_FORMAT_BIN_NAME)
 | 
			
		||||
    set(CLANG_FORMAT_BIN_NAME clang-format)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# if custom path check there first
 | 
			
		||||
if(CLANG_FORMAT_ROOT_DIR)
 | 
			
		||||
    find_program(CLANG_FORMAT_BIN 
 | 
			
		||||
        NAMES
 | 
			
		||||
        ${CLANG_FORMAT_BIN_NAME}
 | 
			
		||||
        PATHS
 | 
			
		||||
        "${CLANG_FORMAT_ROOT_DIR}"
 | 
			
		||||
        NO_DEFAULT_PATH)
 | 
			
		||||
else()
 | 
			
		||||
    find_program(CLANG_FORMAT_BIN NAMES ${CLANG_FORMAT_BIN_NAME})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
include(FindPackageHandleStandardArgs)
 | 
			
		||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
 | 
			
		||||
    ClangFormat
 | 
			
		||||
    DEFAULT_MSG 
 | 
			
		||||
    CLANG_FORMAT_BIN)
 | 
			
		||||
 | 
			
		||||
mark_as_advanced(
 | 
			
		||||
    CLANG_FORMAT_BIN)
 | 
			
		||||
 | 
			
		||||
if(ClangFormat_FOUND)
 | 
			
		||||
    # A CMake script to find all source files and setup clang-format targets for them
 | 
			
		||||
    include(clang-format)
 | 
			
		||||
else()
 | 
			
		||||
    message("clang-format not found. Not setting up format targets")
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										40
									
								
								cmake/clang-format.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								cmake/clang-format.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
# additional target to perform clang-format run, requires clang-format
 | 
			
		||||
 | 
			
		||||
set(CLANG_FORMAT_CXX_FILE_EXTENSIONS ${CLANG_FORMAT_CXX_FILE_EXTENSIONS} *.cpp *.h *.cxx *.hxx *.hpp *.cc *.ipp)
 | 
			
		||||
file(GLOB_RECURSE ALL_SOURCE_FILES ${CLANG_FORMAT_CXX_FILE_EXTENSIONS})
 | 
			
		||||
 | 
			
		||||
# Don't include some common build folders
 | 
			
		||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS ${CLANG_FORMAT_EXCLUDE_PATTERNS} "/CMakeFiles/" "cmake")
 | 
			
		||||
 | 
			
		||||
# get all project files file
 | 
			
		||||
foreach (SOURCE_FILE ${ALL_SOURCE_FILES}) 
 | 
			
		||||
    foreach (EXCLUDE_PATTERN ${CLANG_FORMAT_EXCLUDE_PATTERNS})
 | 
			
		||||
        string(FIND ${SOURCE_FILE} ${EXCLUDE_PATTERN} EXCLUDE_FOUND) 
 | 
			
		||||
        if (NOT ${EXCLUDE_FOUND} EQUAL -1) 
 | 
			
		||||
            list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE})
 | 
			
		||||
        endif () 
 | 
			
		||||
    endforeach ()
 | 
			
		||||
endforeach ()
 | 
			
		||||
 | 
			
		||||
set(FORMAT_TARGET_NAME format)
 | 
			
		||||
if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
 | 
			
		||||
	set(FORMAT_TARGET_NAME format-${PROJECT_NAME})
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
add_custom_target(${FORMAT_TARGET_NAME}
 | 
			
		||||
    COMMENT "Running clang-format to change files"
 | 
			
		||||
    COMMAND ${CLANG_FORMAT_BIN} -style=file -i ${ALL_SOURCE_FILES}
 | 
			
		||||
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
add_custom_target(${FORMAT_TARGET_NAME}-check
 | 
			
		||||
    COMMENT "Checking clang-format changes"
 | 
			
		||||
    # Use ! to negate the result for correct output
 | 
			
		||||
    COMMAND !
 | 
			
		||||
    ${CLANG_FORMAT_BIN}
 | 
			
		||||
    -style=file
 | 
			
		||||
    -output-replacements-xml
 | 
			
		||||
    ${ALL_SOURCE_FILES}
 | 
			
		||||
    | grep -q "replacement offset" 
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										676
									
								
								cmake/conan_provider.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										676
									
								
								cmake/conan_provider.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,676 @@
 | 
			
		||||
# The MIT License (MIT)
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2024 JFrog
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
# in the Software without restriction, including without limitation the rights
 | 
			
		||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
# copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
# copies or substantial portions of the Software.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
# SOFTWARE.
 | 
			
		||||
 | 
			
		||||
set(CONAN_MINIMUM_VERSION 2.0.5)
 | 
			
		||||
 | 
			
		||||
# Create a new policy scope and set the minimum required cmake version so the
 | 
			
		||||
# features behind a policy setting like if(... IN_LIST ...) behaves as expected
 | 
			
		||||
# even if the parent project does not specify a minimum cmake version or a minimum
 | 
			
		||||
# version less than this module requires (e.g. 3.0) before the first project() call.
 | 
			
		||||
# (see: https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_TOP_LEVEL_INCLUDES.html)
 | 
			
		||||
#
 | 
			
		||||
# The policy-affecting calls like cmake_policy(SET...) or `cmake_minimum_required` only
 | 
			
		||||
# affects the current policy scope, i.e. between the PUSH and POP in this case.
 | 
			
		||||
#
 | 
			
		||||
# https://cmake.org/cmake/help/book/mastering-cmake/chapter/Policies.html#the-policy-stack
 | 
			
		||||
cmake_policy(PUSH)
 | 
			
		||||
cmake_minimum_required(VERSION 3.24)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_os os os_api_level os_sdk os_subsystem os_version)
 | 
			
		||||
    # it could be cross compilation
 | 
			
		||||
    message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}")
 | 
			
		||||
    if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic")
 | 
			
		||||
        if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
 | 
			
		||||
            set(${os} Macos PARENT_SCOPE)
 | 
			
		||||
        elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
 | 
			
		||||
            set(${os} Neutrino PARENT_SCOPE)
 | 
			
		||||
        elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
 | 
			
		||||
            set(${os} Windows PARENT_SCOPE)
 | 
			
		||||
            set(${os_subsystem} cygwin PARENT_SCOPE)
 | 
			
		||||
        elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS")
 | 
			
		||||
            set(${os} Windows PARENT_SCOPE)
 | 
			
		||||
            set(${os_subsystem} msys2 PARENT_SCOPE)
 | 
			
		||||
        else()
 | 
			
		||||
            set(${os} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE)
 | 
			
		||||
        endif()
 | 
			
		||||
        if(CMAKE_SYSTEM_NAME STREQUAL "Android")
 | 
			
		||||
            if(DEFINED ANDROID_PLATFORM)
 | 
			
		||||
                string(REGEX MATCH "[0-9]+" _os_api_level ${ANDROID_PLATFORM})
 | 
			
		||||
            elseif(DEFINED CMAKE_SYSTEM_VERSION)
 | 
			
		||||
                set(_os_api_level ${CMAKE_SYSTEM_VERSION})
 | 
			
		||||
            endif()
 | 
			
		||||
            message(STATUS "CMake-Conan: android api level=${_os_api_level}")
 | 
			
		||||
            set(${os_api_level} ${_os_api_level} PARENT_SCOPE)
 | 
			
		||||
        endif()
 | 
			
		||||
        if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS")
 | 
			
		||||
            # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja
 | 
			
		||||
            # generators, but just has the original input string for Xcode.
 | 
			
		||||
            if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT})
 | 
			
		||||
                set(_os_sdk ${CMAKE_OSX_SYSROOT})
 | 
			
		||||
            else()
 | 
			
		||||
                if(CMAKE_OSX_SYSROOT MATCHES Simulator)
 | 
			
		||||
                    set(apple_platform_suffix simulator)
 | 
			
		||||
                else()
 | 
			
		||||
                    set(apple_platform_suffix os)
 | 
			
		||||
                endif()
 | 
			
		||||
                if(CMAKE_OSX_SYSROOT MATCHES AppleTV)
 | 
			
		||||
                    set(_os_sdk "appletv${apple_platform_suffix}")
 | 
			
		||||
                elseif(CMAKE_OSX_SYSROOT MATCHES iPhone)
 | 
			
		||||
                    set(_os_sdk "iphone${apple_platform_suffix}")
 | 
			
		||||
                elseif(CMAKE_OSX_SYSROOT MATCHES Watch)
 | 
			
		||||
                    set(_os_sdk "watch${apple_platform_suffix}")
 | 
			
		||||
                endif()
 | 
			
		||||
            endif()
 | 
			
		||||
            if(DEFINED os_sdk)
 | 
			
		||||
                message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}")
 | 
			
		||||
                set(${os_sdk} ${_os_sdk} PARENT_SCOPE)
 | 
			
		||||
            endif()
 | 
			
		||||
            if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET)
 | 
			
		||||
                message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}")
 | 
			
		||||
                set(${os_version} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE)
 | 
			
		||||
            endif()
 | 
			
		||||
        endif()
 | 
			
		||||
    endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_arch arch)
 | 
			
		||||
    # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one.
 | 
			
		||||
    # Therefore this code only finds one. If the recipes support multiple architectures, the
 | 
			
		||||
    # build will work. Otherwise, there will be a linker error for the missing architecture(s).
 | 
			
		||||
    if(DEFINED CMAKE_OSX_ARCHITECTURES)
 | 
			
		||||
        string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}")
 | 
			
		||||
        list(LENGTH apple_arch_list apple_arch_count)
 | 
			
		||||
        if(apple_arch_count GREATER 1)
 | 
			
		||||
            message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.")
 | 
			
		||||
        endif()
 | 
			
		||||
    endif()
 | 
			
		||||
    if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "")
 | 
			
		||||
        set(host_arch ${CMAKE_OSX_ARCHITECTURES})
 | 
			
		||||
    elseif(MSVC)
 | 
			
		||||
        set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})
 | 
			
		||||
    else()
 | 
			
		||||
        set(host_arch ${CMAKE_SYSTEM_PROCESSOR})
 | 
			
		||||
    endif()
 | 
			
		||||
    if(host_arch MATCHES "aarch64|arm64|ARM64")
 | 
			
		||||
        set(_arch armv8)
 | 
			
		||||
    elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7")
 | 
			
		||||
        set(_arch armv7)
 | 
			
		||||
    elseif(host_arch MATCHES armv7s)
 | 
			
		||||
        set(_arch armv7s)
 | 
			
		||||
    elseif(host_arch MATCHES "i686|i386|X86")
 | 
			
		||||
        set(_arch x86)
 | 
			
		||||
    elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64")
 | 
			
		||||
        set(_arch x86_64)
 | 
			
		||||
    endif()
 | 
			
		||||
    message(STATUS "CMake-Conan: cmake_system_processor=${_arch}")
 | 
			
		||||
    set(${arch} ${_arch} PARENT_SCOPE)
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_cxx_standard cxx_standard)
 | 
			
		||||
    set(${cxx_standard} ${CMAKE_CXX_STANDARD} PARENT_SCOPE)
 | 
			
		||||
    if(CMAKE_CXX_EXTENSIONS)
 | 
			
		||||
        set(${cxx_standard} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE)
 | 
			
		||||
    endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(detect_gnu_libstdcxx)
 | 
			
		||||
    # _conan_is_gnu_libstdcxx true if GNU libstdc++
 | 
			
		||||
    check_cxx_source_compiles("
 | 
			
		||||
    #include <cstddef>
 | 
			
		||||
    #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__)
 | 
			
		||||
    static_assert(false);
 | 
			
		||||
    #endif
 | 
			
		||||
    int main(){}" _conan_is_gnu_libstdcxx)
 | 
			
		||||
 | 
			
		||||
    # _conan_gnu_libstdcxx_is_cxx11_abi true if C++11 ABI
 | 
			
		||||
    check_cxx_source_compiles("
 | 
			
		||||
    #include <string>
 | 
			
		||||
    static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\");
 | 
			
		||||
    int main () {}" _conan_gnu_libstdcxx_is_cxx11_abi)
 | 
			
		||||
 | 
			
		||||
    set(_conan_gnu_libstdcxx_suffix "")
 | 
			
		||||
    if(_conan_gnu_libstdcxx_is_cxx11_abi)
 | 
			
		||||
        set(_conan_gnu_libstdcxx_suffix "11")
 | 
			
		||||
    endif()
 | 
			
		||||
    unset (_conan_gnu_libstdcxx_is_cxx11_abi)
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(detect_libcxx)
 | 
			
		||||
    # _conan_is_libcxx true if LLVM libc++
 | 
			
		||||
    check_cxx_source_compiles("
 | 
			
		||||
    #include <cstddef>
 | 
			
		||||
    #if !defined(_LIBCPP_VERSION)
 | 
			
		||||
       static_assert(false);
 | 
			
		||||
    #endif
 | 
			
		||||
    int main(){}" _conan_is_libcxx)
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_lib_cxx lib_cxx)
 | 
			
		||||
    if(CMAKE_SYSTEM_NAME STREQUAL "Android")
 | 
			
		||||
        message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}")
 | 
			
		||||
        set(${lib_cxx} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE)
 | 
			
		||||
        return()
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    include(CheckCXXSourceCompiles)
 | 
			
		||||
 | 
			
		||||
    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
 | 
			
		||||
        detect_gnu_libstdcxx()
 | 
			
		||||
        set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE)
 | 
			
		||||
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
 | 
			
		||||
        set(${lib_cxx} "libc++" PARENT_SCOPE)
 | 
			
		||||
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
 | 
			
		||||
        # Check for libc++
 | 
			
		||||
        detect_libcxx()
 | 
			
		||||
        if(_conan_is_libcxx)
 | 
			
		||||
            set(${lib_cxx} "libc++" PARENT_SCOPE)
 | 
			
		||||
            return()
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        # Check for libstdc++
 | 
			
		||||
        detect_gnu_libstdcxx()
 | 
			
		||||
        if(_conan_is_gnu_libstdcxx)
 | 
			
		||||
            set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE)
 | 
			
		||||
            return()
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        # TODO: it would be an error if we reach this point
 | 
			
		||||
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
 | 
			
		||||
        # Do nothing - compiler.runtime and compiler.runtime_type
 | 
			
		||||
        # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516
 | 
			
		||||
        return()
 | 
			
		||||
    else()
 | 
			
		||||
        # TODO: unable to determine, ask user to provide a full profile file instead
 | 
			
		||||
    endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_compiler compiler compiler_version compiler_runtime compiler_runtime_type)
 | 
			
		||||
    if(DEFINED CMAKE_CXX_COMPILER_ID)
 | 
			
		||||
        set(_compiler ${CMAKE_CXX_COMPILER_ID})
 | 
			
		||||
        set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
 | 
			
		||||
    else()
 | 
			
		||||
        if(NOT DEFINED CMAKE_C_COMPILER_ID)
 | 
			
		||||
            message(FATAL_ERROR "C or C++ compiler not defined")
 | 
			
		||||
        endif()
 | 
			
		||||
        set(_compiler ${CMAKE_C_COMPILER_ID})
 | 
			
		||||
        set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    message(STATUS "CMake-Conan: CMake compiler=${_compiler}")
 | 
			
		||||
    message(STATUS "CMake-Conan: CMake compiler version=${_compiler_version}")
 | 
			
		||||
 | 
			
		||||
    if(_compiler MATCHES MSVC)
 | 
			
		||||
        set(_compiler "msvc")
 | 
			
		||||
        string(SUBSTRING ${MSVC_VERSION} 0 3 _compiler_version)
 | 
			
		||||
        # Configure compiler.runtime and compiler.runtime_type settings for MSVC
 | 
			
		||||
        if(CMAKE_MSVC_RUNTIME_LIBRARY)
 | 
			
		||||
            set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY})
 | 
			
		||||
        else()
 | 
			
		||||
            set(_msvc_runtime_library MultiThreaded$<$<CONFIG:Debug>:Debug>DLL) # default value documented by CMake
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        set(_KNOWN_MSVC_RUNTIME_VALUES "")
 | 
			
		||||
        list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL)
 | 
			
		||||
        list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL)
 | 
			
		||||
        list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$<CONFIG:Debug>:Debug> MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
 | 
			
		||||
 | 
			
		||||
        # only accept the 6 possible values, otherwise we don't don't know to map this
 | 
			
		||||
        if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES)
 | 
			
		||||
            message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings")
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        # Runtime is "dynamic" in all cases if it ends in DLL
 | 
			
		||||
        if(_msvc_runtime_library MATCHES ".*DLL$")
 | 
			
		||||
            set(_compiler_runtime "dynamic")
 | 
			
		||||
        else()
 | 
			
		||||
            set(_compiler_runtime "static")
 | 
			
		||||
        endif()
 | 
			
		||||
        message(STATUS "CMake-Conan: CMake compiler.runtime=${_compiler_runtime}")
 | 
			
		||||
 | 
			
		||||
        # Only define compiler.runtime_type when explicitly requested
 | 
			
		||||
        # If a generator expression is used, let Conan handle it conditional on build_type
 | 
			
		||||
        if(NOT _msvc_runtime_library MATCHES "<CONFIG:Debug>:Debug>")
 | 
			
		||||
            if(_msvc_runtime_library MATCHES "Debug")
 | 
			
		||||
                set(_compiler_runtime_type "Debug")
 | 
			
		||||
            else()
 | 
			
		||||
                set(_compiler_runtime_type "Release")
 | 
			
		||||
            endif()
 | 
			
		||||
            message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_compiler_runtime_type}")
 | 
			
		||||
        endif()
 | 
			
		||||
 | 
			
		||||
        unset(_KNOWN_MSVC_RUNTIME_VALUES)
 | 
			
		||||
 | 
			
		||||
    elseif(_compiler MATCHES AppleClang)
 | 
			
		||||
        set(_compiler "apple-clang")
 | 
			
		||||
        string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
 | 
			
		||||
        list(GET VERSION_LIST 0 _compiler_version)
 | 
			
		||||
    elseif(_compiler MATCHES Clang)
 | 
			
		||||
        set(_compiler "clang")
 | 
			
		||||
        string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
 | 
			
		||||
        list(GET VERSION_LIST 0 _compiler_version)
 | 
			
		||||
    elseif(_compiler MATCHES GNU)
 | 
			
		||||
        set(_compiler "gcc")
 | 
			
		||||
        string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
 | 
			
		||||
        list(GET VERSION_LIST 0 _compiler_version)
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    message(STATUS "CMake-Conan: [settings] compiler=${_compiler}")
 | 
			
		||||
    message(STATUS "CMake-Conan: [settings] compiler.version=${_compiler_version}")
 | 
			
		||||
    if (_compiler_runtime)
 | 
			
		||||
        message(STATUS "CMake-Conan: [settings] compiler.runtime=${_compiler_runtime}")
 | 
			
		||||
    endif()
 | 
			
		||||
    if (_compiler_runtime_type)
 | 
			
		||||
        message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_compiler_runtime_type}")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    set(${compiler} ${_compiler} PARENT_SCOPE)
 | 
			
		||||
    set(${compiler_version} ${_compiler_version} PARENT_SCOPE)
 | 
			
		||||
    set(${compiler_runtime} ${_compiler_runtime} PARENT_SCOPE)
 | 
			
		||||
    set(${compiler_runtime_type} ${_compiler_runtime_type} PARENT_SCOPE)
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_build_type build_type)
 | 
			
		||||
    get_property(multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
			
		||||
    if(NOT multiconfig_generator)
 | 
			
		||||
        # Only set when we know we are in a single-configuration generator
 | 
			
		||||
        # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined
 | 
			
		||||
        set(${build_type} ${CMAKE_BUILD_TYPE} PARENT_SCOPE)
 | 
			
		||||
    endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(set_conan_compiler_if_appleclang lang command output_variable)
 | 
			
		||||
    if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang")
 | 
			
		||||
        execute_process(COMMAND xcrun --find ${command}
 | 
			
		||||
            OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
        cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path)
 | 
			
		||||
        cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path)
 | 
			
		||||
        if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}")
 | 
			
		||||
            set(${output_variable} "")
 | 
			
		||||
        endif()
 | 
			
		||||
        unset(_xcrun_out)
 | 
			
		||||
        unset(_xcrun_toolchain_path)
 | 
			
		||||
        unset(_compiler_parent_path)
 | 
			
		||||
    endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(append_compiler_executables_configuration)
 | 
			
		||||
    set(_conan_c_compiler "")
 | 
			
		||||
    set(_conan_cpp_compiler "")
 | 
			
		||||
    set(_conan_rc_compiler "")
 | 
			
		||||
    set(_conan_compilers_list "")
 | 
			
		||||
    if(CMAKE_C_COMPILER)
 | 
			
		||||
        set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\"")
 | 
			
		||||
        set_conan_compiler_if_appleclang(C cc _conan_c_compiler)
 | 
			
		||||
        list(APPEND _conan_compilers_list ${_conan_c_compiler})
 | 
			
		||||
    else()
 | 
			
		||||
        message(WARNING "CMake-Conan: The C compiler is not defined. "
 | 
			
		||||
                        "Please define CMAKE_C_COMPILER or enable the C language.")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(CMAKE_CXX_COMPILER)
 | 
			
		||||
        set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"")
 | 
			
		||||
        set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler)
 | 
			
		||||
        list(APPEND _conan_compilers_list ${_conan_cpp_compiler})
 | 
			
		||||
    else()
 | 
			
		||||
        message(WARNING "CMake-Conan: The C++ compiler is not defined. "
 | 
			
		||||
                        "Please define CMAKE_CXX_COMPILER or enable the C++ language.")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(CMAKE_RC_COMPILER)
 | 
			
		||||
        set(_conan_rc_compiler "\"rc\":\"${CMAKE_RC_COMPILER}\"")
 | 
			
		||||
        list(APPEND _conan_compilers_list ${_conan_rc_compiler})
 | 
			
		||||
        # Not necessary to warn if RC not defined
 | 
			
		||||
    endif()
 | 
			
		||||
    if(NOT "x${_conan_compilers_list}" STREQUAL "x")
 | 
			
		||||
        string(REPLACE ";" "," _conan_compilers_list "${_conan_compilers_list}")
 | 
			
		||||
        string(APPEND profile "tools.build:compiler_executables={${_conan_compilers_list}}\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    unset(_conan_c_compiler)
 | 
			
		||||
    unset(_conan_cpp_compiler)
 | 
			
		||||
    unset(_conan_rc_compiler)
 | 
			
		||||
    unset(_conan_compilers_list)
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(detect_host_profile output_file)
 | 
			
		||||
    detect_os(os os_api_level os_sdk os_subsystem os_version)
 | 
			
		||||
    detect_arch(arch)
 | 
			
		||||
    detect_compiler(compiler compiler_version compiler_runtime compiler_runtime_type)
 | 
			
		||||
    detect_cxx_standard(compiler_cppstd)
 | 
			
		||||
    detect_lib_cxx(compiler_libcxx)
 | 
			
		||||
    detect_build_type(build_type)
 | 
			
		||||
 | 
			
		||||
    set(profile "")
 | 
			
		||||
    string(APPEND profile "[settings]\n")
 | 
			
		||||
    if(arch)
 | 
			
		||||
        string(APPEND profile arch=${arch} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(os)
 | 
			
		||||
        string(APPEND profile os=${os} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(os_api_level)
 | 
			
		||||
        string(APPEND profile os.api_level=${os_api_level} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(os_version)
 | 
			
		||||
        string(APPEND profile os.version=${os_version} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(os_sdk)
 | 
			
		||||
        string(APPEND profile os.sdk=${os_sdk} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(os_subsystem)
 | 
			
		||||
        string(APPEND profile os.subsystem=${os_subsystem} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(compiler)
 | 
			
		||||
        string(APPEND profile compiler=${compiler} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(compiler_version)
 | 
			
		||||
        string(APPEND profile compiler.version=${compiler_version} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(compiler_runtime)
 | 
			
		||||
        string(APPEND profile compiler.runtime=${compiler_runtime} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(compiler_runtime_type)
 | 
			
		||||
        string(APPEND profile compiler.runtime_type=${compiler_runtime_type} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(compiler_cppstd)
 | 
			
		||||
        string(APPEND profile compiler.cppstd=${compiler_cppstd} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(compiler_libcxx)
 | 
			
		||||
        string(APPEND profile compiler.libcxx=${compiler_libcxx} "\n")
 | 
			
		||||
    endif()
 | 
			
		||||
    if(build_type)
 | 
			
		||||
        string(APPEND profile "build_type=${build_type}\n")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    if(NOT DEFINED output_file)
 | 
			
		||||
        set(file_name "${CMAKE_BINARY_DIR}/profile")
 | 
			
		||||
    else()
 | 
			
		||||
        set(file_name ${output_file})
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    string(APPEND profile "[conf]\n")
 | 
			
		||||
    string(APPEND profile "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n")
 | 
			
		||||
 | 
			
		||||
    # propagate compilers via profile
 | 
			
		||||
    append_compiler_executables_configuration()
 | 
			
		||||
 | 
			
		||||
    if(os STREQUAL "Android")
 | 
			
		||||
        string(APPEND profile "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    message(STATUS "CMake-Conan: Creating profile ${file_name}")
 | 
			
		||||
    file(WRITE ${file_name} ${profile})
 | 
			
		||||
    message(STATUS "CMake-Conan: Profile: \n${profile}")
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(conan_profile_detect_default)
 | 
			
		||||
    message(STATUS "CMake-Conan: Checking if a default profile exists")
 | 
			
		||||
    execute_process(COMMAND ${CONAN_COMMAND} profile path default
 | 
			
		||||
                    RESULT_VARIABLE return_code
 | 
			
		||||
                    OUTPUT_VARIABLE conan_stdout
 | 
			
		||||
                    ERROR_VARIABLE conan_stderr
 | 
			
		||||
                    ECHO_ERROR_VARIABLE    # show the text output regardless
 | 
			
		||||
                    ECHO_OUTPUT_VARIABLE
 | 
			
		||||
                    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
    if(NOT ${return_code} EQUAL "0")
 | 
			
		||||
        message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.")
 | 
			
		||||
        execute_process(COMMAND ${CONAN_COMMAND} profile detect
 | 
			
		||||
            RESULT_VARIABLE return_code
 | 
			
		||||
            OUTPUT_VARIABLE conan_stdout
 | 
			
		||||
            ERROR_VARIABLE conan_stderr
 | 
			
		||||
            ECHO_ERROR_VARIABLE    # show the text output regardless
 | 
			
		||||
            ECHO_OUTPUT_VARIABLE
 | 
			
		||||
            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
    endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(conan_install)
 | 
			
		||||
    cmake_parse_arguments(ARGS conan_args ${ARGN})
 | 
			
		||||
    set(conan_output_folder ${CMAKE_BINARY_DIR}/conan)
 | 
			
		||||
    # Invoke "conan install" with the provided arguments
 | 
			
		||||
    set(conan_args ${conan_args} -of=${conan_output_folder})
 | 
			
		||||
    message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN}")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # In case there was not a valid cmake executable in the PATH, we inject the
 | 
			
		||||
    # same we used to invoke the provider to the PATH
 | 
			
		||||
    if(DEFINED PATH_TO_CMAKE_BIN)
 | 
			
		||||
        set(old_path $ENV{PATH})
 | 
			
		||||
        set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN} --format=json
 | 
			
		||||
                    RESULT_VARIABLE return_code
 | 
			
		||||
                    OUTPUT_VARIABLE conan_stdout
 | 
			
		||||
                    ERROR_VARIABLE conan_stderr
 | 
			
		||||
                    ECHO_ERROR_VARIABLE    # show the text output regardless
 | 
			
		||||
                    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
 | 
			
		||||
 | 
			
		||||
    if(DEFINED PATH_TO_CMAKE_BIN)
 | 
			
		||||
        set(ENV{PATH} "${old_path}")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    if(NOT "${return_code}" STREQUAL "0")
 | 
			
		||||
        message(FATAL_ERROR "Conan install failed='${return_code}'")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    # the files are generated in a folder that depends on the layout used, if
 | 
			
		||||
    # one is specified, but we don't know a priori where this is.
 | 
			
		||||
    # TODO: this can be made more robust if Conan can provide this in the json output
 | 
			
		||||
    string(JSON conan_generators_folder GET "${conan_stdout}" graph nodes 0 generators_folder)
 | 
			
		||||
    cmake_path(CONVERT ${conan_generators_folder} TO_CMAKE_PATH_LIST conan_generators_folder)
 | 
			
		||||
 | 
			
		||||
    message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${conan_generators_folder}")
 | 
			
		||||
    set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${conan_generators_folder}")
 | 
			
		||||
    # reconfigure on conanfile changes
 | 
			
		||||
    string(JSON conanfile GET "${conan_stdout}" graph nodes 0 label)
 | 
			
		||||
    message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${conanfile}")
 | 
			
		||||
    set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${conanfile}")
 | 
			
		||||
    # success
 | 
			
		||||
    set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE)
 | 
			
		||||
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(conan_get_version conan_command conan_current_version)
 | 
			
		||||
    execute_process(
 | 
			
		||||
        COMMAND ${conan_command} --version
 | 
			
		||||
        OUTPUT_VARIABLE conan_output
 | 
			
		||||
        RESULT_VARIABLE conan_result
 | 
			
		||||
        OUTPUT_STRIP_TRAILING_WHITESPACE
 | 
			
		||||
    )
 | 
			
		||||
    if(conan_result)
 | 
			
		||||
        message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output})
 | 
			
		||||
    set(${conan_current_version} ${conan_version} PARENT_SCOPE)
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function(conan_version_check)
 | 
			
		||||
    set(options )
 | 
			
		||||
    set(one_value_args MINIMUM CURRENT)
 | 
			
		||||
    set(multi_value_args )
 | 
			
		||||
    cmake_parse_arguments(conan_version_check
 | 
			
		||||
        "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
 | 
			
		||||
 | 
			
		||||
    if(NOT conan_version_check_MINIMUM)
 | 
			
		||||
        message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!")
 | 
			
		||||
    endif()
 | 
			
		||||
        if(NOT conan_version_check_CURRENT)
 | 
			
		||||
        message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    if(conan_version_check_CURRENT VERSION_LESS conan_version_check_MINIMUM)
 | 
			
		||||
        message(FATAL_ERROR "CMake-Conan: Conan version must be ${conan_version_check_MINIMUM} or later")
 | 
			
		||||
    endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(construct_profile_argument argument_variable profile_list)
 | 
			
		||||
    set(${argument_variable} "")
 | 
			
		||||
    if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE")
 | 
			
		||||
        set(_arg_flag "--profile:host=")
 | 
			
		||||
    elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE")
 | 
			
		||||
        set(_arg_flag "--profile:build=")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    set(_profile_list "${${profile_list}}")
 | 
			
		||||
    list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile")
 | 
			
		||||
    list(TRANSFORM _profile_list PREPEND ${_arg_flag})
 | 
			
		||||
    set(${argument_variable} ${_profile_list})
 | 
			
		||||
 | 
			
		||||
    unset(_arg_flag)
 | 
			
		||||
    unset(_profile_list)
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(conan_provide_dependency method package_name)
 | 
			
		||||
    set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE)
 | 
			
		||||
    get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
 | 
			
		||||
    if(NOT _conan_install_success)
 | 
			
		||||
        find_program(CONAN_COMMAND "conan" REQUIRED)
 | 
			
		||||
        conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION)
 | 
			
		||||
        conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION})
 | 
			
		||||
        message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan")
 | 
			
		||||
        if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE)
 | 
			
		||||
            conan_profile_detect_default()
 | 
			
		||||
        endif()
 | 
			
		||||
        if("auto-cmake" IN_LIST CONAN_HOST_PROFILE)
 | 
			
		||||
            detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile)
 | 
			
		||||
        endif()
 | 
			
		||||
        construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE)
 | 
			
		||||
        construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE)
 | 
			
		||||
        if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py")
 | 
			
		||||
            file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile)
 | 
			
		||||
            if(NOT "${outfile}" MATCHES ".*CMakeDeps.*")
 | 
			
		||||
                message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile")
 | 
			
		||||
            endif()
 | 
			
		||||
            set(generator "")
 | 
			
		||||
        elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt")
 | 
			
		||||
            file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile)
 | 
			
		||||
            if(NOT "${outfile}" MATCHES ".*CMakeDeps.*")
 | 
			
		||||
                message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. "
 | 
			
		||||
                        "Please define the generator as it will be mandatory in the future")
 | 
			
		||||
            endif()
 | 
			
		||||
            set(generator "-g;CMakeDeps")
 | 
			
		||||
        endif()
 | 
			
		||||
        get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
 | 
			
		||||
        if(NOT _multiconfig_generator)
 | 
			
		||||
            message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}")
 | 
			
		||||
            conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator})
 | 
			
		||||
        else()
 | 
			
		||||
            message(STATUS "CMake-Conan: Installing both Debug and Release")
 | 
			
		||||
            conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator})
 | 
			
		||||
            conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator})
 | 
			
		||||
        endif()
 | 
			
		||||
        unset(_host_profile_flags)
 | 
			
		||||
        unset(_build_profile_flags)
 | 
			
		||||
        unset(_multiconfig_generator)
 | 
			
		||||
        unset(_conan_install_success)
 | 
			
		||||
    else()
 | 
			
		||||
        message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran")
 | 
			
		||||
        unset(_conan_install_success)
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
 | 
			
		||||
 | 
			
		||||
    # Ensure that we consider Conan-provided packages ahead of any other,
 | 
			
		||||
    # irrespective of other settings that modify the search order or search paths
 | 
			
		||||
    # This follows the guidelines from the find_package documentation
 | 
			
		||||
    #  (https://cmake.org/cmake/help/latest/command/find_package.html):
 | 
			
		||||
    #       find_package (<PackageName> PATHS paths... NO_DEFAULT_PATH)
 | 
			
		||||
    #       find_package (<PackageName>)
 | 
			
		||||
 | 
			
		||||
    # Filter out `REQUIRED` from the argument list, as the first call may fail
 | 
			
		||||
    set(_find_args_${package_name} "${ARGN}")
 | 
			
		||||
    list(REMOVE_ITEM _find_args_${package_name} "REQUIRED")
 | 
			
		||||
    if(NOT "MODULE" IN_LIST _find_args_${package_name})
 | 
			
		||||
        find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
 | 
			
		||||
        unset(_find_args_${package_name})
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    # Invoke find_package a second time - if the first call succeeded,
 | 
			
		||||
    # this will simply reuse the result. If not, fall back to CMake default search
 | 
			
		||||
    # behaviour, also allowing modules to be searched.
 | 
			
		||||
    if(NOT ${package_name}_FOUND)
 | 
			
		||||
        list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index)
 | 
			
		||||
        if(_index EQUAL -1)
 | 
			
		||||
            list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}")
 | 
			
		||||
        endif()
 | 
			
		||||
        unset(_index)
 | 
			
		||||
        find_package(${package_name} ${ARGN} BYPASS_PROVIDER)
 | 
			
		||||
        list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}")
 | 
			
		||||
    endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cmake_language(
 | 
			
		||||
    SET_DEPENDENCY_PROVIDER conan_provide_dependency
 | 
			
		||||
    SUPPORTED_METHODS FIND_PACKAGE
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macro(conan_provide_dependency_check)
 | 
			
		||||
    set(_conan_provide_dependency_invoked FALSE)
 | 
			
		||||
    get_property(_conan_provide_dependency_invoked GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED)
 | 
			
		||||
    if(NOT _conan_provide_dependency_invoked)
 | 
			
		||||
        message(WARNING "Conan is correctly configured as dependency provider, "
 | 
			
		||||
                        "but Conan has not been invoked. Please add at least one "
 | 
			
		||||
                        "call to `find_package()`.")
 | 
			
		||||
        if(DEFINED CONAN_COMMAND)
 | 
			
		||||
            # supress warning in case `CONAN_COMMAND` was specified but unused.
 | 
			
		||||
            set(_conan_command ${CONAN_COMMAND})
 | 
			
		||||
            unset(_conan_command)
 | 
			
		||||
        endif()
 | 
			
		||||
    endif()
 | 
			
		||||
    unset(_conan_provide_dependency_invoked)
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Add a deferred call at the end of processing the top-level directory
 | 
			
		||||
# to check if the dependency provider was invoked at all.
 | 
			
		||||
cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check)
 | 
			
		||||
 | 
			
		||||
# Configurable variables for Conan profiles
 | 
			
		||||
set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile")
 | 
			
		||||
set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile")
 | 
			
		||||
set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install")
 | 
			
		||||
 | 
			
		||||
find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH)
 | 
			
		||||
if(NOT _cmake_program)
 | 
			
		||||
    get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY)
 | 
			
		||||
    set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
cmake_policy(POP)
 | 
			
		||||
							
								
								
									
										57
									
								
								conanfile.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								conanfile.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
from conan import ConanFile
 | 
			
		||||
from conan.tools.cmake import cmake_layout
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Pkg(ConanFile):
 | 
			
		||||
    settings = "os", "compiler", "build_type", "arch"
 | 
			
		||||
    generators = (
 | 
			
		||||
        "CMakeDeps",
 | 
			
		||||
        "CMakeToolchain",
 | 
			
		||||
    )
 | 
			
		||||
    default_options = {
 | 
			
		||||
        "llvm-core/*:targets": "X86",
 | 
			
		||||
        "boost/*:fPIC": "True",
 | 
			
		||||
        "boost/*:header_only": "False",
 | 
			
		||||
        "boost/*:without_contract": "True",
 | 
			
		||||
        "boost/*:without_fiber": "True",
 | 
			
		||||
        "boost/*:without_graph": "True",
 | 
			
		||||
        "boost/*:without_graph_parallel": "True",
 | 
			
		||||
        "boost/*:without_iostreams": "True",
 | 
			
		||||
        "boost/*:without_json": "True",
 | 
			
		||||
        "boost/*:without_locale": "True",
 | 
			
		||||
        "boost/*:without_log": "True",
 | 
			
		||||
        "boost/*:without_math": "True",
 | 
			
		||||
        "boost/*:without_mpi": "True",
 | 
			
		||||
        "boost/*:without_nowide": "True",
 | 
			
		||||
        "boost/*:without_python": "True",
 | 
			
		||||
        "boost/*:without_random": "True",
 | 
			
		||||
        "boost/*:without_regex": "True",
 | 
			
		||||
        "boost/*:without_stacktrace": "True",
 | 
			
		||||
        "boost/*:without_test": "True",
 | 
			
		||||
        "boost/*:without_timer": "True",
 | 
			
		||||
        "boost/*:without_type_erasure": "True",
 | 
			
		||||
        "boost/*:without_wave": "True",
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def requirements(self):
 | 
			
		||||
        self.requires("fmt/8.0.1")
 | 
			
		||||
        self.requires("spdlog/1.9.2")
 | 
			
		||||
        self.requires("boost/1.85.0")
 | 
			
		||||
        self.requires("abseil/20250127.0")
 | 
			
		||||
        self.requires("elfio/3.11")
 | 
			
		||||
        self.requires("lz4/1.9.3")
 | 
			
		||||
        self.requires("yaml-cpp/0.7.0")
 | 
			
		||||
        self.requires("jsoncpp/1.9.5")
 | 
			
		||||
        self.requires("zlib/1.2.12")
 | 
			
		||||
        self.requires("asmjit/cci.20240531")
 | 
			
		||||
        if "WITH_LLVM" in os.environ:
 | 
			
		||||
            self.requires("llvm-core/19.1.7")
 | 
			
		||||
        if os.path.isdir("dbt-rise-plugins"):
 | 
			
		||||
            self.requires("lua/5.4.3")
 | 
			
		||||
 | 
			
		||||
    def build_requirements(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def layout(self):
 | 
			
		||||
        cmake_layout(self)
 | 
			
		||||
 Submodule dbt-rise-core updated: 1d76c895db...a5ac056be9
									
								
							 Submodule dbt-rise-tgc updated: 82c26acfc8...937253f7aa
									
								
							
							
								
								
									
										5
									
								
								docs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								docs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
*.log
 | 
			
		||||
*.dis
 | 
			
		||||
*.asm
 | 
			
		||||
*.ll
 | 
			
		||||
*tcc_*
 | 
			
		||||
							
								
								
									
										43
									
								
								docs/offsets.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								docs/offsets.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
X0         (zero) : 0  (0x00)
 | 
			
		||||
X1         (ra)   : 4  (0x04)
 | 
			
		||||
X2         (sp)   : 8  (0x08)
 | 
			
		||||
X3         (gp)   : 12 (0x0c)
 | 
			
		||||
X4         (tp)   : 16 (0x10)
 | 
			
		||||
X5         (t0)   : 20 (0x14)
 | 
			
		||||
X6         (t1)   : 24 (0x18)
 | 
			
		||||
X7         (t2)   : 28 (0x1c)
 | 
			
		||||
X8         (s0/fp): 32 (0x20)
 | 
			
		||||
X9         (s1)   : 36 (0x24)
 | 
			
		||||
X10        (a0)   : 40 (0x28)
 | 
			
		||||
X11        (a1)   : 44 (0x2c)
 | 
			
		||||
X12        (a2)   : 48 (0x30)
 | 
			
		||||
X13        (a3)   : 52 (0x34)
 | 
			
		||||
X14        (a4)   : 56 (0x38)
 | 
			
		||||
X15        (a5)   : 60 (0x3c)
 | 
			
		||||
X16        (a6)   : 64 (0x40)
 | 
			
		||||
X17        (a7)   : 68 (0x44)
 | 
			
		||||
X18        (s2)   : 72 (0x48)
 | 
			
		||||
X19        (s3)   : 76 (0x4c)
 | 
			
		||||
X20        (s4)   : 80 (0x50)
 | 
			
		||||
X21        (s5)   : 84 (0x54)
 | 
			
		||||
X22        (s6)   : 88 (0x58)
 | 
			
		||||
X23        (s7)   : 92 (0x5c)
 | 
			
		||||
X24        (s8)   : 96 (0x60)
 | 
			
		||||
X25        (s9)   : 100 (0x64)
 | 
			
		||||
X26        (s10)  : 104 (0x68)
 | 
			
		||||
X27        (s11)  : 108 (0x6c)
 | 
			
		||||
X28        (t3)   : 112 (0x70)
 | 
			
		||||
X29        (t4)   : 116 (0x74)
 | 
			
		||||
X30        (t5)   : 120 (0x78)
 | 
			
		||||
X31        (t6)   : 124 (0x7c)
 | 
			
		||||
PC                : 128 (0x80)
 | 
			
		||||
NEXT_PC           : 132 (0x84)
 | 
			
		||||
PRIV              : 136 (0x88)
 | 
			
		||||
DPC               : 137 (0x89)
 | 
			
		||||
trap_state        : 141 (0x8d)
 | 
			
		||||
pending_trap      : 145 (0x91)
 | 
			
		||||
icount            : 149 (0x95)
 | 
			
		||||
cycle             : 157 (0x9d)
 | 
			
		||||
instret           : 165 (0xa5)
 | 
			
		||||
instruction       : 173 (0xad)
 | 
			
		||||
last_branch       : 177 (0xb1)
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
conan==1.59
 | 
			
		||||
conan
 | 
			
		||||
							
								
								
									
										1
									
								
								scc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								scc
									
									
									
									
									
								
							 Submodule scc deleted from a21316a97f
									
								
							
							
								
								
									
										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())
 | 
			
		||||
@@ -17,7 +17,7 @@ function print_help {
 | 
			
		||||
    echo "  -t             set build type"
 | 
			
		||||
}
 | 
			
		||||
SIM_ARGS="-v1"
 | 
			
		||||
BACKENDS=("interp" "tcc" "llvm")
 | 
			
		||||
BACKENDS=("interp" "tcc" "llvm" "asmjit")
 | 
			
		||||
DEBUG=0
 | 
			
		||||
BUILD_TYPE=Debug
 | 
			
		||||
while getopts 'b:s:hvt:' c
 | 
			
		||||
@@ -36,7 +36,7 @@ do
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
 | 
			
		||||
ROOT_DIR=$DIR
 | 
			
		||||
ROOT_DIR="$(dirname "$DIR")"
 | 
			
		||||
 | 
			
		||||
RISCV_TEST=$ROOT_DIR/build/riscv-tests
 | 
			
		||||
# prepare riscv-test binaries
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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