From d8502ee46d356830698d7b96b29e4b27906a2d79 Mon Sep 17 00:00:00 2001 From: Andrew Bardsley Date: Thu, 16 Oct 2014 05:49:32 -0400 Subject: config: Add a --without-python option to build process Add the ability to build libgem5 without embedded Python or the ability to configure with Python. This is a prelude to a patch to allow config.ini files to be loaded into libgem5 using only C++ which would make embedding gem5 within other simulation systems easier. This adds a few registration interfaces to things which cross between Python and C++. Namely: stats dumping and SimObject resolving --- src/base/statistics.cc | 40 ++++++++++++++++++++++++++++++++++++++++ src/base/statistics.hh | 19 +++++++++++++++++++ 2 files changed, 59 insertions(+) (limited to 'src/base') diff --git a/src/base/statistics.cc b/src/base/statistics.cc index 2bd34d3db..5ab837410 100644 --- a/src/base/statistics.cc +++ b/src/base/statistics.cc @@ -462,9 +462,31 @@ Formula::str() const return root ? root->str() : ""; } +Handler resetHandler = NULL; +Handler dumpHandler = NULL; + +void +registerHandlers(Handler reset_handler, Handler dump_handler) +{ + resetHandler = reset_handler; + dumpHandler = dump_handler; +} + CallbackQueue dumpQueue; CallbackQueue resetQueue; +void +processResetQueue() +{ + resetQueue.process(); +} + +void +processDumpQueue() +{ + dumpQueue.process(); +} + void registerResetCallback(Callback *cb) { @@ -488,6 +510,24 @@ enable() _enabled = true; } +void +dump() +{ + if (dumpHandler) + dumpHandler(); + else + fatal("No registered Stats::dump handler"); +} + +void +reset() +{ + if (resetHandler) + resetHandler(); + else + fatal("No registered Stats::reset handler"); +} + void registerDumpCallback(Callback *cb) { diff --git a/src/base/statistics.hh b/src/base/statistics.hh index a6edde2f9..f4b12e847 100644 --- a/src/base/statistics.hh +++ b/src/base/statistics.hh @@ -3208,6 +3208,15 @@ void reset(); void enable(); bool enabled(); +/** + * Register reset and dump handlers. These are the functions which + * will actually perform the whole statistics reset/dump actions + * including processing the reset/dump callbacks + */ +typedef void (*Handler)(); + +void registerHandlers(Handler reset_handler, Handler dump_handler); + /** * Register a callback that should be called whenever statistics are * reset @@ -3220,6 +3229,16 @@ void registerResetCallback(Callback *cb); */ void registerDumpCallback(Callback *cb); +/** + * Process all the callbacks in the reset callbacks queue + */ +void processResetQueue(); + +/** + * Process all the callbacks in the dump callbacks queue + */ +void processDumpQueue(); + std::list &statsList(); typedef std::map MapType; -- cgit v1.2.3