From: Clifford Wolf Date: Fri, 17 Oct 2014 13:51:33 +0000 (+0200) Subject: More win32 (mxe and vs) build fixes X-Git-Tag: yosys-0.4~37 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b3a6f8f53019d1984d4e319db459b11da0663aa3;p=yosys.git More win32 (mxe and vs) build fixes --- diff --git a/Makefile b/Makefile index e1c91eaf7..c500e655e 100644 --- a/Makefile +++ b/Makefile @@ -324,8 +324,9 @@ ifeq ($(ENABLE_ABC),1) endif echo -en 'This is Yosys $(YOSYS_VER) for Win32.\r\n' > yosys-win32-$(YOSYS_VER)/readme.txt echo -en 'Documentation at http://www.clifford.at/yosys/.\r\n' >> yosys-win32-$(YOSYS_VER)/readme.txt - find backends frontends kernel libs passes techlibs -name '*.d' | xargs sed -e 's,^[^ ]*:,,; s, ,\n,g; s, *\\,,;' \ - -e 's,/[^/]*/\.\./,/,g; s,'"$PWD/"',,' | sort -u | sed '/^[^/]/ ! d; s,$,\r,;' > srcfiles.txt + find backends frontends kernel libs passes techlibs -name '*.d' | xargs + sed -e 's,^[^ ]*:,,; s, ,\n,g; s, *\\,,; s,/[^/]*/\.\./,/,g; s,'"$$PWD/"',,' $(addsuffix .d,$(basename $(OBJS))) \ + | sort -u | sed '/^[^/]/ ! d; s,$$,\r,;' > srcfiles.txt zip yosys-win32-$(YOSYS_VER)/genfiles.zip $(GENFILES) srcfiles.txt zip -r yosys-win32-$(YOSYS_VER).zip yosys-win32-$(YOSYS_VER)/ rm -f srcfiles.txt diff --git a/kernel/driver.cc b/kernel/driver.cc index 7a3cd1a1a..5e69cced3 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -32,6 +32,36 @@ #if !defined(_WIN32) || defined(__MINGW32__) # include +#else +char *optarg; +int optind = 1, optcur = 1; +int getopt(int argc, char **argv, const char *optstring) +{ + if (optind >= argc || argv[optind][0] != '-') + return -1; + + bool takes_arg = false; + int opt = argv[optind][optcur]; + for (int i = 0; optstring[i]; i++) + if (opt == optstring[i] && optstring[i + 1] == ':') + takes_arg = true; + + if (!takes_arg) { + if (argv[optind][++optcur] == 0) + optind++, optcur = 1; + return opt; + } + + if (argv[optind][++optcur]) { + optarg = argv[optind++] + optcur; + optcur = 1; + return opt; + } + + optarg = argv[++optind]; + optind++, optcur = 1; + return opt; +} #endif diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 26665e5b2..7d1d273cb 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -46,7 +46,7 @@ YOSYS_NAMESPACE_BEGIN #if defined(_WIN32) && !defined(__MINGW32__) -const char *yosys_version_str = "Windows"; +const char *yosys_version_str = "Yosys for Windows (Version Information Unavailable)"; #endif int autoidx = 1; @@ -210,9 +210,19 @@ std::string make_temp_file(std::string template_str) { #ifdef _WIN32 if (template_str.rfind("/tmp/", 0) == 0) { - char path[MAX_PATH+1]; - GetTempPath(MAX_PATH+1, path); - template_str = stringf("%s\\%s", path, template_str.c_str() + 5); +# ifdef __MINGW32__ + char longpath[MAX_PATH + 1]; + char shortpath[MAX_PATH + 1]; +# else + WCHAR longpath[MAX_PATH + 1]; + TCHAR shortpath[MAX_PATH + 1]; +# endif + if (!GetTempPath(MAX_PATH+1, longpath)) + 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); } size_t pos = template_str.rfind("XXXXXX"); @@ -475,14 +485,24 @@ std::string proc_self_dirname() #elif defined(_WIN32) std::string proc_self_dirname() { - char longpath[MAX_PATH+1], shortpath[MAX_PATH+1]; + int i = 0; +# ifdef __MINGW32__ + char longpath[MAX_PATH + 1]; + char shortpath[MAX_PATH + 1]; +# else + WCHAR longpath[MAX_PATH + 1]; + TCHAR shortpath[MAX_PATH + 1]; +# endif if (!GetModuleFileName(0, longpath, MAX_PATH+1)) log_error("GetModuleFileName() failed.\n"); if (!GetShortPathName(longpath, shortpath, MAX_PATH+1)) log_error("GetShortPathName() failed.\n"); - for (int i = strlen(shortpath)-1; i >= 0 && shortpath[i] != '/' && shortpath[i] != '\\' ; i--) - shortpath[i] = 0; - return std::string(shortpath); + while (shortpath[i] != 0) + i++; + while (i > 0 && shortpath[i-1] != '/' && shortpath[i-1] != '\\') + shortpath[--i] = 0; + log_assert(sizeof(TCHAR) == sizeof(char)); + return std::string((char*)shortpath); } #elif defined(EMSCRIPTEN) std::string proc_self_dirname() diff --git a/kernel/yosys.h b/kernel/yosys.h index a0a42be9b..b9182c1df 100644 --- a/kernel/yosys.h +++ b/kernel/yosys.h @@ -60,9 +60,9 @@ #include #ifndef _YOSYS_ -# error It looks like you are trying to build Yosys with the config defines set. \ +# error It looks like you are trying to build Yosys without the config defines set. \ When building Yosys with a custom make system, make sure you set all the \ - defines the Yosys Makefile would set for your build configuration. + defines the Yosys Makefile would set for your build configuration. #endif #ifdef YOSYS_ENABLE_TCL @@ -74,8 +74,6 @@ # define NOMINMAX 1 # undef YY_NO_UNISTD_H # define YY_NO_UNISTD_H 1 -# undef _CRT_SECURE_NO_WARNINGS -# define _CRT_SECURE_NO_WARNINGS 1 # include # include @@ -89,6 +87,11 @@ # define popen _popen # define pclose _pclose # define PATH_MAX MAX_PATH + +# ifndef __MINGW32__ +# define isatty _isatty +# define fileno _fileno +# endif #endif #define PRIVATE_NAMESPACE_BEGIN namespace { diff --git a/libs/ezsat/ezsat.cc b/libs/ezsat/ezsat.cc index 54a6e9c71..657bed9d2 100644 --- a/libs/ezsat/ezsat.cc +++ b/libs/ezsat/ezsat.cc @@ -22,12 +22,24 @@ #include #include #include +#include #include const int ezSAT::CONST_TRUE = 1; const int ezSAT::CONST_FALSE = 2; +static std::string my_int_to_string(int i) +{ +#ifdef __MINGW32__ + char buffer[64]; + snprintf(buffer, 64, "%d", i); + return buffer; +#else + return std::to_string(i); +#endif +} + ezSAT::ezSAT() { flag_keep_cnf = false; @@ -183,7 +195,7 @@ int ezSAT::expression(OpId op, const std::vector &args) if (expressionsCache.count(myExpr) > 0) { id = expressionsCache.at(myExpr); } else { - id = -(expressions.size() + 1); + id = -(int(expressions.size()) + 1); expressionsCache[myExpr] = id; expressions.push_back(myExpr); } @@ -490,13 +502,13 @@ int ezSAT::bound(int id) const std::string ezSAT::cnfLiteralInfo(int idx) const { - for (size_t i = 0; i < cnfLiteralVariables.size(); i++) { + for (int i = 0; i < int(cnfLiteralVariables.size()); i++) { if (cnfLiteralVariables[i] == idx) return to_string(i+1); if (cnfLiteralVariables[i] == -idx) return "NOT " + to_string(i+1); } - for (size_t i = 0; i < cnfExpressionVariables.size(); i++) { + for (int i = 0; i < int(cnfExpressionVariables.size()); i++) { if (cnfExpressionVariables[i] == idx) return to_string(-i-1); if (cnfExpressionVariables[i] == -idx) @@ -670,9 +682,7 @@ std::vector ezSAT::vec_var(std::string name, int numBits) { std::vector vec; for (int i = 0; i < numBits; i++) { - char buf[64]; - snprintf(buf, 64, " [%d]", i); - vec.push_back(VAR(name + buf)); + vec.push_back(VAR(name + my_int_to_string(i))); } return vec; } @@ -1245,11 +1255,8 @@ static std::string expression2str(const std::pair> #undef X } text += ":"; - for (auto it : data.second) { - char buf[64]; - snprintf(buf, 64, " %d", it); - text += buf; - } + for (auto it : data.second) + text += " " + my_int_to_string(it); return text; }