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.  When building the library, disable gem5's native SystemC
API support, as that will conflict with the external version.  Also build a
normal gem5 (cxx-config not needed, Python needed):

> cd ../../..
> scons build/ARM/gem5.opt
> scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \
>       build/ARM/libgem5_opt.so
> cd util/systemc

Note: For MAC / OSX this command should be used:
> scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \
>       build/ARM/libgem5_opt.dylib

Set a proper LD_LIBRARY_PATH e.g. for bash:
> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/gem5/build/ARM/"

or for MAC / OSX:
> export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/gem5/build/ARM/"


Then edit the Makefile to set the paths for SystemC, e.g:

    Linux:
    SYSTEMC_INC = /opt/systemc/include
    SYSTEMC_LIB = /opt/systemc/lib-linux64

    MAC / OSX:
    SYSTEMC_INC = /opt/systemc/include
    SYSTEMC_LIB = /opt/systemc/lib-macosx64

Then 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

If you are interested in SystemC Transaction Level Modeling (TLM2) please have
a look into /util/tlm.
