blob: a886e0220e2d4340ed2670d66463057a4a7b1bad [file] [log] [blame]
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. Also build a normal gem5 (cxx-config not needed, Python
needed):
> cd ../..
> scons build/ARM/gem5.opt
> scons --with-cxx-config --without-python build/ARM/libgem5_opt.so
> cd util/cxx_config
Then edit Makefile to set the paths for SystemC and 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