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