113372Sgabeblack@google.comThis directory contains a demo of C++ configuration of gem5.  The intention
213372Sgabeblack@google.comis to provide a mechanism to allow pre-generated config.ini files generated
313372Sgabeblack@google.comby Python-based gem5 to be reloaded in library-base versions of gem5
413372Sgabeblack@google.comembedded in other systems using C++ calls for simulation control.
513372Sgabeblack@google.com
613372Sgabeblack@google.comThis directory contain a demo of hosting a C++ configured version of gem5
713372Sgabeblack@google.comonto SystemC's event loop.  The hosting is achieved by replacing 'simulate'
813372Sgabeblack@google.comwith a SystemC object which implements an event loop using SystemC scheduler
913372Sgabeblack@google.commechanisms.
1013372Sgabeblack@google.com
1113372Sgabeblack@google.comThe sc_... files here should probably be hosted in a diferent directory and
1213372Sgabeblack@google.combuildable as a library.
1313372Sgabeblack@google.com
1413372Sgabeblack@google.comFiles:
1513372Sgabeblack@google.com
1613372Sgabeblack@google.com    main.cc                 -- demonstration top level
1713372Sgabeblack@google.com    sc_logger.{cc,hh}       -- rehosting of DPRINTF onto SC_REPORT
1813372Sgabeblack@google.com    sc_module.{cc,hh}       -- SystemC simulation loop base class
1913372Sgabeblack@google.com    sc_gem5_control.{cc,hh} -- Alternative extra wrapping to allow gem5
2013372Sgabeblack@google.com                                Systems to be instantiated as single
2113372Sgabeblack@google.com                                sc_module objects.
2213372Sgabeblack@google.com    stats.{cc,hh}           -- Stats dumping (copied from util/cxx_config)
2313372Sgabeblack@google.com
2413372Sgabeblack@google.comRead main.cc for more details of the implementation and sc_... files for
2513372Sgabeblack@google.com
2613372Sgabeblack@google.comTo build:
2713372Sgabeblack@google.com
2813372Sgabeblack@google.comFirst build gem5 as a library with cxx-config support and (optionally)
2913463Sgabeblack@google.comwithout python.  When building the library, disable gem5's native SystemC
3013463Sgabeblack@google.comAPI support, as that will conflict with the external version.  Also build a
3113463Sgabeblack@google.comnormal gem5 (cxx-config not needed, Python needed):
3213372Sgabeblack@google.com
3313372Sgabeblack@google.com> cd ../../..
3413372Sgabeblack@google.com> scons build/ARM/gem5.opt
3513463Sgabeblack@google.com> scons --with-cxx-config --without-python USE_SYSTEMC=0 \
3613463Sgabeblack@google.com>       build/ARM/libgem5_opt.so
3713372Sgabeblack@google.com> cd util/systemc
3813372Sgabeblack@google.com
3913372Sgabeblack@google.comNote: For MAC / OSX this command should be used:
4013463Sgabeblack@google.com> scons --with-cxx-config --without-python USE_SYSTEMC=0 \
4113463Sgabeblack@google.com>       build/ARM/libgem5_opt.dylib
4213372Sgabeblack@google.com
4313372Sgabeblack@google.comSet a proper LD_LIBRARY_PATH e.g. for bash:
4413372Sgabeblack@google.com> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/gem5/build/ARM/"
4513372Sgabeblack@google.com
4613372Sgabeblack@google.comor for MAC / OSX:
4713372Sgabeblack@google.com> export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/gem5/build/ARM/"
4813372Sgabeblack@google.com
4913372Sgabeblack@google.com
5013372Sgabeblack@google.comThen edit the Makefile to set the paths for SystemC, e.g:
5113372Sgabeblack@google.com
5213372Sgabeblack@google.com    Linux:
5313372Sgabeblack@google.com    SYSTEMC_INC = /opt/systemc/include
5413372Sgabeblack@google.com    SYSTEMC_LIB = /opt/systemc/lib-linux64
5513372Sgabeblack@google.com
5613372Sgabeblack@google.com    MAC / OSX:
5713372Sgabeblack@google.com    SYSTEMC_INC = /opt/systemc/include
5813372Sgabeblack@google.com    SYSTEMC_LIB = /opt/systemc/lib-macosx64
5913372Sgabeblack@google.com
6013372Sgabeblack@google.comThen run make:
6113372Sgabeblack@google.com
6213372Sgabeblack@google.com> make
6313372Sgabeblack@google.com
6413372Sgabeblack@google.comMake a config file for the C++-configured gem5 using normal gem5
6513372Sgabeblack@google.com
6613372Sgabeblack@google.com> ../../../build/ARM/gem5.opt ../../../configs/example/se.py -c \
6713372Sgabeblack@google.com>       ../../../tests/test-progs/hello/bin/arm/linux/hello
6813372Sgabeblack@google.com
6913372Sgabeblack@google.comThe binary 'gem5.opt.cxx' can now be used to load in the generated config
7013372Sgabeblack@google.comfile from the previous normal gem5 run.
7113372Sgabeblack@google.com
7213372Sgabeblack@google.comTry:
7313372Sgabeblack@google.com
7413372Sgabeblack@google.com> ./gem5.opt.cxx m5out/config.ini
7513372Sgabeblack@google.com
7613372Sgabeblack@google.comThis should print:
7713372Sgabeblack@google.com
7813372Sgabeblack@google.com> Hello world!
7913372Sgabeblack@google.com
8013372Sgabeblack@google.comThe .ini file can also be read by the Python .ini file reader example:
8113372Sgabeblack@google.com
8213372Sgabeblack@google.com> ../../../build/ARM/gem5.opt ../../../configs/example/read_ini.py \
8313372Sgabeblack@google.com>       m5out/config.ini
8413372Sgabeblack@google.com
8513372Sgabeblack@google.comIf you are interested in SystemC Transaction Level Modeling (TLM2) please have
8613372Sgabeblack@google.coma look into /util/tlm.
87