README revision 13372
111986Sandreas.sandberg@arm.comThis directory contains a demo of C++ configuration of gem5.  The intention
211986Sandreas.sandberg@arm.comis to provide a mechanism to allow pre-generated config.ini files generated
311986Sandreas.sandberg@arm.comby Python-based gem5 to be reloaded in library-base versions of gem5
411986Sandreas.sandberg@arm.comembedded in other systems using C++ calls for simulation control.
511986Sandreas.sandberg@arm.com
611986Sandreas.sandberg@arm.comThis directory contain a demo of hosting a C++ configured version of gem5
711986Sandreas.sandberg@arm.comonto SystemC's event loop.  The hosting is achieved by replacing 'simulate'
811986Sandreas.sandberg@arm.comwith a SystemC object which implements an event loop using SystemC scheduler
911986Sandreas.sandberg@arm.commechanisms.
1011986Sandreas.sandberg@arm.com
1111986Sandreas.sandberg@arm.comThe sc_... files here should probably be hosted in a diferent directory and
1211986Sandreas.sandberg@arm.combuildable as a library.
1311986Sandreas.sandberg@arm.com
1411986Sandreas.sandberg@arm.comFiles:
1511986Sandreas.sandberg@arm.com
1611986Sandreas.sandberg@arm.com    main.cc                 -- demonstration top level
1711986Sandreas.sandberg@arm.com    sc_logger.{cc,hh}       -- rehosting of DPRINTF onto SC_REPORT
1811986Sandreas.sandberg@arm.com    sc_module.{cc,hh}       -- SystemC simulation loop base class
1911986Sandreas.sandberg@arm.com    sc_gem5_control.{cc,hh} -- Alternative extra wrapping to allow gem5
2011986Sandreas.sandberg@arm.com                                Systems to be instantiated as single
2111986Sandreas.sandberg@arm.com                                sc_module objects.
2211986Sandreas.sandberg@arm.com    stats.{cc,hh}           -- Stats dumping (copied from util/cxx_config)
2311986Sandreas.sandberg@arm.com
2411986Sandreas.sandberg@arm.comRead main.cc for more details of the implementation and sc_... files for
2511986Sandreas.sandberg@arm.com
2611986Sandreas.sandberg@arm.comTo build:
2711986Sandreas.sandberg@arm.com
2811986Sandreas.sandberg@arm.comFirst build gem5 as a library with cxx-config support and (optionally)
2911986Sandreas.sandberg@arm.comwithout python.  Also build a normal gem5 (cxx-config not needed, Python
3011986Sandreas.sandberg@arm.comneeded):
3111986Sandreas.sandberg@arm.com
3211986Sandreas.sandberg@arm.com> cd ../../..
3311986Sandreas.sandberg@arm.com> scons build/ARM/gem5.opt
3411986Sandreas.sandberg@arm.com> scons --with-cxx-config --without-python build/ARM/libgem5_opt.so
3511986Sandreas.sandberg@arm.com> cd util/systemc
3611986Sandreas.sandberg@arm.com
3711986Sandreas.sandberg@arm.comNote: For MAC / OSX this command should be used:
3811986Sandreas.sandberg@arm.com> scons --with-cxx-config --without-python build/ARM/libgem5_opt.dylib
3911986Sandreas.sandberg@arm.com
4011986Sandreas.sandberg@arm.comSet a proper LD_LIBRARY_PATH e.g. for bash:
4111986Sandreas.sandberg@arm.com> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/gem5/build/ARM/"
4211986Sandreas.sandberg@arm.com
4311986Sandreas.sandberg@arm.comor for MAC / OSX:
4411986Sandreas.sandberg@arm.com> export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/gem5/build/ARM/"
4511986Sandreas.sandberg@arm.com
4611986Sandreas.sandberg@arm.com
4711986Sandreas.sandberg@arm.comThen edit the Makefile to set the paths for SystemC, e.g:
4811986Sandreas.sandberg@arm.com
4911986Sandreas.sandberg@arm.com    Linux:
5011986Sandreas.sandberg@arm.com    SYSTEMC_INC = /opt/systemc/include
5111986Sandreas.sandberg@arm.com    SYSTEMC_LIB = /opt/systemc/lib-linux64
5211986Sandreas.sandberg@arm.com
5311986Sandreas.sandberg@arm.com    MAC / OSX:
5411986Sandreas.sandberg@arm.com    SYSTEMC_INC = /opt/systemc/include
5511986Sandreas.sandberg@arm.com    SYSTEMC_LIB = /opt/systemc/lib-macosx64
5611986Sandreas.sandberg@arm.com
5711986Sandreas.sandberg@arm.comThen run make:
5811986Sandreas.sandberg@arm.com
5911986Sandreas.sandberg@arm.com> make
6011986Sandreas.sandberg@arm.com
6111986Sandreas.sandberg@arm.comMake a config file for the C++-configured gem5 using normal gem5
6211986Sandreas.sandberg@arm.com
6311986Sandreas.sandberg@arm.com> ../../../build/ARM/gem5.opt ../../../configs/example/se.py -c \
6411986Sandreas.sandberg@arm.com>       ../../../tests/test-progs/hello/bin/arm/linux/hello
6511986Sandreas.sandberg@arm.com
6611986Sandreas.sandberg@arm.comThe binary 'gem5.opt.cxx' can now be used to load in the generated config
6711986Sandreas.sandberg@arm.comfile from the previous normal gem5 run.
6811986Sandreas.sandberg@arm.com
6911986Sandreas.sandberg@arm.comTry:
7011986Sandreas.sandberg@arm.com
7111986Sandreas.sandberg@arm.com> ./gem5.opt.cxx m5out/config.ini
7211986Sandreas.sandberg@arm.com
7311986Sandreas.sandberg@arm.comThis should print:
7411986Sandreas.sandberg@arm.com
7511986Sandreas.sandberg@arm.com> Hello world!
7611986Sandreas.sandberg@arm.com
7711986Sandreas.sandberg@arm.comThe .ini file can also be read by the Python .ini file reader example:
7811986Sandreas.sandberg@arm.com
7911986Sandreas.sandberg@arm.com> ../../../build/ARM/gem5.opt ../../../configs/example/read_ini.py \
8011986Sandreas.sandberg@arm.com>       m5out/config.ini
8111986Sandreas.sandberg@arm.com
8211986Sandreas.sandberg@arm.comIf you are interested in SystemC Transaction Level Modeling (TLM2) please have
8311986Sandreas.sandberg@arm.coma look into /util/tlm.
8411986Sandreas.sandberg@arm.com