aboutsummaryrefslogtreecommitdiffstats
path: root/common/pybindings.cc
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-06-07 13:10:53 +0200
committerDavid Shah <davey1576@gmail.com>2018-06-07 13:10:53 +0200
commitc3e02527030c11f0177e3bf8d8c5d9a5c9925dc4 (patch)
treeec5fce1d0832d65f6da873ae5f9603c29063de3f /common/pybindings.cc
parent6236a1042797be90224461adf23243e0bb16f2fe (diff)
downloadnextpnr-c3e02527030c11f0177e3bf8d8c5d9a5c9925dc4.tar.gz
nextpnr-c3e02527030c11f0177e3bf8d8c5d9a5c9925dc4.tar.bz2
nextpnr-c3e02527030c11f0177e3bf8d8c5d9a5c9925dc4.zip
Reformat Python bindings and ice40 main
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'common/pybindings.cc')
-rw-r--r--common/pybindings.cc214
1 files changed, 109 insertions, 105 deletions
diff --git a/common/pybindings.cc b/common/pybindings.cc
index c3818cad..5c86720e 100644
--- a/common/pybindings.cc
+++ b/common/pybindings.cc
@@ -18,134 +18,138 @@
*
*/
-
-#include "design.h"
#include "chip.h"
+#include "design.h"
#include "emb.h"
// include after design.h/chip.h
#include "pybindings.h"
-// Required to determine concatenated module name (which differs for different archs)
-#define PASTER(x, y) x ## _ ## y
-#define EVALUATOR(x, y) PASTER(x,y)
+// Required to determine concatenated module name (which differs for different
+// archs)
+#define PASTER(x, y) x##_##y
+#define EVALUATOR(x, y) PASTER(x, y)
#define MODULE_NAME EVALUATOR(nextpnrpy, ARCHNAME)
#define PYINIT_MODULE_NAME EVALUATOR(&PyInit_nextpnrpy, ARCHNAME)
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
-// Architecture-specific bindings should be created in the below function, which must be implemented in all
-// architectures
+// Architecture-specific bindings should be created in the below function, which
+// must be implemented in all architectures
void arch_wrap_python();
-bool operator==(const PortRef &a, const PortRef &b) {
- return (a.cell == b.cell) && (a.port == b.port);
+bool operator==(const PortRef &a, const PortRef &b)
+{
+ return (a.cell == b.cell) && (a.port == b.port);
}
-BOOST_PYTHON_MODULE (MODULE_NAME) {
- class_<GraphicElement>("GraphicElement")
- .def_readwrite("style", &GraphicElement::style)
- .def_readwrite("type", &GraphicElement::type)
- .def_readwrite("x1", &GraphicElement::x1)
- .def_readwrite("y1", &GraphicElement::y1)
- .def_readwrite("x2", &GraphicElement::x2)
- .def_readwrite("y2", &GraphicElement::y2)
- .def_readwrite("text", &GraphicElement::text);
-
- class_<PortRef>("PortRef")
- .def_readwrite("cell", &PortRef::cell)
- .def_readwrite("port", &PortRef::port);
-
- class_<NetInfo, NetInfo*>("NetInfo")
- .def_readwrite("name", &NetInfo::name)
- .def_readwrite("driver", &NetInfo::driver)
- .def_readwrite("users", &NetInfo::users)
- .def_readwrite("attrs", &NetInfo::attrs)
- .def_readwrite("wires", &NetInfo::wires);
-
- WRAP_MAP(decltype(NetInfo::attrs), "IdStrMap");
-
- class_<vector<PortRef>>("PortRefVector")
- .def(vector_indexing_suite<vector<PortRef>>());
-
- enum_<PortType>("PortType")
- .value("PORT_IN", PORT_IN)
- .value("PORT_OUT", PORT_OUT)
- .value("PORT_INOUT", PORT_INOUT)
- .export_values();
-
- class_<PortInfo>("PortInfo")
- .def_readwrite("name", &PortInfo::name)
- .def_readwrite("net", &PortInfo::net)
- .def_readwrite("type", &PortInfo::type);
-
- class_<CellInfo, CellInfo*>("CellInfo")
- .def_readwrite("name", &CellInfo::name)
- .def_readwrite("type", &CellInfo::type)
- .def_readwrite("ports", &CellInfo::ports)
- .def_readwrite("attrs", &CellInfo::attrs)
- .def_readwrite("params", &CellInfo::params)
- .def_readwrite("bel", &CellInfo::bel)
- .def_readwrite("pins", &CellInfo::pins);
-
- 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("nets", &Design::nets)
- .def_readwrite("cells", &Design::cells);
-
- WRAP_MAP(decltype(Design::nets), "IdNetMap");
- WRAP_MAP(decltype(Design::cells), "IdCellMap");
-
- arch_wrap_python();
+BOOST_PYTHON_MODULE(MODULE_NAME)
+{
+ class_<GraphicElement>("GraphicElement")
+ .def_readwrite("style", &GraphicElement::style)
+ .def_readwrite("type", &GraphicElement::type)
+ .def_readwrite("x1", &GraphicElement::x1)
+ .def_readwrite("y1", &GraphicElement::y1)
+ .def_readwrite("x2", &GraphicElement::x2)
+ .def_readwrite("y2", &GraphicElement::y2)
+ .def_readwrite("text", &GraphicElement::text);
+
+ class_<PortRef>("PortRef")
+ .def_readwrite("cell", &PortRef::cell)
+ .def_readwrite("port", &PortRef::port);
+
+ class_<NetInfo, NetInfo *>("NetInfo")
+ .def_readwrite("name", &NetInfo::name)
+ .def_readwrite("driver", &NetInfo::driver)
+ .def_readwrite("users", &NetInfo::users)
+ .def_readwrite("attrs", &NetInfo::attrs)
+ .def_readwrite("wires", &NetInfo::wires);
+
+ WRAP_MAP(decltype(NetInfo::attrs), "IdStrMap");
+
+ class_<vector<PortRef>>("PortRefVector")
+ .def(vector_indexing_suite<vector<PortRef>>());
+
+ enum_<PortType>("PortType")
+ .value("PORT_IN", PORT_IN)
+ .value("PORT_OUT", PORT_OUT)
+ .value("PORT_INOUT", PORT_INOUT)
+ .export_values();
+
+ class_<PortInfo>("PortInfo")
+ .def_readwrite("name", &PortInfo::name)
+ .def_readwrite("net", &PortInfo::net)
+ .def_readwrite("type", &PortInfo::type);
+
+ class_<CellInfo, CellInfo *>("CellInfo")
+ .def_readwrite("name", &CellInfo::name)
+ .def_readwrite("type", &CellInfo::type)
+ .def_readwrite("ports", &CellInfo::ports)
+ .def_readwrite("attrs", &CellInfo::attrs)
+ .def_readwrite("params", &CellInfo::params)
+ .def_readwrite("bel", &CellInfo::bel)
+ .def_readwrite("pins", &CellInfo::pins);
+
+ 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("nets", &Design::nets)
+ .def_readwrite("cells", &Design::cells);
+
+ WRAP_MAP(decltype(Design::nets), "IdNetMap");
+ WRAP_MAP(decltype(Design::cells), "IdCellMap");
+
+ arch_wrap_python();
}
-void arch_appendinittab() {
- PyImport_AppendInittab(TOSTRING(MODULE_NAME), PYINIT_MODULE_NAME);
+void arch_appendinittab()
+{
+ PyImport_AppendInittab(TOSTRING(MODULE_NAME), PYINIT_MODULE_NAME);
}
static wchar_t *program;
-void init_python(const char *executable) {
- program = Py_DecodeLocale(executable, NULL);
- if (program == NULL) {
- fprintf(stderr, "Fatal error: cannot decode executable filename\n");
- exit(1);
- }
- try {
- PyImport_AppendInittab(TOSTRING(MODULE_NAME), PYINIT_MODULE_NAME);
- emb::append_inittab();
- Py_SetProgramName(program);
- Py_Initialize();
- PyImport_ImportModule(TOSTRING(MODULE_NAME));
- } 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;
- }
+void init_python(const char *executable)
+{
+ program = Py_DecodeLocale(executable, NULL);
+ if (program == NULL) {
+ fprintf(stderr, "Fatal error: cannot decode executable filename\n");
+ exit(1);
+ }
+ try {
+ PyImport_AppendInittab(TOSTRING(MODULE_NAME), PYINIT_MODULE_NAME);
+ emb::append_inittab();
+ Py_SetProgramName(program);
+ Py_Initialize();
+ PyImport_ImportModule(TOSTRING(MODULE_NAME));
+ } 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;
+ }
}
-void deinit_python() {
- Py_Finalize();
- PyMem_RawFree(program);
+void deinit_python()
+{
+ Py_Finalize();
+ PyMem_RawFree(program);
}
-void execute_python_file(const char *python_file) {
- try {
- FILE *fp = fopen(python_file, "r");
- if (fp == NULL) {
- fprintf(stderr, "Fatal error: file not found %s\n", python_file);
- exit(1);
- }
- PyRun_SimpleFile(fp, python_file);
- fclose(fp);
- }
- 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;
- }
+void execute_python_file(const char *python_file)
+{
+ try {
+ FILE *fp = fopen(python_file, "r");
+ if (fp == NULL) {
+ fprintf(stderr, "Fatal error: file not found %s\n", python_file);
+ exit(1);
+ }
+ PyRun_SimpleFile(fp, python_file);
+ fclose(fp);
+ } 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;
+ }
}
-