原文参见: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 name | Optimizations | Run time debugging support | Profiling support |
---|---|---|---|
gem5.debug | No | Yes | No |
gem5.opt | Yes | Yes | No |
gem5.fast | Yes | No | No |
gem5.prof | Yes | No | Yes |
gem5.perf | Yes | No | Yes |
命令行选项 Command line options
gem5中SCons识别以下命令行选项:
Option | Effect |
---|---|
–colors | Turn on colorized output |
–no-colors | Turn off colorized output |
–default | Override which existing build configuration or build_opts file to use for defaults |
–ignore-style | Disable style checking hooks |
–update-ref | Update test reference outputs |
–verbose | Print full tool command lines |
环境变量 Environment variables
以下环境变量由主机环境引入,用于SCons:
Variable | Use |
---|---|
AS | Assembler command |
AR | Archive tool command |
CC | C compiler command |
CXX | C++ compiler command |
HOME | User’s home directory |
LD_LIBRARY_PATH | Path to search for library files at loading time |
LIBRARY_PATH | Path to search for library files at linking time |
PATH | Path to search for programs |
PROTOC | protobuf compiler command |
PYTHONPATH | Path to search for python files |
RANLIB | Ranlib command |
SWIG | swig command |
M5_CONFIG | Where to look for the special “.m5” directory |
M5_DEFAULT_BINARY | The default build target which overrides the default default build/ALPHA/gem5.debug |
配置变量 Configuration variables
这些配置变量用于控制gem5的建立方式。有些是全局变量,影响build目录中的所有配置;有些只影响当前正在build的配置。不同于命令行选项,这些变量在SCons调用之间保留它们的值。
Global
Variable | Description | Default |
---|---|---|
CC | C Compiler | CC environment variable or value determined by scons |
CXX | C++ Compiler | CXX environment variable or value determined by scons |
BATCH | Use batch pool for build and tests | False |
BATCH_CMD | Batch pool submission command | qdo |
M5_BUILD_CACHE | Cache built objects in this directory | False |
EXTRAS | Add extra directories to the compilation |
Per Configuration
Variable | Description | Default | Exported as config/*.hh |
---|---|---|---|
CP_ANNOTATE | Enable critical path annotation capability | False | X |
CPU_MODELS | CPU Models | AtomicSimpleCPU,InOrderCPU,O3CPU,TimingSimpleCPU | |
PROTOCOL | Coherence protocol for Ruby | MI_example | X |
SS_COMPATIBLE_FP | Make floating-point results compatible with SimpleScalar | False | X |
TARGET_ISA | Target ISA: ALPHA, ARM, MIPS, POWER, X86 | alpha | X |
USE_CHECKER | Use checker for detailed CPU models | False | X |
USE_FENV | Use IEEE mode control | whether fenv.h was found on this host | X |
USE_POSIX_CLOCK | Use POSIX Clocks | whether posix clocks are available on this host | X |
设置配置变量的值 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.