Updated ABC
authorClifford Wolf <clifford@clifford.at>
Thu, 13 Feb 2014 17:56:36 +0000 (18:56 +0100)
committerClifford Wolf <clifford@clifford.at>
Thu, 13 Feb 2014 17:56:36 +0000 (18:56 +0100)
Makefile
passes/abc/abc.cc

index 72bd6d1eef7fe773a7a353012eaa2233f21ae88a..89e4a9154a441c6171f94ef464d2c3447ce9b82e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,7 +37,7 @@ OBJS = kernel/version_$(GIT_REV).o
 # is just a symlink to your actual ABC working directory, as 'make mrproper'
 # will remove the 'abc' directory and you do not want to accidentally
 # delete your work on ABC..
-ABCREV = d7d412483aa9
+ABCREV = 2058c8ccea68
 ABCPULL = 1
 
 -include Makefile.conf
index dae3a22fcebcaa88df21ae9dd387c23af43a970a..eaecb79106ad6b02dc2be6db1410f29491630e08 100644 (file)
@@ -640,9 +640,32 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
                f = popen(buffer.c_str(), "r");
                if (f == NULL)
                        log_error("Opening pipe to `%s' for reading failed: %s\n", buffer.c_str(), strerror(errno));
+#if 0
                char logbuf[1024];
                while (fgets(logbuf, 1024, f) != NULL)
                        log("ABC: %s", logbuf);
+#else
+               bool got_cr = false;
+               std::string linebuf;
+               char logbuf[1024];
+               while (fgets(logbuf, 1024, f) != NULL)
+                       for (char *p = logbuf; *p; p++) {
+                               if (*p == '\r') {
+                                       got_cr = true;
+                                       continue;
+                               }
+                               if (*p == '\n') {
+                                       log("ABC: %s\n", linebuf.c_str());
+                                       got_cr = false, linebuf.clear();
+                                       continue;
+                               }
+                               if (got_cr)
+                                       got_cr = false, linebuf.clear();
+                               linebuf += *p;
+                       }
+               if (!linebuf.empty())
+                       log("ABC: %s\n", linebuf.c_str());
+#endif
                errno = 0;
                int ret = pclose(f);
                if (ret < 0)