summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/driver.cc2
-rw-r--r--kernel/yosys.cc21
-rw-r--r--kernel/yosys.h11
3 files changed, 23 insertions, 11 deletions
diff --git a/kernel/driver.cc b/kernel/driver.cc
index 7f2cdb32..7a3cd1a1 100644
--- a/kernel/driver.cc
+++ b/kernel/driver.cc
@@ -30,7 +30,7 @@
#include <limits.h>
#include <errno.h>
-#ifndef _WIN32
+#if !defined(_WIN32) || defined(__MINGW32__)
# include <unistd.h>
#endif
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index 9c1cb58f..ed90a6f3 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -30,6 +30,7 @@
#ifdef _WIN32
# include <windows.h>
+# include <io.h>
#elif defined(__APPLE__)
# include <mach-o/dyld.h>
#else
@@ -44,7 +45,7 @@
YOSYS_NAMESPACE_BEGIN
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__MINGW32__)
const char *yosys_version_str = "Windows";
#endif
@@ -224,7 +225,7 @@ std::string make_temp_file(std::string template_str)
x ^= x << 13, x ^= x >> 17, x ^= x << 5;
template_str[pos+i] = y[x % y.size()];
}
- if (access(template_str.c_str(), F_OK) != 0)
+ if (_access(template_str.c_str(), 0) != 0)
break;
}
#else
@@ -265,6 +266,18 @@ std::string make_temp_dir(std::string template_str)
#endif
}
+#ifdef _WIN32
+bool check_file_exists(std::string filename, bool)
+{
+ return _access(filename.c_str(), 0);
+}
+#else
+bool check_file_exists(std::string filename, bool is_exec)
+{
+ return access(filename.c_str(), is_exec ? X_OK : F_OK);
+}
+#endif
+
void remove_directory(std::string dirname)
{
#ifdef _WIN32
@@ -484,10 +497,10 @@ std::string proc_share_dirname()
{
std::string proc_self_path = proc_self_dirname();
std::string proc_share_path = proc_self_path + "share/";
- if (access(proc_share_path.c_str(), X_OK) == 0)
+ if (check_file_exists(proc_share_path, true) == 0)
return proc_share_path;
proc_share_path = proc_self_path + "../share/yosys/";
- if (access(proc_share_path.c_str(), X_OK) == 0)
+ if (check_file_exists(proc_share_path, true) == 0)
return proc_share_path;
log_error("proc_share_dirname: unable to determine share/ directory!\n");
}
diff --git a/kernel/yosys.h b/kernel/yosys.h
index e4465edf..562cec12 100644
--- a/kernel/yosys.h
+++ b/kernel/yosys.h
@@ -70,8 +70,10 @@
// a few platform specific things
#ifdef _WIN32
-# define NOMINMAX
-# include <Windows.h>
+# ifndef NOMINMAX
+# define NOMINMAX 1
+# endif
+# include <windows.h>
# include <stdint.h> // takes care of a number of typedefs
# include <io.h>
# include <direct.h>
@@ -80,15 +82,11 @@
# define strtok_r strtok_s
# define strdup _strdup
# define snprintf _snprintf
-# define access _access
# define getcwd _getcwd
# define mkdir _mkdir
# define popen _popen
# define pclose _pclose
-
# define PATH_MAX MAX_PATH
-# define F_OK 00
-# define X_OK 00 // note this is NOT correct as there is no execute flag in Windows
#endif
@@ -130,6 +128,7 @@ bool patmatch(const char *pattern, const char *string);
int run_command(const std::string &command, std::function<void(const std::string&)> process_line = std::function<void(const std::string&)>());
std::string make_temp_file(std::string template_str = "/tmp/yosys_XXXXXX");
std::string make_temp_dir(std::string template_str = "/tmp/yosys_XXXXXX");
+bool check_file(std::string filename, bool is_exec = false);
void remove_directory(std::string dirname);
template<typename T> int GetSize(const T &obj) { return obj.size(); }