Working on global Python design object
Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
parent
e576f71838
commit
a5249da02d
@ -80,10 +80,17 @@ BOOST_PYTHON_MODULE (MODULE_NAME) {
|
|||||||
.def_readwrite("bel", &CellInfo::bel)
|
.def_readwrite("bel", &CellInfo::bel)
|
||||||
.def_readwrite("pins", &CellInfo::pins);
|
.def_readwrite("pins", &CellInfo::pins);
|
||||||
|
|
||||||
class_<Design>("Design", no_init)
|
WRAP_MAP(decltype(CellInfo::ports), "IdPortMap");
|
||||||
|
//WRAP_MAP(decltype(CellInfo::pins), "IdIdMap");
|
||||||
|
|
||||||
|
class_<Design, Design*>("Design", no_init)
|
||||||
.def_readwrite("chip", &Design::chip)
|
.def_readwrite("chip", &Design::chip)
|
||||||
.def_readwrite("nets", &Design::nets)
|
.def_readwrite("nets", &Design::nets)
|
||||||
.def_readwrite("cells", &Design::cells);
|
.def_readwrite("cells", &Design::cells);
|
||||||
|
|
||||||
|
WRAP_MAP(decltype(Design::nets), "IdNetMap");
|
||||||
|
WRAP_MAP(decltype(Design::cells), "IdCellMap");
|
||||||
|
|
||||||
arch_wrap_python();
|
arch_wrap_python();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +111,7 @@ void init_python(const char *executable) {
|
|||||||
emb::append_inittab();
|
emb::append_inittab();
|
||||||
Py_SetProgramName(program);
|
Py_SetProgramName(program);
|
||||||
Py_Initialize();
|
Py_Initialize();
|
||||||
|
PyImport_ImportModule(TOSTRING(MODULE_NAME));
|
||||||
} catch (boost::python::error_already_set const &) {
|
} catch (boost::python::error_already_set const &) {
|
||||||
// Parse and output the exception
|
// Parse and output the exception
|
||||||
std::string perror_str = parse_python_exception();
|
std::string perror_str = parse_python_exception();
|
||||||
|
@ -29,12 +29,14 @@
|
|||||||
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
||||||
#include <boost/python/suite/indexing/map_indexing_suite.hpp>
|
#include <boost/python/suite/indexing/map_indexing_suite.hpp>
|
||||||
#include <boost/python/suite/indexing/map_indexing_suite.hpp>
|
#include <boost/python/suite/indexing/map_indexing_suite.hpp>
|
||||||
|
#include <Python.h>
|
||||||
using namespace boost::python;
|
using namespace boost::python;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A wrapper to enable custom type/ID to/from string conversions
|
A wrapper to enable custom type/ID to/from string conversions
|
||||||
*/
|
*/
|
||||||
template <typename T> struct string_wrapper {
|
template<typename T>
|
||||||
|
struct string_wrapper {
|
||||||
template<typename F>
|
template<typename F>
|
||||||
struct from_pystring_converter {
|
struct from_pystring_converter {
|
||||||
from_pystring_converter() {
|
from_pystring_converter() {
|
||||||
@ -64,14 +66,17 @@ template <typename T> struct string_wrapper {
|
|||||||
static F fn;
|
static F fn;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename F> struct to_str_wrapper {
|
template<typename F>
|
||||||
|
struct to_str_wrapper {
|
||||||
static F fn;
|
static F fn;
|
||||||
|
|
||||||
std::string str(T &x) {
|
std::string str(T &x) {
|
||||||
return fn(x);
|
return fn(x);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename F1, typename F2> static void wrap(const char *type_name, F1 to_str_fn, F2 from_str_fn) {
|
template<typename F1, typename F2>
|
||||||
|
static void wrap(const char *type_name, F1 to_str_fn, F2 from_str_fn) {
|
||||||
from_pystring_converter<F2>::fn = from_str_fn;
|
from_pystring_converter<F2>::fn = from_str_fn;
|
||||||
from_pystring_converter<F2>();
|
from_pystring_converter<F2>();
|
||||||
to_str_wrapper<F1>::fn = to_str_fn;
|
to_str_wrapper<F1>::fn = to_str_fn;
|
||||||
@ -79,12 +84,34 @@ template <typename T> struct string_wrapper {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::string parse_python_exception();
|
||||||
|
|
||||||
|
template<typename Tn>
|
||||||
|
void python_export_global(const char *name, Tn &x) {
|
||||||
|
PyObject * m, *d;
|
||||||
|
m = PyImport_AddModule("__main__");
|
||||||
|
if (m == NULL)
|
||||||
|
return;
|
||||||
|
d = PyModule_GetDict(m);
|
||||||
|
try {
|
||||||
|
PyObject * p = object(boost::ref(x)).ptr();
|
||||||
|
PyDict_SetItemString(d, name, p);
|
||||||
|
} catch (boost::python::error_already_set const &) {
|
||||||
|
// Parse and output the exception
|
||||||
|
std::string perror_str = parse_python_exception();
|
||||||
|
std::cout << "Error in Python: " << perror_str << std::endl;
|
||||||
|
std::terminate();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void init_python(const char *executable);
|
void init_python(const char *executable);
|
||||||
|
|
||||||
void deinit_python();
|
void deinit_python();
|
||||||
|
|
||||||
void execute_python_file(const char *python_file);
|
void execute_python_file(const char *python_file);
|
||||||
|
|
||||||
std::string parse_python_exception();
|
std::string parse_python_exception();
|
||||||
|
|
||||||
void arch_appendinittab();
|
void arch_appendinittab();
|
||||||
|
|
||||||
#endif /* end of include guard: COMMON_PYBINDINGS_HH */
|
#endif /* end of include guard: COMMON_PYBINDINGS_HH */
|
||||||
|
@ -123,6 +123,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
Design design(chipArgs);
|
Design design(chipArgs);
|
||||||
init_python(argv[0]);
|
init_python(argv[0]);
|
||||||
|
python_export_global("design", design);
|
||||||
|
|
||||||
if (vm.count("test"))
|
if (vm.count("test"))
|
||||||
{
|
{
|
||||||
|
2
python/dump_design.py
Normal file
2
python/dump_design.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
for cell in design.cells:
|
||||||
|
print(cell.first)
|
Loading…
Reference in New Issue
Block a user