search paths Signed-off-by: Alain <alainmarcel@yahoo.com>
diff --git a/src/API/PythonAPI.cpp b/src/API/PythonAPI.cpp index 90ee59c..ee445f7 100644 --- a/src/API/PythonAPI.cpp +++ b/src/API/PythonAPI.cpp
@@ -67,6 +67,8 @@ bool PythonAPI::m_strictMode = false; +std::string PythonAPI::m_builtinPath; + PythonAPI::PythonAPI() {} PythonAPI::PythonAPI(const PythonAPI& orig) {} @@ -149,24 +151,19 @@ std::string waivers = m_programPath + "/python/slwaivers.py"; bool waiverLoaded = loadScript_(waivers); - - const char* home = getenv("HOME"); - if (home) { - waivers = std::string(home) + "/slwaivers.py"; - waiverLoaded = loadScript_(waivers) || waiverLoaded; - } - + waivers = "/usr/lib/surelog/slwaivers.py"; + waiverLoaded = loadScript_(waivers) || waiverLoaded; + waivers = "/usr/local/lib/surelog/slwaivers.py"; + waiverLoaded = loadScript_(waivers) || waiverLoaded; waivers = "./slwaivers.py"; waiverLoaded = loadScript_(waivers) || waiverLoaded; std::string format = m_programPath + "/python/slformatmsg.py"; bool messageFormatLoaded = loadScript_(format); - - if (home) { - format = std::string(home) + "/slformatmsg.py"; - messageFormatLoaded = loadScript_(format) || messageFormatLoaded; - } - + format = "/usr/lib/surelog/slformatmsg.py"; + messageFormatLoaded = loadScript_(format) || messageFormatLoaded; + format = "/usr/local/lib/surelog/slformatmsg.py"; + messageFormatLoaded = loadScript_(format) || messageFormatLoaded; format = "./slformatmsg.py"; messageFormatLoaded = loadScript_(format) || messageFormatLoaded; @@ -182,22 +179,28 @@ if (FileUtils::fileExists(listener)) m_listenerScript = listener; m_listenerLoaded = loadScript_(listener); - if (home) { - listener = std::string(home) + "/slSV3_1aPythonListener.py"; - if (FileUtils::fileExists(listener)) m_listenerScript = listener; - m_listenerLoaded = loadScript_(listener) || m_listenerLoaded; - } - + listener = "/usr/lib/surelog/slSV3_1aPythonListener.py"; + if (FileUtils::fileExists(listener)) m_listenerScript = listener; + m_listenerLoaded = loadScript_(listener) || m_listenerLoaded; + listener = "/usr/local/lib/surelog/slSV3_1aPythonListener.py"; + if (FileUtils::fileExists(listener)) m_listenerScript = listener; + m_listenerLoaded = loadScript_(listener) || m_listenerLoaded; listener = "./slSV3_1aPythonListener.py"; if (FileUtils::fileExists(listener)) m_listenerScript = listener; m_listenerLoaded = loadScript_(listener) || m_listenerLoaded; } } -void PythonAPI::init(const char** argv) { +void PythonAPI::init(int argc, const char** argv) { m_programPath = argv[0]; m_programPath = StringUtils::rtrim(m_programPath, '/'); - + for (int i = 1; i < argc; i++) { + if (!strcmp(argv[i], "-builtin")) { + if (i < argc - 1) { + m_builtinPath = argv[i + 1]; + } + } + } Py_SetProgramName((wchar_t*)argv[0]); /* optional but recommended */ PyImport_AppendInittab("slapi", &PyInit_slapi);
diff --git a/src/API/PythonAPI.h b/src/API/PythonAPI.h index 74ac368..236513a 100644 --- a/src/API/PythonAPI.h +++ b/src/API/PythonAPI.h
@@ -37,7 +37,7 @@ PythonAPI(const PythonAPI& orig); virtual ~PythonAPI(); /* Main interpreter (in main thread) */ - static void init(const char** argv); + static void init(int argc, const char** argv); static void shutdown(); static PyThreadState* getMainInterp() { return m_mainThreadState; } @@ -71,6 +71,7 @@ static bool m_listenerLoaded; static std::string m_listenerScript; static bool m_strictMode; + static std::string m_builtinPath; }; }; // namespace SURELOG
diff --git a/src/CommandLine/CommandLineParser.cpp b/src/CommandLine/CommandLineParser.cpp index b5f57d5..9b7e855 100644 --- a/src/CommandLine/CommandLineParser.cpp +++ b/src/CommandLine/CommandLineParser.cpp
@@ -145,7 +145,8 @@ " -noinfo Filters out INFO messages", " -nonote Filters out NOTE messages", " -nowarning Filters out WARNING messages", - " -o <path> Turns on all compilation stages, produces all " + " -o <path> Turns on all compilation stages, produces all ", + " -builtin <path> Alternative path to builtin.sv, python/ and pkg/ dirs", "outputs under that path", " --help This help", " --version Surelog version" @@ -354,13 +355,33 @@ std::string exe_name = argv[0]; std::string exe_path = FileUtils::getPathName(exe_name); m_precompiledDirId = m_symbolTable->registerSymbol(exe_path + "pkg/"); + if (!FileUtils::fileExists(exe_path + "pkg/")) { + if (FileUtils::fileExists("/usr/lib/surelog/pkg/")) { + m_precompiledDirId = m_symbolTable->registerSymbol("/usr/lib/surelog/pkg/"); + } + if (FileUtils::fileExists("/usr/local/lib/surelog/pkg/")) { + m_precompiledDirId = m_symbolTable->registerSymbol("/usr/local/lib/surelog/pkg/"); + } + } + std::string built_in_verilog = exe_path + "/sv/builtin.sv"; + if (!FileUtils::fileExists(built_in_verilog)) { + built_in_verilog = "/usr/lib/surelog/sv/builtin.sv"; + if (!FileUtils::fileExists("/usr/lib/surelog/sv/builtin.sv")) { + built_in_verilog = "/usr/local/lib/surelog/sv/builtin.sv"; + } + } + std::vector<std::string> all_arguments; std::vector<std::string> cmd_line; for (int i = 1; i < argc; i++) { cmd_line.push_back(argv[i]); - - if (!strcmp (argv[i], "-l")) + if (!strcmp(argv[i], "-builtin")) { + if (i < argc - 1) { + m_builtinPath = argv[i + 1]; + built_in_verilog = m_builtinPath + "/builtin.sv"; + } + } else if (!strcmp (argv[i], "-l")) { if (i < argc - 1) {
diff --git a/src/CommandLine/CommandLineParser.hpp b/src/CommandLine/CommandLineParser.hpp index 7121567..7ebe7bd 100644 --- a/src/CommandLine/CommandLineParser.hpp +++ b/src/CommandLine/CommandLineParser.hpp
@@ -122,7 +122,7 @@ bool createCache() { return m_createCache; } const std::string currentDateTime(); bool parseBuiltIn(); - + std::string getBuiltInPath() { return m_builtinPath; } private: bool plus_arguments_(const std::string& s); void processArgs_(std::vector<std::string>& args, @@ -199,6 +199,7 @@ bool m_parseBuiltIn; bool m_ppOutputFileLocation; bool m_logFileSpecified; + std::string m_builtinPath; }; }; // namespace SURELOG
diff --git a/src/main.cpp b/src/main.cpp index 7856bf7..d9efe97 100644 --- a/src/main.cpp +++ b/src/main.cpp
@@ -106,7 +106,7 @@ } if (python_mode) - SURELOG::PythonAPI::init(argv); + SURELOG::PythonAPI::init(argc, argv); if (diff_comp_mode == true) {