/*
+ * Copyright (c) 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder. You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
* Copyright (c) 2008 The Hewlett-Packard Development Company
* All rights reserved.
*
#ifndef __SIM_INIT_HH__
#define __SIM_INIT_HH__
+#include "pybind11/pybind11.h"
+
+#include <list>
+#include <map>
+#include <string>
+
+#include <inttypes.h>
+
+#ifndef PyObject_HEAD
+struct _object;
+typedef _object PyObject;
+#endif
+
/*
* Data structure describing an embedded python file.
*/
-struct EmbeddedPyModule
+struct EmbeddedPython
{
const char *filename;
+ const char *abspath;
const char *modpath;
- const char *code;
- const char *code_end;
+ const uint8_t *code;
int zlen;
- int mlen;
+ int len;
+
+ EmbeddedPython(const char *filename, const char *abspath,
+ const char *modpath, const uint8_t *code, int zlen, int len);
+
+ PyObject *getCode() const;
+ bool addModule() const;
+
+ static EmbeddedPython *importer;
+ static PyObject *importerModule;
+ static std::list<EmbeddedPython *> &getList();
+ static int initAll();
};
-extern const EmbeddedPyModule embeddedPyImporter;
-extern const EmbeddedPyModule embeddedPyModules[];
+class EmbeddedPyBind
+{
+ public:
+ EmbeddedPyBind(const char *_name,
+ void (*init_func)(pybind11::module &),
+ const char *_base);
+
+ EmbeddedPyBind(const char *_name,
+ void (*init_func)(pybind11::module &));
+
+ static void initAll();
+
+ private:
+ void (*initFunc)(pybind11::module &);
+
+ bool depsReady() const;
+ void init(pybind11::module &m);
+
+ bool registered;
+ const std::string name;
+ const std::string base;
+
+ static std::map<std::string, EmbeddedPyBind *> &getMap();
+};
-void initSignals();
int initM5Python();
int m5Main(int argc, char **argv);
+PyMODINIT_FUNC initm5(void);
#endif // __SIM_INIT_HH__