Commit 8558a922 by lvzhengyang

add logger into MiniEda class

parent 5e477ed6
...@@ -34,7 +34,7 @@ set max_string_length 2000 ...@@ -34,7 +34,7 @@ set max_string_length 2000
set out_stream [open $encoded_filename w] set out_stream [open $encoded_filename w]
puts $out_stream "// TCL init file encoded by TclEncode.tcl" puts $out_stream "// TCL init file encoded by TclEncode.tcl"
puts $out_stream "namespace sta {" puts $out_stream "namespace eda {"
puts $out_stream "const char *$init_var\[\] = {" puts $out_stream "const char *$init_var\[\] = {"
puts -nonewline $out_stream "\"" puts -nonewline $out_stream "\""
set encoded_length 0 set encoded_length 0
......
...@@ -4,6 +4,10 @@ extern "C" { ...@@ -4,6 +4,10 @@ extern "C" {
struct Tcl_Interp; struct Tcl_Interp;
} }
namespace utl {
class Logger;
}
namespace eda { namespace eda {
class MiniEda class MiniEda
...@@ -11,7 +15,9 @@ class MiniEda ...@@ -11,7 +15,9 @@ class MiniEda
public: public:
static MiniEda* miniEda(); static MiniEda* miniEda();
void init(Tcl_Interp* tcl_interp); void init(Tcl_Interp* tcl_interp);
Tcl_Interp* tclInterp() { return tcl_interp_; } Tcl_Interp* tclInterp() { return tcl_interp_; }
utl::Logger* getLogger() { return logger_; }
protected: protected:
~MiniEda(); ~MiniEda();
...@@ -21,6 +27,7 @@ private: ...@@ -21,6 +27,7 @@ private:
MiniEda(); MiniEda();
Tcl_Interp* tcl_interp_; Tcl_Interp* tcl_interp_;
utl::Logger* logger_;
}; };
int tclAppInit(Tcl_Interp* interp); int tclAppInit(Tcl_Interp* interp);
......
...@@ -144,6 +144,7 @@ target_include_directories(minieda ...@@ -144,6 +144,7 @@ target_include_directories(minieda
target_link_libraries(minieda target_link_libraries(minieda
minieda_swig minieda_swig
odb odb
utl
${CMAKE_THREAD_LIBS_INIT} ${CMAKE_THREAD_LIBS_INIT}
${TCL_LIBRARY} ${TCL_LIBRARY}
) )
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
int cmd_argc; int cmd_argc;
char** cmd_argv; char** cmd_argv;
const char* log_filename = nullptr;
const char* metrics_filename = nullptr;
/* /*
static void handler(int) { static void handler(int) {
...@@ -31,6 +33,7 @@ static void handler(int) { ...@@ -31,6 +33,7 @@ static void handler(int) {
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
/* /*
// cannot build on IPRC server
// Generate a stacktrace on crash // Generate a stacktrace on crash
signal(SIGABRT, handler); signal(SIGABRT, handler);
signal(SIGBUS, handler); signal(SIGBUS, handler);
...@@ -40,6 +43,23 @@ int main(int argc, char* argv[]) ...@@ -40,6 +43,23 @@ int main(int argc, char* argv[])
*/ */
Tcl_Main(1, argv, eda::tclAppInit); Tcl_Main(1, argv, eda::tclAppInit);
/*
// TODO: Implement findCmdLineKey here
log_filename = findCmdLineKey(argc, argv, "-log");
if (log_filename) {
remove(log_filename);
}
metrics_filename = findCmdLineKey(argc, argv, "-metrics");
if (metrics_filename) {
remove(metrics_filename);
}
*/
cmd_argc = argc;
cmd_argv = argv;
return 0; return 0;
} }
......
#include <tcl.h> #include <tcl.h>
#include "eda/MiniEda.hh" #include "eda/MiniEda.hh"
#include "utl/MakeLogger.h"
#include "utl/Logger.h"
// Swig uses C linkage for init functions.
extern "C" {
extern int Minieda_swig_Init(Tcl_Interp *interp);
extern int Odbtcl_Init(Tcl_Interp *interp);
}
// Main.cc set by main()
// needed in makeLogger()
extern const char* log_filename;
extern const char* metrics_filename;
namespace eda { namespace eda {
MiniEda::MiniEda() MiniEda::MiniEda()
: tcl_interp_(nullptr) : tcl_interp_(nullptr),
logger_(nullptr)
{ {
} }
MiniEda::~MiniEda() MiniEda::~MiniEda()
{ {
delete logger_;
} }
void deleteAllMemory() void deleteAllMemory()
...@@ -39,6 +55,14 @@ void MiniEda::init(Tcl_Interp* interp) ...@@ -39,6 +55,14 @@ void MiniEda::init(Tcl_Interp* interp)
// remove error from tcl result. // remove error from tcl result.
Tcl_ResetResult(interp); Tcl_ResetResult(interp);
} }
logger_ = makeLogger(log_filename, metrics_filename);
// Init components.
Minieda_swig_Init(interp);
// defined in MakeModuleXX.h
initLogger(logger_, interp);
} }
} // namespace eda } // namespace eda
...@@ -20,16 +20,16 @@ MiniEda* getMiniEda() ...@@ -20,16 +20,16 @@ MiniEda* getMiniEda()
return MiniEda::miniEda(); return MiniEda::miniEda();
} }
// utl::Logger* getLogger() utl::Logger* getLogger()
// { {
// return MiniEda::miniEda()->getLogger(); return MiniEda::miniEda()->getLogger();
// } }
} // namespace eda } // namespace eda
using eda::MiniEda; using eda::MiniEda;
using eda::getMiniEda; using eda::getMiniEda;
// using eda::getLogger; using eda::getLogger;
%} %}
......
...@@ -43,7 +43,7 @@ extern "C" { ...@@ -43,7 +43,7 @@ extern "C" {
struct Tcl_Interp; struct Tcl_Interp;
} }
namespace ord { namespace eda {
utl::Logger * utl::Logger *
makeLogger(const char *log_filename, makeLogger(const char *log_filename,
......
...@@ -39,8 +39,7 @@ ...@@ -39,8 +39,7 @@
namespace eda { namespace eda {
// Defined in MiniEda.i // Defined in MiniEda.i
utl::Logger * utl::Logger* getLogger();
getLogger();
} }
using utl::ToolId; using utl::ToolId;
......
...@@ -42,7 +42,7 @@ extern "C" { ...@@ -42,7 +42,7 @@ extern "C" {
extern int Utl_Init(Tcl_Interp *interp); extern int Utl_Init(Tcl_Interp *interp);
} }
namespace ord { namespace eda {
using utl::Logger; using utl::Logger;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment