Gem5学习04-Build System

原文参见:gem5 Build System

gem5建立系统是基于SCons的,SCons是一个Python的系统建立开源应用。更多信息参见SCons 。SCons的主文件名为SConstruct,它被放在源树根目录下。另外的SCons文件命名为SConscript,放在树的其它的位置,通常与相关文件同目录。

建立目标 Build targets

gem5中,使用SCons建立目标格式为<build dir>/<configuration>/<target>。例如:

scons build/ARM/gem5.opt

<build dir>部分是以build结尾的文件路径。通常这里就是build,但也可以指明位于其它位置的命名为build的文件夹。假设在同一build目录下的所有目标由同一主机平台编译,并且共享相同的全局变量设置。这些全局变量设置位于build/variables.global文件中。
<configuration>部分(例子中的ARM)选择一系列编译时的建立选项用以控制模拟器功能,例如ISA种类、CPU模式、Ruby一致性协议等。这些配置变量存在build/variables目录下不同的文件中。这个位置可用于彻底清除一次build下的所有配置文件(e.g. 使用rm -rf)的同时保留变量设置。

一个特定的配置第一次被建立时,配置名也通过在build_opts目录下寻找匹配名用于决定默认的变量设置(per-configuration variable settings)。如果想要创建一个在上述目录下找不到的配置名,使用--default 告诉SCons需要用到上述目录下的哪个文件或build/variables下的哪个文件。

建立目标(例子中的gem5.opt)是要build的gem5二进制类型。它指明了要用到的编译器标志(compiler flags)集合。目前支持版本有:gem5.debug, gem5.opt, gem5.fast, gem5.prof and gem5.perf。

  • gem5.debug 关闭了优化。它保证了变量不会被优化掉,功能不会被意料外的内联(inlined)以及控制流行为正常(not behave in surprising ways)。这使得该版本与gdb类的工具合作良好,然而关闭优化会造成该版本明显慢于其它版本。当使用gdb或valgrind等工具并且任何细节被模糊掉时应该选择该版本,否则建议选择其它版本。
  • gem5.opt 打开优化的同时保留了部分调试功能(例如,断言和DPRINTFs)。该版本良好平衡了模拟速度与调试观察,是所有环境中最优的版本。
  • gem5.fast 打开优化并去除调试部分。最优的速度,代价是不能进行运行时错误检查与调试输出。如果你确信所有工作可以正确运行并想要获得峰值性能,建议该版本。
  • gem5.prof 类似于gem5.fast,但仍然保留了一些功能(instrumentation)保证其被gprof分析工具使用。该版本不常用,但可以用于找出gem5中应当被注意的部分以提升性能。
  • gem5.perf 同gem5.prof,但是instrumentation是使用google perftools,允许被google-pprof分析。该分析版本是gem5.prof的补充,可能可以在所有基于Linux的系统中替换gem5.prof。

下表总结以上版本:

Binary nameOptimizationsRun time debugging supportProfiling support
gem5.debugNoYesNo
gem5.optYesYesNo
gem5.fastYesNoNo
gem5.profYesNoYes
gem5.perfYesNoYes

命令行选项 Command line options

gem5中SCons识别以下命令行选项:

OptionEffect
–colorsTurn on colorized output
–no-colorsTurn off colorized output
–defaultOverride which existing build configuration or build_opts file to use for defaults
–ignore-styleDisable style checking hooks
–update-refUpdate test reference outputs
–verbosePrint full tool command lines

环境变量 Environment variables

以下环境变量由主机环境引入,用于SCons:

VariableUse
ASAssembler command
ARArchive tool command
CCC compiler command
CXXC++ compiler command
HOMEUser’s home directory
LD_LIBRARY_PATHPath to search for library files at loading time
LIBRARY_PATHPath to search for library files at linking time
PATHPath to search for programs
PROTOCprotobuf compiler command
PYTHONPATHPath to search for python files
RANLIBRanlib command
SWIGswig command
M5_CONFIGWhere to look for the special “.m5” directory
M5_DEFAULT_BINARYThe default build target which overrides the default default build/ALPHA/gem5.debug

配置变量 Configuration variables

这些配置变量用于控制gem5的建立方式。有些是全局变量,影响build目录中的所有配置;有些只影响当前正在build的配置。不同于命令行选项,这些变量在SCons调用之间保留它们的值。

Global

VariableDescriptionDefault
CCC CompilerCC environment variable or value determined by scons
CXXC++ CompilerCXX environment variable or value determined by scons
BATCHUse batch pool for build and testsFalse
BATCH_CMDBatch pool submission commandqdo
M5_BUILD_CACHECache built objects in this directoryFalse
EXTRASAdd extra directories to the compilation

Per Configuration

VariableDescriptionDefaultExported as config/*.hh
CP_ANNOTATEEnable critical path annotation capabilityFalseX
CPU_MODELSCPU ModelsAtomicSimpleCPU,InOrderCPU,O3CPU,TimingSimpleCPU
PROTOCOLCoherence protocol for RubyMI_exampleX
SS_COMPATIBLE_FPMake floating-point results compatible with SimpleScalarFalseX
TARGET_ISATarget ISA: ALPHA, ARM, MIPS, POWER, X86alphaX
USE_CHECKERUse checker for detailed CPU modelsFalseX
USE_FENVUse IEEE mode controlwhether fenv.h was found on this hostX
USE_POSIX_CLOCKUse POSIX Clockswhether posix clocks are available on this hostX

设置配置变量的值 Setting configuration variable values

第一种方法是通过你在建立目标时选择的配置名。文件从build_opts加载,其中包含部分预置值。

注意,文件中的值是默认值,只在没有指明变量值时使用。这些文件用于定义合理的起始点以配置gem5,并非用于配置一个特定的build。

如果在建立后,配置文件夹已经被创建的情况下,想要改变变量的值;或者覆盖一个已被创建的值,你可以在命令行指明新的值。语法类似于在shell提示符中设置环境变量的值,但是这些在scons命令后使用(?)。例如,为已建立的ALPHA创建MESI_CMP_directory协议,可以使用如下命令:

scons PROTOCOL=MESI_CMP_directory build/ALPHA/gem5.opt

可以在scons命令行后添加–help查看所有的配置变量以及其值。这种方法可以确保所有设置都是如你所想,并且所有的变量名都没有拼写错误。如果一切顺利,则可以移除–help并开始build。

回归运行/测试build Running regressions / Testing Your Build

gem5的回归系统在SCons中build。这保证了gem5二进制在必要的时候可以自动重建,测试只在可能有不同结果时重新运行。

回归目标都在build目录下的tests中。组件的测试输出文件路径确定运行哪个测试以及如何运行。组件如下:

tests/<gem5 binary extension>/<test category>/<test name>/<architecture>/<operating system>/<configuration>/

你可以省略路径(leave out components of the path farther down),scons将自动build所有匹配指明的组件的可用测试。运行ALPHA配置下opt模式的所有快速测试,可以运行如下命令:

scons build/ALPHA/tests/opt/quick

回归框架集成在scons建立过程中,如果必要,在运行tests前上述命令将会(re)build ALPHA/gem5.opt。仅在test上一次被运行是rebuild前时,test会被重新运行。如果test的上一次运行仍然合法,基于上一次结果,只有一些简明的pass/fail信息会被输出

回归测试基于运行时间被细分为”quick”和”long”两类。通过添加分类名可以运行特定类的test。例如:

scons build/ALPHA/tests/opt/long

附加test名可以运行特定测试:

scons build/ALPHA/tests/opt/quick/fs/10.linux-boot

更多信息见:Regression Tests

一些”quick”测试要求在没有附加设置的前提下运行。一些测试基于在encumbered库中的EIO支持,被EXTRAS机制建立到gem5中。其它测试依赖系统文件如在你的系统中特定位置的特定的磁盘映像和内核。这些文件通常可用,不难找到。其它测试,尤其是基于SPEC benchmarks并且不属于”quick”类的,需要严格许可证的输入文件,我们无法发布。除非拥有许可证,否则这些测试无法被运行。

添加源文件和跟踪标记 Adding source files and trace flags

Files are added to the build by declaring them inside SConscript files as instances of certain python classes. The build system knows how to handle those files based on what particular class was used. For instance, to add a C++ source file foo.cc to the build, you could add the following line to the SConscript in the same directory as foo.cc:

Source(‘foo.cc’)
The build system finds and processes SConscript files automatically, so you can create one near the files your adding or extend one that’s already there. The following table shows what types of source files there are and what they’re for.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值