README revision 13372
15425Sgblack@eecs.umich.eduThis directory contains a demo of C++ configuration of gem5.  The intention
25425Sgblack@eecs.umich.eduis to provide a mechanism to allow pre-generated config.ini files generated
35425Sgblack@eecs.umich.eduby Python-based gem5 to be reloaded in library-base versions of gem5
45425Sgblack@eecs.umich.eduembedded in other systems using C++ calls for simulation control.
55425Sgblack@eecs.umich.edu
65425Sgblack@eecs.umich.eduThis directory contain a demo of hosting a C++ configured version of gem5
75425Sgblack@eecs.umich.eduonto SystemC's event loop.  The hosting is achieved by replacing 'simulate'
85425Sgblack@eecs.umich.eduwith a SystemC object which implements an event loop using SystemC scheduler
95425Sgblack@eecs.umich.edumechanisms.
105425Sgblack@eecs.umich.edu
115425Sgblack@eecs.umich.eduThe sc_... files here should probably be hosted in a diferent directory and
125425Sgblack@eecs.umich.edubuildable as a library.
135425Sgblack@eecs.umich.edu
145425Sgblack@eecs.umich.eduFiles:
155425Sgblack@eecs.umich.edu
165425Sgblack@eecs.umich.edu    main.cc                 -- demonstration top level
175425Sgblack@eecs.umich.edu    sc_logger.{cc,hh}       -- rehosting of DPRINTF onto SC_REPORT
185425Sgblack@eecs.umich.edu    sc_module.{cc,hh}       -- SystemC simulation loop base class
195425Sgblack@eecs.umich.edu    sc_gem5_control.{cc,hh} -- Alternative extra wrapping to allow gem5
205425Sgblack@eecs.umich.edu                                Systems to be instantiated as single
215425Sgblack@eecs.umich.edu                                sc_module objects.
225425Sgblack@eecs.umich.edu    stats.{cc,hh}           -- Stats dumping (copied from util/cxx_config)
235425Sgblack@eecs.umich.edu
245425Sgblack@eecs.umich.eduRead main.cc for more details of the implementation and sc_... files for
255425Sgblack@eecs.umich.edu
265425Sgblack@eecs.umich.eduTo build:
275425Sgblack@eecs.umich.edu
285425Sgblack@eecs.umich.eduFirst build gem5 as a library with cxx-config support and (optionally)
295425Sgblack@eecs.umich.eduwithout python.  Also build a normal gem5 (cxx-config not needed, Python
305425Sgblack@eecs.umich.eduneeded):
315425Sgblack@eecs.umich.edu
325425Sgblack@eecs.umich.edu> cd ../../..
335425Sgblack@eecs.umich.edu> scons build/ARM/gem5.opt
345425Sgblack@eecs.umich.edu> scons --with-cxx-config --without-python build/ARM/libgem5_opt.so
355425Sgblack@eecs.umich.edu> cd util/systemc
365425Sgblack@eecs.umich.edu
375425Sgblack@eecs.umich.eduNote: For MAC / OSX this command should be used:
385425Sgblack@eecs.umich.edu> scons --with-cxx-config --without-python build/ARM/libgem5_opt.dylib
395425Sgblack@eecs.umich.edu
405425Sgblack@eecs.umich.eduSet a proper LD_LIBRARY_PATH e.g. for bash:
415425Sgblack@eecs.umich.edu> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/gem5/build/ARM/"
425425Sgblack@eecs.umich.edu
435425Sgblack@eecs.umich.eduor for MAC / OSX:
445425Sgblack@eecs.umich.edu> export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/gem5/build/ARM/"
455425Sgblack@eecs.umich.edu
465425Sgblack@eecs.umich.edu
475425Sgblack@eecs.umich.eduThen edit the Makefile to set the paths for SystemC, e.g:
485425Sgblack@eecs.umich.edu
495425Sgblack@eecs.umich.edu    Linux:
505425Sgblack@eecs.umich.edu    SYSTEMC_INC = /opt/systemc/include
515425Sgblack@eecs.umich.edu    SYSTEMC_LIB = /opt/systemc/lib-linux64
525425Sgblack@eecs.umich.edu
535425Sgblack@eecs.umich.edu    MAC / OSX:
545425Sgblack@eecs.umich.edu    SYSTEMC_INC = /opt/systemc/include
555425Sgblack@eecs.umich.edu    SYSTEMC_LIB = /opt/systemc/lib-macosx64
565425Sgblack@eecs.umich.edu
575425Sgblack@eecs.umich.eduThen run make:
585425Sgblack@eecs.umich.edu
595425Sgblack@eecs.umich.edu> make
605425Sgblack@eecs.umich.edu
615425Sgblack@eecs.umich.eduMake a config file for the C++-configured gem5 using normal gem5
625425Sgblack@eecs.umich.edu
635425Sgblack@eecs.umich.edu> ../../../build/ARM/gem5.opt ../../../configs/example/se.py -c \
645425Sgblack@eecs.umich.edu>       ../../../tests/test-progs/hello/bin/arm/linux/hello
655425Sgblack@eecs.umich.edu
665425Sgblack@eecs.umich.eduThe binary 'gem5.opt.cxx' can now be used to load in the generated config
675425Sgblack@eecs.umich.edufile from the previous normal gem5 run.
685425Sgblack@eecs.umich.edu
695425Sgblack@eecs.umich.eduTry:
705425Sgblack@eecs.umich.edu
715425Sgblack@eecs.umich.edu> ./gem5.opt.cxx m5out/config.ini
725425Sgblack@eecs.umich.edu
735425Sgblack@eecs.umich.eduThis should print:
745425Sgblack@eecs.umich.edu
755425Sgblack@eecs.umich.edu> Hello world!
765425Sgblack@eecs.umich.edu
775425Sgblack@eecs.umich.eduThe .ini file can also be read by the Python .ini file reader example:
785425Sgblack@eecs.umich.edu
795425Sgblack@eecs.umich.edu> ../../../build/ARM/gem5.opt ../../../configs/example/read_ini.py \
805425Sgblack@eecs.umich.edu>       m5out/config.ini
815425Sgblack@eecs.umich.edu
825425Sgblack@eecs.umich.eduIf you are interested in SystemC Transaction Level Modeling (TLM2) please have
835425Sgblack@eecs.umich.edua look into /util/tlm.
845425Sgblack@eecs.umich.edu