projects
/
yosys.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
xaiger: update help text
[yosys.git]
/
kernel
/
yosys.cc
diff --git
a/kernel/yosys.cc
b/kernel/yosys.cc
index 380f7030bd54a88e48cea5f5fe4f88803d18fb12..2ec3dca0cffeda704d13141a25c81250b0b07e94 100644
(file)
--- a/
kernel/yosys.cc
+++ b/
kernel/yosys.cc
@@
-45,8
+45,10
@@
# include <unistd.h>
# include <dirent.h>
# include <sys/types.h>
# include <unistd.h>
# include <dirent.h>
# include <sys/types.h>
-# include <sys/wait.h>
# include <sys/stat.h>
# include <sys/stat.h>
+# if !defined(YOSYS_DISABLE_SPAWN)
+# include <sys/wait.h>
+# endif
#endif
#if !defined(_WIN32) && defined(YOSYS_ENABLE_GLOB)
#endif
#if !defined(_WIN32) && defined(YOSYS_ENABLE_GLOB)
@@
-336,16
+338,13
@@
bool patmatch(const char *pattern, const char *string)
return false;
}
return false;
}
+#if !defined(YOSYS_DISABLE_SPAWN)
int run_command(const std::string &command, std::function<void(const std::string&)> process_line)
{
if (!process_line)
return system(command.c_str());
int run_command(const std::string &command, std::function<void(const std::string&)> process_line)
{
if (!process_line)
return system(command.c_str());
-#ifdef EMSCRIPTEN
- FILE *f = nullptr;
-#else
FILE *f = popen(command.c_str(), "r");
FILE *f = popen(command.c_str(), "r");
-#endif
if (f == nullptr)
return -1;
if (f == nullptr)
return -1;
@@
-368,10
+367,16
@@
int run_command(const std::string &command, std::function<void(const std::string
return WEXITSTATUS(ret);
#endif
}
return WEXITSTATUS(ret);
#endif
}
+#endif
std::string make_temp_file(std::string template_str)
{
std::string make_temp_file(std::string template_str)
{
-#ifdef _WIN32
+#if defined(__wasm)
+ size_t pos = template_str.rfind("XXXXXX");
+ log_assert(pos != std::string::npos);
+ static size_t index = 0;
+ template_str.replace(pos, 6, stringf("%06zu", index++));
+#elif defined(_WIN32)
if (template_str.rfind("/tmp/", 0) == 0) {
# ifdef __MINGW32__
char longpath[MAX_PATH + 1];
if (template_str.rfind("/tmp/", 0) == 0) {
# ifdef __MINGW32__
char longpath[MAX_PATH + 1];
@@
-420,10
+425,14
@@
std::string make_temp_file(std::string template_str)
std::string make_temp_dir(std::string template_str)
{
std::string make_temp_dir(std::string template_str)
{
-#if
def _WIN32
+#if
defined(_WIN32)
template_str = make_temp_file(template_str);
mkdir(template_str.c_str());
return template_str;
template_str = make_temp_file(template_str);
mkdir(template_str.c_str());
return template_str;
+#elif defined(__wasm)
+ template_str = make_temp_file(template_str);
+ mkdir(template_str.c_str(), 0777);
+ return template_str;
#else
# ifndef NDEBUG
size_t pos = template_str.rfind("XXXXXX");
#else
# ifndef NDEBUG
size_t pos = template_str.rfind("XXXXXX");
@@
-516,7
+525,7
@@
void yosys_setup()
already_setup = true;
#define X(_id) RTLIL::ID::_id = "\\" # _id;
already_setup = true;
#define X(_id) RTLIL::ID::_id = "\\" # _id;
-#include "constids.inc"
+#include "
kernel/
constids.inc"
#undef X
#ifdef WITH_PYTHON
#undef X
#ifdef WITH_PYTHON
@@
-806,7
+815,7
@@
std::string proc_self_dirname()
path += char(shortpath[i]);
return path;
}
path += char(shortpath[i]);
return path;
}
-#elif defined(EMSCRIPTEN)
+#elif defined(EMSCRIPTEN)
|| defined(__wasm)
std::string proc_self_dirname()
{
return "/";
std::string proc_self_dirname()
{
return "/";
@@
-815,7
+824,7
@@
std::string proc_self_dirname()
#error "Don't know how to determine process executable base path!"
#endif
#error "Don't know how to determine process executable base path!"
#endif
-#if
def EMSCRIPTEN
+#if
defined(EMSCRIPTEN) || defined(__wasm)
std::string proc_share_dirname()
{
return "/share/";
std::string proc_share_dirname()
{
return "/share/";
@@
-835,7
+844,7
@@
std::string proc_share_dirname()
std::string proc_share_path = proc_self_path + "share/";
if (check_file_exists(proc_share_path, true))
return proc_share_path;
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/";
+ proc_share_path = proc_self_path + "../share/
" + proc_program_prefix()+ "
yosys/";
if (check_file_exists(proc_share_path, true))
return proc_share_path;
# ifdef YOSYS_DATDIR
if (check_file_exists(proc_share_path, true))
return proc_share_path;
# ifdef YOSYS_DATDIR
@@
-848,6
+857,15
@@
std::string proc_share_dirname()
}
#endif
}
#endif
+std::string proc_program_prefix()
+{
+ std::string program_prefix;
+#ifdef YOSYS_PROGRAM_PREFIX
+ program_prefix = YOSYS_PROGRAM_PREFIX;
+#endif
+ return program_prefix;
+}
+
bool fgetline(FILE *f, std::string &buffer)
{
buffer = "";
bool fgetline(FILE *f, std::string &buffer)
{
buffer = "";
@@
-1034,6
+1052,8
@@
void run_backend(std::string filename, std::string command, RTLIL::Design *desig
command = "verilog";
else if (filename.size() > 3 && filename.compare(filename.size()-3, std::string::npos, ".il") == 0)
command = "ilang";
command = "verilog";
else if (filename.size() > 3 && filename.compare(filename.size()-3, std::string::npos, ".il") == 0)
command = "ilang";
+ else if (filename.size() > 3 && filename.compare(filename.size()-3, std::string::npos, ".cc") == 0)
+ command = "cxxrtl";
else if (filename.size() > 4 && filename.compare(filename.size()-4, std::string::npos, ".aig") == 0)
command = "aiger";
else if (filename.size() > 5 && filename.compare(filename.size()-5, std::string::npos, ".blif") == 0)
else if (filename.size() > 4 && filename.compare(filename.size()-4, std::string::npos, ".aig") == 0)
command = "aiger";
else if (filename.size() > 5 && filename.compare(filename.size()-5, std::string::npos, ".blif") == 0)