summaryrefslogtreecommitdiff
path: root/src/python
diff options
context:
space:
mode:
authorAndrew Bardsley <Andrew.Bardsley@arm.com>2014-10-16 05:49:32 -0400
committerAndrew Bardsley <Andrew.Bardsley@arm.com>2014-10-16 05:49:32 -0400
commitd8502ee46d356830698d7b96b29e4b27906a2d79 (patch)
treec7d052a7e276126bd1630658b386ac715f75238d /src/python
parenta63ba6c7b7fe6620478c0d8d7812661c6a36d55a (diff)
downloadgem5-d8502ee46d356830698d7b96b29e4b27906a2d79.tar.xz
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
Diffstat (limited to 'src/python')
-rw-r--r--src/python/SConscript4
-rw-r--r--src/python/m5/stats/__init__.py1
-rw-r--r--src/python/swig/pyobject.cc11
-rw-r--r--src/python/swig/pyobject.hh14
-rw-r--r--src/python/swig/stats.i21
5 files changed, 26 insertions, 25 deletions
diff --git a/src/python/SConscript b/src/python/SConscript
index b2c95b88b..7e9380d85 100644
--- a/src/python/SConscript
+++ b/src/python/SConscript
@@ -31,8 +31,8 @@
Import('*')
-Source('swig/pyevent.cc')
-Source('swig/pyobject.cc')
+Source('swig/pyevent.cc', skip_no_python=True)
+Source('swig/pyobject.cc', skip_no_python=True)
PySource('', 'importer.py')
PySource('m5', 'm5/__init__.py')
diff --git a/src/python/m5/stats/__init__.py b/src/python/m5/stats/__init__.py
index 770749bf0..763d9b9e3 100644
--- a/src/python/m5/stats/__init__.py
+++ b/src/python/m5/stats/__init__.py
@@ -41,6 +41,7 @@ def initText(filename, desc=True):
def initSimStats():
internal.stats.initSimStats()
+ internal.stats.registerPythonStatsHandlers()
names = []
stats_dict = {}
diff --git a/src/python/swig/pyobject.cc b/src/python/swig/pyobject.cc
index 51bd1f62f..fed60ba46 100644
--- a/src/python/swig/pyobject.cc
+++ b/src/python/swig/pyobject.cc
@@ -157,9 +157,12 @@ extern "C" SimObject *convertSwigSimObjectPtr(PyObject *);
// these in sim/main.cc as well that are handled without this define.
#define PCC(s) const_cast<char *>(s)
+/** Single instance of PythonSimObjectResolver as its action is effectively
+ * static but SimObjectResolver can use a non-persistent object */
+PythonSimObjectResolver pythonSimObjectResolver;
SimObject *
-resolveSimObject(const string &name)
+PythonSimObjectResolver::resolveSimObject(const string &name)
{
PyObject *module = PyImport_ImportModule(PCC("m5.SimObject"));
if (module == NULL)
@@ -188,3 +191,9 @@ resolveSimObject(const string &name)
return obj;
}
+
+Checkpoint *
+getCheckpoint(const std::string &cpt_dir)
+{
+ return new Checkpoint(cpt_dir, pythonSimObjectResolver);
+}
diff --git a/src/python/swig/pyobject.hh b/src/python/swig/pyobject.hh
index 8debcc82c..a4f06555e 100644
--- a/src/python/swig/pyobject.hh
+++ b/src/python/swig/pyobject.hh
@@ -36,7 +36,12 @@
#include "sim/sim_object.hh"
extern "C" SimObject *convertSwigSimObjectPtr(PyObject *);
-SimObject *resolveSimObject(const std::string &name);
+
+/** Resolve a SimObject name using the Python configuration */
+class PythonSimObjectResolver : public SimObjectResolver
+{
+ SimObject *resolveSimObject(const std::string &name);
+};
EtherInt * lookupEthPort(SimObject *so, const std::string &name, int i);
@@ -53,11 +58,8 @@ serializeAll(const std::string &cpt_dir)
Serializable::serializeAll(cpt_dir);
}
-inline Checkpoint *
-getCheckpoint(const std::string &cpt_dir)
-{
- return new Checkpoint(cpt_dir);
-}
+Checkpoint *
+getCheckpoint(const std::string &cpt_dir);
inline void
unserializeGlobals(Checkpoint *cp)
diff --git a/src/python/swig/stats.i b/src/python/swig/stats.i
index 3bdd2c9aa..41115445c 100644
--- a/src/python/swig/stats.i
+++ b/src/python/swig/stats.i
@@ -43,6 +43,7 @@
#include "base/statistics.hh"
#include "sim/core.hh"
#include "sim/stat_control.hh"
+#include "sim/stat_register.hh"
namespace Stats {
template <class T>
@@ -64,20 +65,6 @@ Stats_Info_flags_set(Info *info, FlagsType flags)
info->flags = flags;
}
-inline void
-processResetQueue()
-{
- extern CallbackQueue resetQueue;
- resetQueue.process();
-}
-
-inline void
-processDumpQueue()
-{
- extern CallbackQueue dumpQueue;
- dumpQueue.process();
-}
-
inline char *
PCC(const char *string)
{
@@ -102,13 +89,13 @@ call_module_function(const char *module_name, const char *func_name)
}
void
-dump()
+pythonDump()
{
call_module_function("m5.stats", "dump");
}
void
-reset()
+pythonReset()
{
call_module_function("m5.stats", "reset");
}
@@ -150,6 +137,8 @@ template <class T> T cast_info(Info *info);
void initSimStats();
Output *initText(const std::string &filename, bool desc);
+void registerPythonStatsHandlers();
+
void schedStatEvent(bool dump, bool reset,
Tick when = curTick(), Tick repeat = 0);