Change-Id: I5b5c7de9e734dd8a58160193d68c9a13d649b739 Issue-On: https://gem5.atlassian.net/browse/GEM5-1218 Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/59589 Reviewed-by: Matthias Jung <jungma@eit.uni-kl.de> Maintainer: Bobby Bruce <bbruce@ucdavis.edu> Tested-by: kokoro <noreply+kokoro@google.com>
87 lines
2.9 KiB
Plaintext
87 lines
2.9 KiB
Plaintext
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.
|