Python passes are now looked for in share/plugins and can be added by specifying...
authorBenedikt Tutzer <e1225461@student.tuwien.ac.at>
Mon, 20 Aug 2018 13:11:06 +0000 (15:11 +0200)
committerBenedikt Tutzer <e1225461@student.tuwien.ac.at>
Mon, 20 Aug 2018 13:11:06 +0000 (15:11 +0200)
kernel/yosys.cc
passes/cmds/plugin.cc

index 8380fe75db17ee8a9b53e32b4ae5a67addeea7d9..e36c68752e2c99b03cdfe1fd20894d52f92a7ab8 100644 (file)
@@ -495,10 +495,7 @@ void yosys_setup()
                PyImport_AppendInittab((char*)"libyosys", INIT_MODULE);
                Py_Initialize();
                PyRun_SimpleString("import sys");
-               PyRun_SimpleString("sys.path.append(\"./\")");
-               //PyRun_SimpleString("import libyosys");
-               //PyRun_SimpleString("sys.path.append(\"./plugins\")");
-               //PyRun_SimpleString(("sys.path.append(\""+proc_share_dirname()+"plugins\")").c_str());
+               PyRun_SimpleString(("sys.path.append(\""+proc_share_dirname()+"plugins\")").c_str());
        #endif
 
        Pass::init_register();
index b5d22a84ae44f78c7e5b12edd72d6fd6111bfb9f..940092301af25b9f06625a51b0d7c78a2e229d3b 100644 (file)
@@ -49,10 +49,12 @@ void load_plugin(std::string filename, std::vector<std::string> aliases)
                #ifdef WITH_PYTHON
                if(boost::algorithm::ends_with(filename, ".py"))
                {
-                       int last_slash = filename.find('/');
+                       int last_slash = filename.find_last_of('/');
+                       std::string path = filename.substr(0, last_slash);
                        filename = filename.substr(last_slash+1, filename.size());
                        filename = filename.substr(0,filename.size()-3);
-                       PyObject *filename_p = PyUnicode_FromString(filename.c_str());//filename.c_str());
+                       PyRun_SimpleString(("sys.path.insert(0,\""+path+"\")").c_str()); 
+                       PyObject *filename_p = PyUnicode_FromString(filename.c_str());
                        if(filename_p == NULL)
                        {
                                log_cmd_error("Issues converting `%s' to Python\n", filename.c_str());
@@ -63,25 +65,7 @@ void load_plugin(std::string filename, std::vector<std::string> aliases)
                        {
                                log_cmd_error("Can't load python module `%s'\n", filename.c_str());
                                return;
-                       }/*
-                       PyObject *dict_p = PyModule_GetDict(module_p);
-                       if(dict_p == NULL)
-                       {
-                               log_cmd_error("Can't load dictionary from module `%s'\n", filename.c_str());
-                               return;
-                       }
-                       PyObject *func_p = PyDict_GetItemString(dict_p, "test");
-                       if(module_p == NULL)
-                       {
-                               log_cmd_error("Module `%s' does not contain test function\n", filename.c_str());
-                               return;
                        }
-                       PyObject *args_p = PyTuple_New(0);
-                       PyObject *result_p = PyObject_CallObject(func_p, args_p);
-                       if(result_p == NULL)
-                                       printf("Calling test failed\n");
-                       printf("Loaded Python module\n");
-                       */
                        loaded_python_plugins[orig_filename] = module_p;
                        Pass::init_register();
                } else {