aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/register.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/register.h')
-rw-r--r--kernel/register.h81
1 files changed, 41 insertions, 40 deletions
diff --git a/kernel/register.h b/kernel/register.h
index 83e1059c6..a49675ed2 100644
--- a/kernel/register.h
+++ b/kernel/register.h
@@ -17,38 +17,33 @@
*
*/
+#include "kernel/yosys.h"
+
#ifndef REGISTER_H
#define REGISTER_H
-#include "kernel/rtlil.h"
-#include <stdio.h>
-#include <string>
-#include <vector>
-#include <map>
-
-#ifdef YOSYS_ENABLE_TCL
-#include <tcl.h>
-extern Tcl_Interp *yosys_get_tcl_interp();
-#endif
-
-// from kernel/version_*.o (cc source generated from Makefile)
-extern const char *yosys_version_str;
-
-// implemented in driver.cc
-extern RTLIL::Design *yosys_get_design();
-std::string rewrite_yosys_exe(std::string exe);
-std::string get_share_file_name(std::string file);
-const char *create_prompt(RTLIL::Design *design, int recursion_counter);
+YOSYS_NAMESPACE_BEGIN
struct Pass
{
std::string pass_name, short_help;
Pass(std::string name, std::string short_help = "** document me **");
- virtual void run_register();
virtual ~Pass();
+
virtual void help();
virtual void execute(std::vector<std::string> args, RTLIL::Design *design) = 0;
+ int call_counter;
+ int64_t runtime_ns;
+
+ struct pre_post_exec_state_t {
+ Pass *parent_pass;
+ int64_t begin_ns;
+ };
+
+ pre_post_exec_state_t pre_execute();
+ void post_execute(pre_post_exec_state_t state);
+
void cmd_log_args(const std::vector<std::string> &args);
void cmd_error(const std::vector<std::string> &args, size_t argidx, std::string msg);
void extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Design *design, bool select = true);
@@ -56,27 +51,36 @@ struct Pass
static void call(RTLIL::Design *design, std::string command);
static void call(RTLIL::Design *design, std::vector<std::string> args);
- static void call_newsel(RTLIL::Design *design, std::string command);
- static void call_newsel(RTLIL::Design *design, std::vector<std::string> args);
+ static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command);
+ static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args);
+
+ static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command);
+ static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args);
+ Pass *next_queued_pass;
+ virtual void run_register();
static void init_register();
static void done_register();
};
struct Frontend : Pass
{
+ // for reading of here documents
+ static FILE *current_script_file;
+ static std::string last_here_document;
+
std::string frontend_name;
Frontend(std::string name, std::string short_help = "** document me **");
virtual void run_register();
virtual ~Frontend();
- virtual void execute(std::vector<std::string> args, RTLIL::Design *design);
- virtual void execute(FILE *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) = 0;
+ virtual void execute(std::vector<std::string> args, RTLIL::Design *design) OVERRIDE FINAL;
+ virtual void execute(std::istream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) = 0;
static std::vector<std::string> next_args;
- void extra_args(FILE *&f, std::string &filename, std::vector<std::string> args, size_t argidx);
+ void extra_args(std::istream *&f, std::string &filename, std::vector<std::string> args, size_t argidx);
- static void frontend_call(RTLIL::Design *design, FILE *f, std::string filename, std::string command);
- static void frontend_call(RTLIL::Design *design, FILE *f, std::string filename, std::vector<std::string> args);
+ static void frontend_call(RTLIL::Design *design, std::istream *f, std::string filename, std::string command);
+ static void frontend_call(RTLIL::Design *design, std::istream *f, std::string filename, std::vector<std::string> args);
};
struct Backend : Pass
@@ -85,25 +89,22 @@ struct Backend : Pass
Backend(std::string name, std::string short_help = "** document me **");
virtual void run_register();
virtual ~Backend();
- virtual void execute(std::vector<std::string> args, RTLIL::Design *design);
- virtual void execute(FILE *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) = 0;
+ virtual void execute(std::vector<std::string> args, RTLIL::Design *design) OVERRIDE FINAL;
+ virtual void execute(std::ostream *&f, std::string filename, std::vector<std::string> args, RTLIL::Design *design) = 0;
- void extra_args(FILE *&f, std::string &filename, std::vector<std::string> args, size_t argidx);
+ void extra_args(std::ostream *&f, std::string &filename, std::vector<std::string> args, size_t argidx);
- static void backend_call(RTLIL::Design *design, FILE *f, std::string filename, std::string command);
- static void backend_call(RTLIL::Design *design, FILE *f, std::string filename, std::vector<std::string> args);
+ static void backend_call(RTLIL::Design *design, std::ostream *f, std::string filename, std::string command);
+ static void backend_call(RTLIL::Design *design, std::ostream *f, std::string filename, std::vector<std::string> args);
};
// implemented in passes/cmds/select.cc
extern void handle_extra_select_args(Pass *pass, std::vector<std::string> args, size_t argidx, size_t args_size, RTLIL::Design *design);
-namespace REGISTER_INTERN {
- extern int raw_register_count;
- extern bool raw_register_done;
- extern Pass *raw_register_array[];
- extern std::map<std::string, Pass*> pass_register;
- extern std::map<std::string, Frontend*> frontend_register;
- extern std::map<std::string, Backend*> backend_register;
-}
+extern std::map<std::string, Pass*> pass_register;
+extern std::map<std::string, Frontend*> frontend_register;
+extern std::map<std::string, Backend*> backend_register;
+
+YOSYS_NAMESPACE_END
#endif