More win32 (mxe and vs) build fixes
authorClifford Wolf <clifford@clifford.at>
Fri, 17 Oct 2014 13:51:33 +0000 (15:51 +0200)
committerClifford Wolf <clifford@clifford.at>
Fri, 17 Oct 2014 14:04:59 +0000 (16:04 +0200)
Makefile
kernel/driver.cc
kernel/yosys.cc
kernel/yosys.h
libs/ezsat/ezsat.cc

index e1c91eaf7524d401a82ec94466878993b12c27b2..c500e655ec72bcda72706223e7aacf65e872b08b 100644 (file)
--- 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
index 7a3cd1a1aa434f456d1e2eb1ebb9ceb7f8e892dd..5e69cced3a9eb66c3d3a32a76389ef21402e7906 100644 (file)
 
 #if !defined(_WIN32) || defined(__MINGW32__)
 #  include <unistd.h>
+#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
 
 
index 26665e5b22642b89f2e0d94df83a5c401382f8a7..7d1d273cbf323af15afce54e8e0689f60d20a040 100644 (file)
@@ -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()
index a0a42be9be6fe94d36463adf6421a8adb2e449f6..b9182c1dfd85f3fbcea27c83a66de2b1dc401943 100644 (file)
@@ -60,9 +60,9 @@
 #include <stdio.h>
 
 #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 <windows.h>
 #  include <io.h>
 #  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 {
index 54a6e9c7110facba71f1aaef626a57f180595b50..657bed9d250c30ae99167e89a04b37af58b967df 100644 (file)
 #include <cmath>
 #include <algorithm>
 #include <cassert>
+#include <string>
 
 #include <stdlib.h>
 
 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<int> &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<int> ezSAT::vec_var(std::string name, int numBits)
 {
        std::vector<int> 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<ezSAT::OpId, std::vector<int>>
 #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;
 }