| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="x-ua-compatible" content="ie=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| |
| <title>gem5</title> |
| |
| <!-- SITE FAVICON --> |
| <link rel="shortcut icon" type="image/gif" href="/assets/img/gem5ColorVert.gif"/> |
| |
| <link rel="canonical" href="http://localhost:4000/building/"> |
| <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,700,800,600' rel='stylesheet' type='text/css'> |
| <link href='https://fonts.googleapis.com/css?family=Muli:400,300' rel='stylesheet' type='text/css'> |
| |
| <!-- FAVICON --> |
| <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> |
| |
| <!-- BOOTSTRAP --> |
| <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> |
| |
| <!-- CUSTOM CSS --> |
| <link rel="stylesheet" href="/css/main.css"> |
| </head> |
| |
| |
| <body> |
| <nav class="navbar navbar-expand-md navbar-light bg-light"> |
| <a class="navbar-brand" href="/"> |
| <img src="/assets/img/gem5ColorLong.gif" alt="gem5" height=45px> |
| </a> |
| <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> |
| <span class="navbar-toggler-icon"></span> |
| </button> |
| <div class="collapse navbar-collapse" id="navbarNavDropdown"> |
| <ul class="navbar-nav ml-auto"> |
| <li class="nav-item "> |
| <a class="nav-link" href="/">Home</a> |
| </li> |
| |
| <li class="nav-item dropdown "> |
| <a class="nav-link dropdown-toggle" href="/about" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
| About |
| </a> |
| <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> |
| <a class="dropdown-item" href="/about">About</a> |
| <a class="dropdown-item" href="/publications">Publications</a> |
| <a class="dropdown-item" href="/governance">Governance</a> |
| </div> |
| </li> |
| |
| <li class="nav-item dropdown active"> |
| <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
| Documentation |
| </a> |
| <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> |
| <!-- Pull navigation from _data/documentation.yml --> |
| |
| <a class="dropdown-item" href="/introduction">Introduction</a> |
| |
| <a class="dropdown-item" href="/building">Getting Started</a> |
| |
| <a class="dropdown-item" href="/environment">Modifying/Extending</a> |
| |
| <a class="dropdown-item" href="/intro">Modeling Cache Coherence with Ruby</a> |
| |
| </div> |
| </li> |
| |
| <li class="nav-item "> |
| <a class="nav-link" href="/contributing">Contributing</a> |
| </li> |
| |
| <li class="nav-item "> |
| <a class="nav-link" href="/search">Search</a> |
| </li> |
| </ul> |
| </div> |
| </nav> |
| |
| <main> |
| <div class="sidenav-top"> |
| <img src="/assets/img/gem5ColorLong.gif" height="80"> |
| </div> |
| <div class="sidenav"> |
| <div class="search"> |
| <form action="/search" method="get"> |
| <!-- <label for="search-box"><i class="fa fa-search"></i></label> --> |
| <input type="text" name="query"> |
| <button type="submit" name="submit"><i class="fa fa-search"></i></button> |
| </form> |
| </div> |
| <!-- Pull navigation from _data/documentation.yml --> |
| |
| <a class="item" href="/introduction" role="button" aria-expanded="false" aria-controls="collapseExample"> |
| Introduction |
| </a> |
| <div class="collapse " id="introdution"> |
| |
| </div> |
| |
| <a class="item" data-toggle="collapse" href="#pt1" role="button" aria-expanded="false" aria-controls="collapseExample"> |
| Getting Started |
| </a> |
| <div class="collapse show" id="pt1"> |
| |
| <a class="subitem " href="/building">Building gem5</a> |
| |
| <a class="subitem " href="/simple_config">Creating a simple configuration script</a> |
| |
| <a class="subitem " href="/cache_config">Adding cache to configuration script</a> |
| |
| <a class="subitem " href="/gem5_stats">Understanding gem5 statistics and output</a> |
| |
| <a class="subitem " href="/example_configs">Using the default configuration scripts</a> |
| |
| </div> |
| |
| <a class="item" data-toggle="collapse" href="#pt2" role="button" aria-expanded="false" aria-controls="collapseExample"> |
| Modifying/Extending |
| </a> |
| <div class="collapse " id="pt2"> |
| |
| <a class="subitem " href="/environment">Setting up your development environment</a> |
| |
| <a class="subitem " href="/helloobject">Creating a very simple SimObject</a> |
| |
| <a class="subitem " href="/debugging">Debugging gem5</a> |
| |
| <a class="subitem " href="/events">Event-driven programming</a> |
| |
| <a class="subitem " href="/parameters">Adding parameters to SimObjects and more events</a> |
| |
| <a class="subitem " href="/memoryobject">Creating SimObjects in the memory system</a> |
| |
| <a class="subitem " href="/simplecache">Creating a simple cache object</a> |
| |
| </div> |
| |
| <a class="item" data-toggle="collapse" href="#pt3" role="button" aria-expanded="false" aria-controls="collapseExample"> |
| Modeling Cache Coherence with Ruby |
| </a> |
| <div class="collapse " id="pt3"> |
| |
| <a class="subitem " href="/intro">Introduction to Ruby</a> |
| |
| <a class="subitem " href="/cache-intro">MSI example cache protocol</a> |
| |
| <a class="subitem " href="/cache-declarations">Declaring a state machine</a> |
| |
| <a class="subitem " href="/cache-in-ports">In port code blocks</a> |
| |
| <a class="subitem " href="/cache-actions">Action code blocks</a> |
| |
| <a class="subitem " href="/cache-transitions">Transition code blocks</a> |
| |
| <a class="subitem " href="/directory">MSI Directory implementation</a> |
| |
| <a class="subitem " href="/MSIbuilding">Compiling a SLICC protocol</a> |
| |
| <a class="subitem " href="/configuration">Configuring a simple Ruby system</a> |
| |
| <a class="subitem " href="/running">Running the simple Ruby system</a> |
| |
| <a class="subitem " href="/MSIdebugging">Debugging SLICC Protocols</a> |
| |
| <a class="subitem " href="/simple-MI_example">Configuring for a standard protocol</a> |
| |
| </div> |
| |
| </div> |
| |
| <div class="container" id="doc-container"> |
| |
| <!-- <h1>Building</h1> --> |
| <dl> |
| <dt>authors</dt> |
| <dd>Jason Lowe-Power</dd> |
| </dl> |
| |
| <h1 id="building-gem5">Building gem5</h1> |
| |
| <p>This chapter covers the details of how to set up a gem5 developmment |
| environment and build gem5.</p> |
| |
| <h2 id="requirements-for-gem5">Requirements for gem5</h2> |
| |
| <p>See <a href="http://gem5.org/Compiling_M5#Required_Software">gem5 requirements</a> |
| for more details.</p> |
| |
| <p>On Ubuntu, you can install all of the required dependencies with the |
| following command. The requirements are detailed below.</p> |
| |
| <p>``` {.sourceCode .sh} |
| sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python</p> |
| <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> |
| 1. git ([Git](https://git-scm.com/)): |
| : The gem5 project uses [Git](https://git-scm.com/) for version |
| control. [Git](https://git-scm.com/) is a distributed version |
| control system. More information about |
| [Git](https://git-scm.com/) can be found by following the link. |
| Git should be installed by default on most platforms. However, |
| to install Git in Ubuntu use |
| |
| ``` {.sourceCode .sh} |
| sudo apt-get install git |
| ``` |
| |
| 2. gcc 4.8+ |
| : You may need to use environment variables to point to a |
| non-default version of gcc. |
| |
| On Ubuntu, you can install a development environment with |
| |
| ``` {.sourceCode .sh} |
| sudo apt-get install build-essential |
| ``` |
| |
| 3. [SCons](http://www.scons.org/) |
| : gem5 uses SCons as its build environment. SCons is like make on |
| steroids and uses Python scripts for all aspects of the build |
| process. This allows for a very flexible (if slow) build system. |
| |
| To get SCons on Ubuntu use |
| |
| ``` {.sourceCode .sh} |
| sudo apt-get install scons |
| ``` |
| |
| 4. Python 2.7+ |
| : gem5 relies on the Python development libraries. To install |
| these on Ubuntu use |
| |
| ``` {.sourceCode .sh} |
| sudo apt-get install python-dev |
| ``` |
| |
| 5. [protobuf](https://developers.google.com/protocol-buffers/) 2.1+ |
| : "Protocol buffers are a language-neutral, platform-neutral |
| extensible mechanism for serializing structured data." In gem5, |
| the [protobuf](https://developers.google.com/protocol-buffers/) |
| library is used for trace generation and playback. |
| [protobuf](https://developers.google.com/protocol-buffers/) is |
| not a required package, unless you plan on using it for trace |
| generation and playback. |
| |
| ``` {.sourceCode .sh} |
| sudo apt-get install libprotobuf-dev python-protobuf protobuf-compiler libgoogle-perftools-dev |
| ``` |
| |
| Getting the code |
| ---------------- |
| |
| Change directories to where you want to download the gem5 source. Then, |
| to clone the repository, use the `git clone` command. |
| |
| ``` {.sourceCode .sh} |
| git clone https://gem5.googlesource.com/public/gem5 |
| </code></pre></div></div> |
| |
| <p>You can now change directories to <code class="highlighter-rouge">gem5</code> which contains all of the gem5 |
| code.</p> |
| |
| <h2 id="your-first-gem5-build">Your first gem5 build</h2> |
| |
| <p>Let’s start by building a basic x86 system. Currently, you must compile |
| gem5 separately for every ISA that you want to simulate. Additionally, |
| if using ruby-intro-chapter, you have to have separate compilations for |
| every cache coherence protocol.</p> |
| |
| <p>To build gem5, we will use SCons. SCons uses the SConstruct file |
| (<code class="highlighter-rouge">gem5/SConstruct</code>) to set up a number of variables and then uses the |
| SConscript file in every subdirectory to find and compile all of the |
| gem5 source.</p> |
| |
| <p>SCons automatically creates a <code class="highlighter-rouge">gem5/build</code> directory when first |
| executed. In this directory you’ll find the files generated by SCons, |
| the compiler, etc. There will be a separate directory for each set of |
| options (ISA and cache coherence protocol) that you use to compile gem5.</p> |
| |
| <p>There are a number of default compilations options in the <code class="highlighter-rouge">build_opts</code> |
| directory. These files specify the parameters passed to SCons when |
| initially building gem5. We’ll use the X86 defaults and specify that we |
| want to compile all of the CPU models. You can look at the file |
| <code class="highlighter-rouge">build_opts/X86</code> to see the default values for the Scons options. You |
| can also specify these options on the command line to override any |
| default.</p> |
| |
| <p>``` {.sourceCode .sh} |
| scons build/X86/gem5.opt -j9</p> |
| <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> |
| > **gem5 binary types** |
| > |
| > The SCons scripts in gem5 currently have 5 different binaries you can |
| > build for gem5: debug, opt, fast, prof, and perf. These names are |
| > mostly self-explanatory, but detailed below. |
| > |
| > debug |
| > : Built with no optimizations and debug symbols. This binary is |
| > useful when using a debugger to debug if the variables you need to |
| > view are optimized out in the opt version of gem5. Running with |
| > debug is slow compared to the other binaries. |
| > |
| > opt |
| > : This binary is build with most optimizations on (e.g., -O3), but |
| > with debug symbols included. This binary is much faster than |
| > debug, but still contains enough debug information to be able to |
| > debug most problems. |
| > |
| > fast |
| > : Built with all optimizations on (including link-time optimizations |
| > on supported platforms) and with no debug symbols. Additionally, |
| > any asserts are removed, but panics and fatals are still included. |
| > fast is the highest performing binary, and is much smaller than |
| > opt. However, fast is only appropriate when you feel that it is |
| > unlikely your code has major bugs. |
| > |
| > prof and perf |
| > : These two binaries are build for profiling gem5. prof includes |
| > profiling information for the GNU profiler (gprof), and perf |
| > includes profiling information for the Google performance tools |
| > (gperftools). |
| > |
| The main argument passed to SCons is what you want to build, |
| `build/X86/gem5.opt`. In this case, we are building gem5.opt (an |
| optimized binary with debug symbols). We want to build gem5 in the |
| directory build/X86. Since this directory currently doesn't exist, SCons |
| will look in `build_opts` to find the default parameters for X86. (Note: |
| I'm using -j9 here to execute the build on 9 of my 8 cores on my |
| machine. You should choose an appropriate number for your machine, |
| usually cores+1.) |
| |
| The output should look something like below: |
| |
| Checking for C header file Python.h... yes |
| Checking for C library pthread... yes |
| Checking for C library dl... yes |
| Checking for C library util... yes |
| Checking for C library m... yes |
| Checking for C library python2.7... yes |
| Checking for accept(0,0,0) in C++ library None... yes |
| Checking for zlibVersion() in C++ library z... yes |
| Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... yes |
| Checking for clock_nanosleep(0,0,NULL,NULL) in C library None... yes |
| Checking for timer_create(CLOCK_MONOTONIC, NULL, NULL) in C library None... no |
| Checking for timer_create(CLOCK_MONOTONIC, NULL, NULL) in C library rt... yes |
| Checking for C library tcmalloc... yes |
| Checking for backtrace_symbols_fd((void*)0, 0, 0) in C library None... yes |
| Checking for C header file fenv.h... yes |
| Checking for C header file linux/kvm.h... yes |
| Checking size of struct kvm_xsave ... yes |
| Checking for member exclude_host in struct perf_event_attr...yes |
| Building in /local.chinook/gem5/gem5-tutorial/gem5/build/X86 |
| Variables file /local.chinook/gem5/gem5-tutorial/gem5/build/variables/X86 not found, |
| using defaults in /local.chinook/gem5/gem5-tutorial/gem5/build_opts/X86 |
| scons: done reading SConscript files. |
| scons: Building targets ... |
| [ISA DESC] X86/arch/x86/isa/main.isa -> generated/inc.d |
| [NEW DEPS] X86/arch/x86/generated/inc.d -> x86-deps |
| [ENVIRONS] x86-deps -> x86-environs |
| [ CXX] X86/sim/main.cc -> .o |
| .... |
| .... <lots of output> |
| .... |
| [ SHCXX] nomali/lib/mali_midgard.cc -> .os |
| [ SHCXX] nomali/lib/mali_t6xx.cc -> .os |
| [ SHCXX] nomali/lib/mali_t7xx.cc -> .os |
| [ AR] -> drampower/libdrampower.a |
| [ SHCXX] nomali/lib/addrspace.cc -> .os |
| [ SHCXX] nomali/lib/mmu.cc -> .os |
| [ RANLIB] -> drampower/libdrampower.a |
| [ SHCXX] nomali/lib/nomali_api.cc -> .os |
| [ AR] -> nomali/libnomali.a |
| [ RANLIB] -> nomali/libnomali.a |
| [ CXX] X86/base/date.cc -> .o |
| [ LINK] -> X86/gem5.opt |
| scons: done building targets. |
| |
| When compilation is finished you should have a working gem5 executable |
| at `build/X86/gem5.opt`. The compilation can take a very long time, |
| often 15 minutes or more, especially if you are compiling on a remote |
| file system like AFS or NFS. |
| |
| Common errors |
| ------------- |
| |
| ### Wrong gcc version |
| |
| Error: gcc version 4.8 or newer required. |
| Installed version: 4.4.7 |
| |
| Update your environment variables to point to the right gcc version, or |
| install a more up to date version of gcc. See |
| building-requirements-section. |
| |
| ### Python in a non-default location |
| |
| If you use a non-default version of Python, (e.g., version 2.7 when 2.5 |
| is your default), there may be problems when using SCons to build gem5. |
| RHEL6 version of SCons uses a hardcoded location for Python, which |
| causes the issue. gem5 often builds successfully in this case, but may |
| not be able to run. Below is one possible error you may see when you run |
| gem5. |
| |
| Traceback (most recent call last): |
| File "........../gem5-stable/src/python/importer.py", line 93, in <module> |
| sys.meta_path.append(importer) |
| TypeError: 'dict' object is not callable |
| |
| To fix this, you can force SCons to use your environment's Python |
| version by running `` python `which scons` build/X86/gem5.opt `` instead |
| of `scons build/X86/gem5.opt`. More information on this can be found on |
| the gem5 wiki about non-default Python locations: [Using a non-default |
| Python |
| installation](http://www.gem5.org/Using_a_non-default_Python_installation). |
| |
| ### M4 macro processor not installed |
| |
| If the M4 macro processor isn't installed you'll see an error similar to |
| this: |
| |
| ... |
| Checking for member exclude_host in struct perf_event_attr...yes |
| Error: Can't find version of M4 macro processor. Please install M4 and try again. |
| |
| Just installing the M4 macro package may not solve this issue. You may |
| nee to also install all of the `autoconf` tools. On Ubuntu, you can use |
| the following command. |
| |
| ``` {.sourceCode .sh} |
| sudo apt-get install automake |
| </code></pre></div></div> |
| |
| |
| </div> |
| |
| </main> |
| |
| <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> |
| <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> |
| |
| <script> |
| // When the user scrolls down 20px from the top of the document, show the button |
| window.onscroll = function() {scrollFunction()}; |
| |
| function scrollFunction() { |
| if (document.body.scrollTop > 100 || document.documentElement.scrollTop > 20) { |
| document.getElementById("myBtn").style.display = "block"; |
| } else { |
| document.getElementById("myBtn").style.display = "none"; |
| } |
| } |
| |
| // When the user clicks on the button, scroll to the top of the document |
| function topFunction() { |
| document.body.scrollTop = 0; |
| document.documentElement.scrollTop = 0; |
| } |
| </script> |
| |
| </body> |
| |
| <footer class="page-footer"> |
| <div class="container"> |
| <div class="row"> |
| |
| <div class="col-12 col-sm-4"> |
| <p><a href="/about">About</a></p> |
| <p><a href="/publications">Publications</a></p> |
| <p><a href="/contributing">Contributing</a></p> |
| </div><br> |
| |
| <div class="col-12 col-sm-4"> |
| <p><a href="/gettingstarted">Documentation</a></p> |
| <p><a href="#">Source</a></p> |
| </div><br> |
| |
| <div class="col-12 col-sm-4"> |
| <p><a href="/help">Help</a></p> |
| <p><a href="/search">Search</a></p> |
| <p><a href="#">Mailing Lists</a></p> |
| </div> |
| |
| </div> |
| </div> |
| </footer> |
| |
| |
| </html> |