aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/yosys.cc50
1 files changed, 36 insertions, 14 deletions
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index e9b113dd2..ad0aa5a6d 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -48,10 +48,6 @@
YOSYS_NAMESPACE_BEGIN
-#if defined(_WIN32) && !defined(__MINGW32__)
-const char *yosys_version_str = "Yosys for Windows (Version Information Unavailable)";
-#endif
-
int autoidx = 1;
RTLIL::Design *yosys_design = NULL;
@@ -224,8 +220,10 @@ std::string make_temp_file(std::string template_str)
log_error("GetTempPath() failed.\n");
if (!GetShortPathName(longpath, shortpath, MAX_PATH + 1))
log_error("GetShortPathName() failed.\n");
- log_assert(sizeof(TCHAR) == sizeof(char));
- template_str = stringf("%s\\%s", shortpath, template_str.c_str() + 5);
+ std::string path;
+ for (int i = 0; shortpath[i]; i++)
+ path += char(shortpath[i]);
+ template_str = stringf("%s\\%s", path.c_str(), template_str.c_str() + 5);
}
size_t pos = template_str.rfind("XXXXXX");
@@ -363,11 +361,19 @@ void yosys_shutdown()
RTLIL::IdString new_id(std::string file, int line, std::string func)
{
- std::string str = "$auto$";
+#ifdef _WIN32
+ size_t pos = file.find_last_of("/\\");
+#else
size_t pos = file.find_last_of('/');
- str += pos != std::string::npos ? file.substr(pos+1) : file;
- str += stringf(":%d:%s$%d", line, func.c_str(), autoidx++);
- return str;
+#endif
+ if (pos != std::string::npos)
+ file = file.substr(pos+1);
+
+ pos = func.find_last_of(':');
+ if (pos != std::string::npos)
+ func = func.substr(pos+1);
+
+ return stringf("$auto$%s:%d:%s$%d", file.c_str(), line, func.c_str(), autoidx++);
}
RTLIL::Design *yosys_get_design()
@@ -504,8 +510,10 @@ std::string proc_self_dirname()
i++;
while (i > 0 && shortpath[i-1] != '/' && shortpath[i-1] != '\\')
shortpath[--i] = 0;
- log_assert(sizeof(TCHAR) == sizeof(char));
- return std::string((char*)shortpath);
+ std::string path;
+ for (i = 0; shortpath[i]; i++)
+ path += char(shortpath[i]);
+ return path;
}
#elif defined(EMSCRIPTEN)
std::string proc_self_dirname()
@@ -519,12 +527,21 @@ std::string proc_self_dirname()
std::string proc_share_dirname()
{
std::string proc_self_path = proc_self_dirname();
+#ifdef _WIN32
+ std::string proc_share_path = proc_self_path + "share\\";
+ if (check_file_exists(proc_share_path, true))
+ return proc_share_path;
+ proc_share_path = proc_self_path + "..\\share\\";
+ if (check_file_exists(proc_share_path, true))
+ return proc_share_path;
+#else
std::string proc_share_path = proc_self_path + "share/";
if (check_file_exists(proc_share_path, true))
return proc_share_path;
proc_share_path = proc_self_path + "../share/yosys/";
if (check_file_exists(proc_share_path, true))
return proc_share_path;
+#endif
log_error("proc_share_dirname: unable to determine share/ directory!\n");
}
@@ -792,11 +809,16 @@ void shell(RTLIL::Design *design)
char *command = NULL;
#ifdef YOSYS_ENABLE_READLINE
while ((command = readline(create_prompt(design, recursion_counter))) != NULL)
+ {
#else
char command_buffer[4096];
- while ((command = fgets(command_buffer, 4096, stdin)) != NULL)
-#endif
+ while (1)
{
+ fputs(create_prompt(design, recursion_counter), stdout);
+ fflush(stdout);
+ if ((command = fgets(command_buffer, 4096, stdin)) == NULL)
+ break;
+#endif
if (command[strspn(command, " \t\r\n")] == 0)
continue;
#ifdef YOSYS_ENABLE_READLINE