Various MXE build fixes
authorClifford Wolf <clifford@clifford.at>
Fri, 17 Oct 2014 10:04:40 +0000 (12:04 +0200)
committerClifford Wolf <clifford@clifford.at>
Fri, 17 Oct 2014 10:04:40 +0000 (12:04 +0200)
kernel/driver.cc
kernel/yosys.cc
kernel/yosys.h
passes/cmds/plugin.cc

index 7f2cdb325169ca2748334df9fc9a252953849ab4..7a3cd1a1aa434f456d1e2eb1ebb9ceb7f8e892dd 100644 (file)
@@ -30,7 +30,7 @@
 #include <limits.h>
 #include <errno.h>
 
-#ifndef _WIN32
+#if !defined(_WIN32) || defined(__MINGW32__)
 #  include <unistd.h>
 #endif
 
index 9c1cb58f394c684699e592b6babf08fc843054a0..ed90a6f3303898d2f3f71f32e14ac223ee3aba05 100644 (file)
@@ -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");
 }
index e4465edf7295d6966ca6ef7f7bfbc2ff99ad6a9c..562cec12166d446f4193ebe3d27bd1080c8bdfb9 100644 (file)
 
 // 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>
 #  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(); }
index da597ac45c4dcc4abeb7e79732cb1e749ea15ddc..f7c65bbdeefd1f17444b8a8e74d72b64196d2b46 100644 (file)
@@ -28,9 +28,9 @@ YOSYS_NAMESPACE_BEGIN
 std::map<std::string, void*> loaded_plugins;
 std::map<std::string, std::string> loaded_plugin_aliases;
 
+#ifdef YOSYS_ENABLE_PLUGINS
 void load_plugin(std::string filename, std::vector<std::string> aliases)
 {
-#ifdef YOSYS_ENABLE_PLUGINS
        if (filename.find('/') == std::string::npos)
                filename = "./" + filename;
 
@@ -44,10 +44,13 @@ void load_plugin(std::string filename, std::vector<std::string> aliases)
 
        for (auto &alias : aliases)
                loaded_plugin_aliases[alias] = filename;
+}
 #else
+void load_plugin(std::string, std::vector<std::string>)
+{
        log_error("This version of yosys is built without plugin support.\n");
-#endif
 }
+#endif
 
 struct PluginPass : public Pass {
        PluginPass() : Pass("plugin", "load and list loaded plugins") { }