aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--frontends/ilang/.gitignore8
-rw-r--r--frontends/ilang/Makefile.inc22
-rw-r--r--frontends/ilang/ilang_lexer.l (renamed from frontends/ilang/lexer.l)8
-rw-r--r--frontends/ilang/ilang_parser.y (renamed from frontends/ilang/parser.y)0
-rw-r--r--frontends/verilog/.gitignore8
-rw-r--r--frontends/verilog/Makefile.inc24
-rw-r--r--frontends/verilog/preproc.cc8
-rw-r--r--frontends/verilog/verilog_lexer.l (renamed from frontends/verilog/lexer.l)8
-rw-r--r--frontends/verilog/verilog_parser.y (renamed from frontends/verilog/parser.y)0
-rw-r--r--kernel/log.cc25
-rw-r--r--kernel/log.h12
-rw-r--r--kernel/rtlil.h6
-rw-r--r--kernel/yosys.cc16
-rw-r--r--kernel/yosys.h11
-rw-r--r--libs/sha1/sha1.cpp5
-rw-r--r--passes/cmds/write_file.cc9
-rw-r--r--passes/fsm/fsm_opt.cc2
-rw-r--r--passes/opt/wreduce.cc4
18 files changed, 105 insertions, 71 deletions
diff --git a/frontends/ilang/.gitignore b/frontends/ilang/.gitignore
index 72b06b0bf..43106a814 100644
--- a/frontends/ilang/.gitignore
+++ b/frontends/ilang/.gitignore
@@ -1,4 +1,4 @@
-lexer.cc
-parser.output
-parser.tab.cc
-parser.tab.h
+ilang_lexer.cc
+ilang_parser.output
+ilang_parser.tab.cc
+ilang_parser.tab.h
diff --git a/frontends/ilang/Makefile.inc b/frontends/ilang/Makefile.inc
index e832cfed8..984d436c6 100644
--- a/frontends/ilang/Makefile.inc
+++ b/frontends/ilang/Makefile.inc
@@ -1,18 +1,18 @@
-GENFILES += frontends/ilang/parser.tab.cc
-GENFILES += frontends/ilang/parser.tab.h
-GENFILES += frontends/ilang/parser.output
-GENFILES += frontends/ilang/lexer.cc
+GENFILES += frontends/ilang/ilang_parser.tab.cc
+GENFILES += frontends/ilang/ilang_parser.tab.h
+GENFILES += frontends/ilang/ilang_parser.output
+GENFILES += frontends/ilang/ilang_lexer.cc
-frontends/ilang/parser.tab.cc: frontends/ilang/parser.y
- $(P) bison -d -r all -b frontends/ilang/parser frontends/ilang/parser.y
- $(Q) mv frontends/ilang/parser.tab.c frontends/ilang/parser.tab.cc
+frontends/ilang/ilang_parser.tab.cc: frontends/ilang/ilang_parser.y
+ $(P) bison -d -r all -b frontends/ilang/ilang_parser frontends/ilang/ilang_parser.y
+ $(Q) mv frontends/ilang/ilang_parser.tab.c frontends/ilang/ilang_parser.tab.cc
-frontends/ilang/parser.tab.h: frontends/ilang/parser.tab.cc
+frontends/ilang/ilang_parser.tab.h: frontends/ilang/ilang_parser.tab.cc
-frontends/ilang/lexer.cc: frontends/ilang/lexer.l
- $(P) flex -o frontends/ilang/lexer.cc frontends/ilang/lexer.l
+frontends/ilang/ilang_lexer.cc: frontends/ilang/ilang_lexer.l
+ $(P) flex -o frontends/ilang/ilang_lexer.cc frontends/ilang/ilang_lexer.l
-OBJS += frontends/ilang/parser.tab.o frontends/ilang/lexer.o
+OBJS += frontends/ilang/ilang_parser.tab.o frontends/ilang/ilang_lexer.o
OBJS += frontends/ilang/ilang_frontend.o
diff --git a/frontends/ilang/lexer.l b/frontends/ilang/ilang_lexer.l
index 9669f0924..dcbc6b6d7 100644
--- a/frontends/ilang/lexer.l
+++ b/frontends/ilang/ilang_lexer.l
@@ -30,12 +30,16 @@
#endif
#include "ilang_frontend.h"
-#include "parser.tab.h"
+#include "ilang_parser.tab.h"
USING_YOSYS_NAMESPACE
#define YY_INPUT(buf,result,max_size) \
- result = readsome(*ILANG_FRONTEND::lexin, buf, max_size);
+ do { \
+ ILANG_FRONTEND::lexin->read(buf, max_size-1); \
+ result = ILANG_FRONTEND::lexin->gcount(); \
+ if (result >= 0) buf[result] = '\0'; \
+ } while (0)
%}
diff --git a/frontends/ilang/parser.y b/frontends/ilang/ilang_parser.y
index a5cc06898..a5cc06898 100644
--- a/frontends/ilang/parser.y
+++ b/frontends/ilang/ilang_parser.y
diff --git a/frontends/verilog/.gitignore b/frontends/verilog/.gitignore
index 72b06b0bf..1d4ae9e5c 100644
--- a/frontends/verilog/.gitignore
+++ b/frontends/verilog/.gitignore
@@ -1,4 +1,4 @@
-lexer.cc
-parser.output
-parser.tab.cc
-parser.tab.h
+verilog_lexer.cc
+verilog_parser.output
+verilog_parser.tab.cc
+verilog_parser.tab.h
diff --git a/frontends/verilog/Makefile.inc b/frontends/verilog/Makefile.inc
index 49eb320ec..1b6854bb5 100644
--- a/frontends/verilog/Makefile.inc
+++ b/frontends/verilog/Makefile.inc
@@ -1,20 +1,20 @@
-GENFILES += frontends/verilog/parser.tab.cc
-GENFILES += frontends/verilog/parser.tab.h
-GENFILES += frontends/verilog/parser.output
-GENFILES += frontends/verilog/lexer.cc
+GENFILES += frontends/verilog/verilog_parser.tab.cc
+GENFILES += frontends/verilog/verilog_parser.tab.h
+GENFILES += frontends/verilog/verilog_parser.output
+GENFILES += frontends/verilog/verilog_lexer.cc
-frontends/verilog/parser.tab.cc: frontends/verilog/parser.y
- $(P) bison -d -r all -b frontends/verilog/parser frontends/verilog/parser.y
- $(Q) mv frontends/verilog/parser.tab.c frontends/verilog/parser.tab.cc
+frontends/verilog/verilog_parser.tab.cc: frontends/verilog/verilog_parser.y
+ $(P) bison -d -r all -b frontends/verilog/verilog_parser frontends/verilog/verilog_parser.y
+ $(Q) mv frontends/verilog/verilog_parser.tab.c frontends/verilog/verilog_parser.tab.cc
-frontends/verilog/parser.tab.h: frontends/verilog/parser.tab.cc
+frontends/verilog/verilog_parser.tab.h: frontends/verilog/verilog_parser.tab.cc
-frontends/verilog/lexer.cc: frontends/verilog/lexer.l
- $(P) flex -o frontends/verilog/lexer.cc frontends/verilog/lexer.l
+frontends/verilog/verilog_lexer.cc: frontends/verilog/verilog_lexer.l
+ $(P) flex -o frontends/verilog/verilog_lexer.cc frontends/verilog/verilog_lexer.l
-OBJS += frontends/verilog/parser.tab.o
-OBJS += frontends/verilog/lexer.o
+OBJS += frontends/verilog/verilog_parser.tab.o
+OBJS += frontends/verilog/verilog_lexer.o
OBJS += frontends/verilog/preproc.o
OBJS += frontends/verilog/verilog_frontend.o
OBJS += frontends/verilog/const2ast.o
diff --git a/frontends/verilog/preproc.cc b/frontends/verilog/preproc.cc
index b4e77c31b..da658410d 100644
--- a/frontends/verilog/preproc.cc
+++ b/frontends/verilog/preproc.cc
@@ -196,14 +196,16 @@ static std::string next_token(bool pass_newline = false)
static void input_file(std::istream &f, std::string filename)
{
char buffer[513];
- int rc;
insert_input("");
auto it = input_buffer.begin();
input_buffer.insert(it, "`file_push " + filename + "\n");
- while ((rc = readsome(f, buffer, sizeof(buffer)-1)) > 0) {
- buffer[rc] = 0;
+ while (1) {
+ f.read(buffer, sizeof(buffer)-1);
+ if (f.gcount() <= 0)
+ break;
+ buffer[f.gcount()] = 0;
input_buffer.insert(it, buffer);
}
input_buffer.insert(it, "\n`file_pop\n");
diff --git a/frontends/verilog/lexer.l b/frontends/verilog/verilog_lexer.l
index 98f360885..0d28e2e7f 100644
--- a/frontends/verilog/lexer.l
+++ b/frontends/verilog/verilog_lexer.l
@@ -42,7 +42,7 @@
#include "kernel/log.h"
#include "verilog_frontend.h"
#include "frontends/ast/ast.h"
-#include "parser.tab.h"
+#include "verilog_parser.tab.h"
USING_YOSYS_NAMESPACE
using namespace AST;
@@ -64,7 +64,11 @@ YOSYS_NAMESPACE_END
return TOK_ID;
#define YY_INPUT(buf,result,max_size) \
- result = readsome(*lexin, buf, max_size);
+ do { \
+ lexin->read(buf, max_size-1); \
+ result = lexin->gcount(); \
+ if (result >= 0) buf[result] = '\0'; \
+ } while (0)
%}
diff --git a/frontends/verilog/parser.y b/frontends/verilog/verilog_parser.y
index cf02a56a9..cf02a56a9 100644
--- a/frontends/verilog/parser.y
+++ b/frontends/verilog/verilog_parser.y
diff --git a/kernel/log.cc b/kernel/log.cc
index 87a75410d..2cae6a636 100644
--- a/kernel/log.cc
+++ b/kernel/log.cc
@@ -21,7 +21,10 @@
#include "libs/sha1/sha1.h"
#include "backends/ilang/ilang_backend.h"
-#include <sys/time.h>
+#ifndef _WIN32
+# include <sys/time.h>
+#endif
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -48,6 +51,26 @@ static struct timeval initial_tv = { 0, 0 };
static bool next_print_log = false;
static int log_newline_count = 0;
+#ifdef _WIN32
+// this will get time information and return it in timeval, simulating gettimeofday()
+int gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+ LARGE_INTEGER counter;
+ LARGE_INTEGER freq;
+
+ QueryPerformanceFrequency(&freq);
+ QueryPerformanceCounter(&counter);
+
+ counter.QuadPart *= 1000000;
+ counter.QuadPart /= freq.QuadPart;
+
+ tv->tv_sec = counter.QuadPart / 1000000;
+ tv->tv_usec = counter.QuadPart % 1000000;
+
+ return 0;
+}
+#endif
+
void logv(const char *format, va_list ap)
{
while (format[0] == '\n' && format[1] != 0) {
diff --git a/kernel/log.h b/kernel/log.h
index b4182b5f3..904ba4759 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -23,9 +23,9 @@
#define LOG_H
#include <time.h>
-#include <sys/time.h>
#ifndef _WIN32
+# include <sys/time.h>
# include <sys/resource.h>
#endif
@@ -51,12 +51,12 @@ extern int log_verbose_level;
void logv(const char *format, va_list ap);
void logv_header(const char *format, va_list ap);
-void logv_error(const char *format, va_list ap) __attribute__ ((noreturn));
-void log(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
-void log_header(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
-void log_error(const char *format, ...) __attribute__ ((format (printf, 1, 2))) __attribute__ ((noreturn));
-void log_cmd_error(const char *format, ...) __attribute__ ((format (printf, 1, 2))) __attribute__ ((noreturn));
+void logv_error(const char *format, va_list ap) __attribute__((noreturn));
+void log(const char *format, ...) __attribute__((format(printf, 1, 2)));
+void log_header(const char *format, ...) __attribute__((format(printf, 1, 2)));
+void log_error(const char *format, ...) __attribute__((format(printf, 1, 2))) __attribute__((noreturn));
+void log_cmd_error(const char *format, ...) __attribute__((format(printf, 1, 2))) __attribute__((noreturn));
void log_spacer();
void log_push();
diff --git a/kernel/rtlil.h b/kernel/rtlil.h
index 8df0bfe19..5629c8652 100644
--- a/kernel/rtlil.h
+++ b/kernel/rtlil.h
@@ -920,23 +920,25 @@ struct RTLIL::SigBit
}
};
-struct RTLIL::SigSpecIterator
+struct RTLIL::SigSpecIterator : public std::iterator<std::input_iterator_tag, RTLIL::SigSpec>
{
RTLIL::SigSpec *sig_p;
int index;
inline RTLIL::SigBit &operator*() const;
inline bool operator!=(const RTLIL::SigSpecIterator &other) const { return index != other.index; }
+ inline bool operator==(const RTLIL::SigSpecIterator &other) const { return index == other.index; }
inline void operator++() { index++; }
};
-struct RTLIL::SigSpecConstIterator
+struct RTLIL::SigSpecConstIterator : public std::iterator<std::input_iterator_tag, RTLIL::SigSpec>
{
const RTLIL::SigSpec *sig_p;
int index;
inline const RTLIL::SigBit &operator*() const;
inline bool operator!=(const RTLIL::SigSpecConstIterator &other) const { return index != other.index; }
+ inline bool operator==(const RTLIL::SigSpecIterator &other) const { return index == other.index; }
inline void operator++() { index++; }
};
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index e50bfcbe6..ba3049c53 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -172,22 +172,6 @@ bool patmatch(const char *pattern, const char *string)
return false;
}
-int readsome(std::istream &f, char *s, int n)
-{
- int rc = f.readsome(s, n);
-
- // win32 sometimes returns 0 on a non-empty stream..
- if (rc == 0) {
- int c = f.get();
- if (c != EOF) {
- *s = c;
- rc = 1;
- }
- }
-
- return rc;
-}
-
int run_command(const std::string &command, std::function<void(const std::string&)> process_line)
{
if (!process_line)
diff --git a/kernel/yosys.h b/kernel/yosys.h
index 5a37dd3c5..239146d77 100644
--- a/kernel/yosys.h
+++ b/kernel/yosys.h
@@ -58,6 +58,12 @@
#include <string.h>
#include <stdio.h>
+#ifndef _YOSYS_
+# error It looks like you are trying to build Yosys with 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.
+#endif
+
#ifdef YOSYS_ENABLE_TCL
# include <tcl.h>
#endif
@@ -77,6 +83,10 @@
# define FINAL
#endif
+#if !defined(__GNUC__) && !defined(__clang__)
+# define __attribute__(...)
+#endif
+
YOSYS_NAMESPACE_BEGIN
namespace RTLIL {
@@ -90,7 +100,6 @@ std::string stringf(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))
std::string vstringf(const char *fmt, va_list ap);
std::string next_token(std::string &text, const char *sep);
bool patmatch(const char *pattern, const char *string);
-int readsome(std::istream &f, char *s, int n);
int run_command(const std::string &command, std::function<void(const std::string&)> process_line = std::function<void(const std::string&)>());
std::string make_temp_file(std::string template_str = "/tmp/yosys_XXXXXX");
std::string make_temp_dir(std::string template_str = "/tmp/yosys_XXXXXX");
diff --git a/libs/sha1/sha1.cpp b/libs/sha1/sha1.cpp
index dc86b2ce2..883d42837 100644
--- a/libs/sha1/sha1.cpp
+++ b/libs/sha1/sha1.cpp
@@ -256,9 +256,12 @@ void SHA1::buffer_to_block(const std::string &buffer, uint32 block[BLOCK_BYTES])
void SHA1::read(std::istream &is, std::string &s, int max)
{
- char sbuf[max];
+ char* sbuf = new char[max];
+
is.read(sbuf, max);
s.assign(sbuf, is.gcount());
+
+ delete[] sbuf;
}
diff --git a/passes/cmds/write_file.cc b/passes/cmds/write_file.cc
index 3f4419724..9bf1a75a8 100644
--- a/passes/cmds/write_file.cc
+++ b/passes/cmds/write_file.cc
@@ -68,10 +68,13 @@ struct WriteFileFrontend : public Frontend {
FILE *of = fopen(output_filename.c_str(), append_mode ? "a" : "w");
char buffer[64 * 1024];
- size_t bytes;
- while (0 < (bytes = readsome(*f, buffer, sizeof(buffer))))
- fwrite(buffer, bytes, 1, of);
+ while (1) {
+ f->read(buffer, sizeof(buffer));
+ if (f->gcount() <= 0)
+ break;
+ fwrite(buffer, f->gcount(), 1, of);
+ }
fclose(of);
}
diff --git a/passes/fsm/fsm_opt.cc b/passes/fsm/fsm_opt.cc
index 6685e8e0e..4b93d79f9 100644
--- a/passes/fsm/fsm_opt.cc
+++ b/passes/fsm/fsm_opt.cc
@@ -342,7 +342,7 @@ struct FsmOptPass : public Pass {
for (auto &mod_it : design->modules_) {
if (design->selected(mod_it.second))
for (auto &cell_it : mod_it.second->cells_)
- if (cell_it.second->type == "$fsm" and design->selected(mod_it.second, cell_it.second))
+ if (cell_it.second->type == "$fsm" && design->selected(mod_it.second, cell_it.second))
FsmData::optimize_fsm(cell_it.second, mod_it.second);
}
}
diff --git a/passes/opt/wreduce.cc b/passes/opt/wreduce.cc
index 89b1f8856..8f59a041e 100644
--- a/passes/opt/wreduce.cc
+++ b/passes/opt/wreduce.cc
@@ -32,14 +32,14 @@ struct WreduceConfig
WreduceConfig()
{
- supported_cell_types = {
+ supported_cell_types = std::set<IdString>({
"$not", "$pos", "$neg",
"$and", "$or", "$xor", "$xnor",
"$shl", "$shr", "$sshl", "$sshr", "$shift", "$shiftx",
"$lt", "$le", "$eq", "$ne", "$eqx", "$nex", "$ge", "$gt",
"$add", "$sub", // "$mul", "$div", "$mod", "$pow",
"$mux", "$pmux"
- };
+ });
}
};