From 73fba5164ffce53c766cc82dc0825f23baf996d3 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Thu, 28 Mar 2013 12:26:17 +0100 Subject: Implemented TCL support (only via -c option at the moment) --- kernel/register.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'kernel/register.cc') diff --git a/kernel/register.cc b/kernel/register.cc index 1dd60875..56222f73 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -27,6 +27,11 @@ using namespace REGISTER_INTERN; #define MAX_REG_COUNT 1000 +#ifdef YOSYS_ENABLE_TCL +Tcl_Interp *yosys_tcl = NULL; +RTLIL::Design *yosys_tcl_design = NULL; +#endif + namespace REGISTER_INTERN { int raw_register_count = 0; @@ -51,6 +56,8 @@ void Pass::run_register() { assert(pass_register.count(pass_name) == 0); pass_register[pass_name] = this; + + register_tcl(); } void Pass::init_register() @@ -70,6 +77,25 @@ void Pass::done_register() raw_register_done = false; } +#ifdef YOSYS_ENABLE_TCL +static int tcl_pass(ClientData that_vp, Tcl_Interp*, int argc, const char *argv[]) +{ + Pass *that = (Pass*)that_vp; + std::vector args; + for (int i = 0; i < argc; i++) + args.push_back(argv[i]); + that->call(yosys_tcl_design, args); + return TCL_OK; +} +#endif + +void Pass::register_tcl() +{ +#ifdef YOSYS_ENABLE_TCL + Tcl_CreateCommand(yosys_tcl, pass_name.c_str(), tcl_pass, (ClientData)this, NULL); +#endif +} + Pass::~Pass() { } @@ -189,6 +215,8 @@ void Frontend::run_register() assert(frontend_register.count(frontend_name) == 0); frontend_register[frontend_name] = this; + + register_tcl(); } Frontend::~Frontend() @@ -281,6 +309,8 @@ void Backend::run_register() assert(backend_register.count(backend_name) == 0); backend_register[backend_name] = this; + + register_tcl(); } Backend::~Backend() -- cgit v1.2.3