From 4df902637a3b486ab4836ddc2bde7889c6dccfeb Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 17 Oct 2014 12:04:40 +0200 Subject: [PATCH] Various MXE build fixes --- kernel/driver.cc | 2 +- kernel/yosys.cc | 21 +++++++++++++++++---- kernel/yosys.h | 11 +++++------ passes/cmds/plugin.cc | 7 +++++-- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/kernel/driver.cc b/kernel/driver.cc index 7f2cdb325..7a3cd1a1a 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -30,7 +30,7 @@ #include #include -#ifndef _WIN32 +#if !defined(_WIN32) || defined(__MINGW32__) # include #endif diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 9c1cb58f3..ed90a6f33 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -30,6 +30,7 @@ #ifdef _WIN32 # include +# include #elif defined(__APPLE__) # include #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 e4465edf7..562cec121 100644 --- a/kernel/yosys.h +++ b/kernel/yosys.h @@ -70,8 +70,10 @@ // a few platform specific things #ifdef _WIN32 -# define NOMINMAX -# include +# ifndef NOMINMAX +# define NOMINMAX 1 +# endif +# include # include // takes care of a number of typedefs # include # include @@ -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 process_line = std::function()); 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 int GetSize(const T &obj) { return obj.size(); } diff --git a/passes/cmds/plugin.cc b/passes/cmds/plugin.cc index da597ac45..f7c65bbde 100644 --- a/passes/cmds/plugin.cc +++ b/passes/cmds/plugin.cc @@ -28,9 +28,9 @@ YOSYS_NAMESPACE_BEGIN std::map loaded_plugins; std::map loaded_plugin_aliases; +#ifdef YOSYS_ENABLE_PLUGINS void load_plugin(std::string filename, std::vector 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 aliases) for (auto &alias : aliases) loaded_plugin_aliases[alias] = filename; +} #else +void load_plugin(std::string, std::vector) +{ 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") { } -- 2.30.2