aboutsummaryrefslogtreecommitdiffstats
path: root/passes/cmds/cover.cc
diff options
context:
space:
mode:
Diffstat (limited to 'passes/cmds/cover.cc')
-rw-r--r--passes/cmds/cover.cc25
1 files changed, 19 insertions, 6 deletions
diff --git a/passes/cmds/cover.cc b/passes/cmds/cover.cc
index ac72ba53a..5644066af 100644
--- a/passes/cmds/cover.cc
+++ b/passes/cmds/cover.cc
@@ -17,14 +17,22 @@
*
*/
+#include "kernel/yosys.h"
#include <sys/types.h>
-#include <unistd.h>
-#include <fnmatch.h>
+
+#ifndef _WIN32
+# include <unistd.h>
+#else
+# include <io.h>
+#endif
#include "kernel/register.h"
#include "kernel/rtlil.h"
#include "kernel/log.h"
+USING_YOSYS_NAMESPACE
+PRIVATE_NAMESPACE_BEGIN
+
struct CoverPass : public Pass {
CoverPass() : Pass("cover", "print code coverage counters") { }
virtual void help()
@@ -72,7 +80,7 @@ struct CoverPass : public Pass {
log(" printf \"%%-60s %%10d %%s\\n\", p[i], c[i], i; }' {files} | sort -k3\n");
log("\n");
log("\n");
- log("Coverage counters are only available in debug builds of Yosys for Linux.\n");
+ log("Coverage counters are only available in Yosys for Linux.\n");
log("\n");
}
virtual void execute(std::vector<std::string> args, RTLIL::Design *design)
@@ -92,9 +100,13 @@ struct CoverPass : public Pass {
const char *open_mode = args[argidx] == "-a" ? "a+" : "w";
std::string filename = args[++argidx];
if (args[argidx-1] == "-d") {
+ #ifdef _WIN32
+ log_cmd_error("The 'cover -d' option is not supported on win32.\n");
+ #else
char filename_buffer[4096];
snprintf(filename_buffer, 4096, "%s/yosys_cover_%d_XXXXXX.txt", filename.c_str(), getpid());
filename = mkstemps(filename_buffer, 4);
+ #endif
}
FILE *f = fopen(filename.c_str(), open_mode);
if (f == NULL) {
@@ -116,11 +128,11 @@ struct CoverPass : public Pass {
log("\n");
}
-#ifdef COVER_ACTIVE
+#if defined(YOSYS_ENABLE_COVER) && defined(__linux__)
for (auto &it : get_coverage_data()) {
if (!patterns.empty()) {
for (auto &p : patterns)
- if (!fnmatch(p.c_str(), it.first.c_str(), 0))
+ if (patmatch(p.c_str(), it.first.c_str()))
goto pattern_match;
continue;
}
@@ -134,7 +146,7 @@ struct CoverPass : public Pass {
for (auto f : out_files)
fclose(f);
- log_cmd_error("Coverage counters are only available in debug builds of Yosys for Linux.\n");
+ log_cmd_error("This version of Yosys was not built with support for code coverage counters.\n");
#endif
for (auto f : out_files)
@@ -142,3 +154,4 @@ struct CoverPass : public Pass {
}
} CoverPass;
+PRIVATE_NAMESPACE_END