| This directory contains a demo of C++ configuration of gem5. The intention |
| is to provide a mechanism to allow pre-generated config.ini files generated |
| by Python-based gem5 to be reloaded in library-base versions of gem5 |
| embedded in other systems using C++ calls for simulation control. |
| |
| This directory contain a demo of hosting a C++ configured version of gem5 |
| onto SystemC's event loop. The hosting is achieved by replacing 'simulate' |
| with a SystemC object which implements an event loop using SystemC scheduler |
| mechanisms. |
| |
| The sc_... files here should probably be hosted in a diferent directory and |
| buildable as a library. |
| |
| Files: |
| |
| main.cc -- demonstration top level |
| sc_logger.{cc,hh} -- rehosting of DPRINTF onto SC_REPORT |
| sc_module.{cc,hh} -- SystemC simulation loop base class |
| sc_gem5_control.{cc,hh} -- Alternative extra wrapping to allow gem5 |
| Systems to be instantiated as single |
| sc_module objects. |
| stats.{cc,hh} -- Stats dumping (copied from util/cxx_config) |
| |
| Read main.cc for more details of the implementation and sc_... files for |
| |
| To build: |
| |
| First build gem5 as a library with cxx-config support and (optionally) |
| without python. When building the library, disable gem5's native SystemC |
| API support, as that will conflict with the external version. Also build a |
| normal gem5 (cxx-config not needed, Python needed): |
| |
| > cd ../../.. |
| > scons build/ARM/gem5.opt |
| > scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \ |
| > build/ARM/libgem5_opt.so |
| > cd util/systemc |
| |
| Note: For MAC / OSX this command should be used: |
| > scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \ |
| > build/ARM/libgem5_opt.dylib |
| |
| Set a proper LD_LIBRARY_PATH e.g. for bash: |
| > export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/gem5/build/ARM/" |
| |
| or for MAC / OSX: |
| > export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/gem5/build/ARM/" |
| |
| |
| Then edit the Makefile to set the paths for SystemC, e.g: |
| |
| Linux: |
| SYSTEMC_INC = /opt/systemc/include |
| SYSTEMC_LIB = /opt/systemc/lib-linux64 |
| |
| MAC / OSX: |
| SYSTEMC_INC = /opt/systemc/include |
| SYSTEMC_LIB = /opt/systemc/lib-macosx64 |
| |
| Then run make: |
| |
| > make |
| |
| Make a config file for the C++-configured gem5 using normal gem5 |
| |
| > ../../../build/ARM/gem5.opt ../../../configs/example/se.py -c \ |
| > ../../../tests/test-progs/hello/bin/arm/linux/hello |
| |
| The binary 'gem5.opt.cxx' can now be used to load in the generated config |
| file from the previous normal gem5 run. |
| |
| Try: |
| |
| > ./gem5.opt.cxx m5out/config.ini |
| |
| This should print: |
| |
| > Hello world! |
| |
| The .ini file can also be read by the Python .ini file reader example: |
| |
| > ../../../build/ARM/gem5.opt ../../../configs/example/read_ini.py \ |
| > m5out/config.ini |
| |
| If you are interested in SystemC Transaction Level Modeling (TLM2) please have |
| a look into /util/tlm. |