From b4887b1180bf882c299d0482140538d207dc254c Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 4 Dec 2013 01:47:34 +0000 Subject: [PATCH] * ./hurricane/doc/hurricane: - Change: In Cell, added doc about PlacementStatus. - Change: In Transformation, more detailed explanations about the orientations. A little beautifying too... - Change: RoutingPad doc update. - Change: Entity doc update (for id). - Change: In HTML header/footer uses the new SoC.css. * ./crlcore/src: - Change: In DefDriver, added support for placement exportation. - New: In Utility, added a "paranoid" output stream (for my extra warnings in the router). - Bug: In ApParser, correct parsing of connectors index (recreate the vector). - Change: In alliance.conf, make "blockageNet" case insensitive. - Change: In misc.conf, added support for paranoid stream. - Change: In x2y and CyclopMain correct verbose flags positionning. * ./crlcore/doc: - Change: Updated style and added some documenation. --- crlcore/doc/SoC.css | 401 +++++++++++++++++---- crlcore/doc/crlcore/AllianceFramework.dox | 10 + crlcore/doc/crlcore/Environment.dox | 3 + crlcore/doc/crlcore/SoC.css | 67 ++-- crlcore/etc/alliance.conf | 2 +- crlcore/src/ccore/Utilities.cpp | 48 ++- crlcore/src/ccore/alliance/ap/ApParser.cpp | 75 ++-- crlcore/src/ccore/crlcore/Utilities.h | 15 +- crlcore/src/ccore/lefdef/DefExport.cpp | 212 +++++++---- crlcore/src/ccore/lefdef/LefExport.cpp | 43 ++- crlcore/src/crlcore/helpers/misc.py | 2 + crlcore/src/cyclop/CyclopMain.cpp | 4 +- crlcore/src/x2y/x2y.cpp | 4 +- 13 files changed, 634 insertions(+), 252 deletions(-) diff --git a/crlcore/doc/SoC.css b/crlcore/doc/SoC.css index d0ff4fbd..276a7c09 100644 --- a/crlcore/doc/SoC.css +++ b/crlcore/doc/SoC.css @@ -1,14 +1,15 @@ /* - * x-----------------------------------------------------------------x + * +-----------------------------------------------------------------+ * | HTML Standart Tags | - * x-----------------------------------------------------------------x + * +-----------------------------------------------------------------+ */ html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { - font-size: 95%; - font-family: verdana, sans-serif; + font-size: 11pt; + /* The Open Sans font family is supplied by TexLive. */ + font-family: "Open Sans", Verdana, sans-serif;; } body { @@ -19,11 +20,15 @@ background-attachment: fixed; background-repeat: no-repeat; margin-top: 2em; - margin-right: 10%; - margin-left: 10%; + width: 550pt; + margin-right: auto; + margin-left: auto; + /* + margin-right: 12%; + margin-left: 12%; + */ } - hr { height: 1px; border: 0; @@ -32,26 +37,32 @@ } - .navigation { font-size: 80%; } - - h1, h2, h3, h4, h5, h6 { - font-family: verdana, sans-serif; + /*font-family: "Liberation Serif", sans-serif;*/ } h1 { text-align: center; } h2, h3, h4, h5, h6 { text-align: left; - padding-top: 2em; + padding-top: 11pt; } - h1, h2, h3 { font-family: "Trebuchet MS", sans-serif; - color: #09550B; + h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */ + /*color: #09550B;*/ } - h1 { font-weight: bold; font-size: 160%; } - h2 { font-weight: bold; font-size: 130%; } - h3 { font-weight: bold; font-size: 110%; } - h4 { font-weight: bold; font-size: 90%; } - h5 { font-style: italic; font-size: 90%; } - h6 { font-variant: small-caps; font-size: 90%; } + h1 { font-weight:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; } + h2 { font-weight:normal; font-size: 140%; letter-spacing:0.2em; word-spacing:0.4em; } + h3 { font-weight: bold; font-size: 118%; letter-spacing:0.2em; word-spacing:0.4em; } + h4 { font-weight: bold; font-size: 100%; } + h5 { font-style: italic; font-size: 100%; } + h6 { font-variant: small-caps; font-size: 100%; } + + h2.classHierarchy { + /*border: 1px none #008500;*/ + border: 1px none #000000; + border-top-width: 1px; + border-top-style: dotted; + padding-top: 1em; + } + .hide { display: none; @@ -71,7 +82,7 @@ text-align: right; font-weight: bold; font-style: italic; - font-size: 75%; + font-size: 80%; } @@ -102,36 +113,38 @@ dt, dd { margin-top: 0; margin-bottom: 0; } dt { font-weight: bold; } - td { font-size: 85%; } pre, tt, code { - font-family: "andale mono", monospace; - font-size: 95%; + /*font-family: "andale mono", monospace;*/ + font-size: 100%; white-space: pre; } pre { font-size: 80%; - border: solid; + border: dashed; border-width: thin; border-color: #003300; + /* background-color: #EEEEEE; + */ + background-color: #FCFCE1; padding: 0.5em; margin-left: 2em; margin-right: 2em } - tt { color: green; } - em { font-style: italic; font-weight: bold; } - strong { font-weight: bold; } - small.footnotesize { font-size: 95%; } + tt { color: green; } + em { font-style: italic; + font-weight: normal; } + strong { font-weight: bold; } - span.textit { font-style: italic; } - span.textbf { font-weight: bold; } + span.textit { font-style: italic; } + span.textbf { font-weight: bold; } - .small { font-size: 80%; } - .white { color: #FFFFFF; } + .small { font-size: 90%; } + .white { color: #FFFFFF; } ul.toc { @@ -153,51 +166,126 @@ text-decoration: underline; } - table.remark { - margin-right: 5%; - margin-left: 5%; - border: solid; - border-width: thin; - border-color: #003300; - } - - table.remarktext { - text-align: justify; - background-color: #EEEEEE; - } - - table.citation { - margin-right: 10%; - margin-left: 10%; - } - - - /* - * x-----------------------------------------------------------------x + * +-----------------------------------------------------------------+ * | Doxygen Specific Classes | - * x-----------------------------------------------------------------x + * +-----------------------------------------------------------------+ */ +/* ------------------------------------------------------------------- + * Header & Footer Classes (customized top page navigation bar). + */ + + h1.header { + font-size: 200%; + /*font-family: times, verdana, sans-serif;*/ + } + + center.header { + background-color: #CCE6CA; + } + + table.header { + /*width: 100%;*/ + /*background-color: #EEEEEE;*/ + background-color: #CCE6CA; + } + + table.header td { + padding: 2px 14px; + text-align: center; + font-weight: bold; + /*font-family: verdana, sans-serif;*/ + font-size: 110%; + } + + table.DoxUser td, table.DoxUser th { + padding: 0px 5px; + border: 0px; + } + + table.DoxUser th { + background-color: #CCE6CA; + } + + table.footer1, table.footer2 { width: 100%; } + td.LFooter { text-align: left; } + td.RFooter { text-align: right; } + td.CFooter { text-align: center;} + table.footer2 td.RFooter { font-weight: bold; width: 35% } + table.footer2 td.CFooter { width: 30% } + table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ } + + table.classHierarchy { + border-collapse: separate; + border-spacing: 5px; + font-size: 110%; + } + + table.classHierarchy tr { + border: 1px solid blue; + } + + table.classHierarchy td.normal { + border: 1px solid #CCE6CA; + width: 140pt; + text-align: center; + font-weight: bold; + background-color: #CCE6CA; + } + + table.classHierarchy td.virtual { + border: 1px solid black; + width: 140pt; + text-align: center; + font-weight: bold; + } + + table.classHierarchy td.wnormal { + border: 1px solid #CCE6CA; + width: 240pt; + text-align: center; + font-weight: bold; + background-color: #CCE6CA; + } + + table.classHierarchy td.wvirtual { + border: 1px solid black; + width: 240pt; + text-align: center; + font-weight: bold; + } + + div.ah { + /*font-family: time;*/ + font-size: 250%; + } + + /* ------------------------------------------------------------------- * Quick Index Class (top page navigation bar). */ div.qindex, div.nav { - width: 100%; - background-color: #eeeeff; - border: 1px solid #003300; + width: 100%-4px; + /*background-color: #DADAEF;*/ + /*background-color: #eeeeff;*/ + /*background-color: #EEEEEE;*/ + background-color: #CCE6CA; + border: 0px solid #003300; text-align: center; - margin: 2px; + margin: 0px; padding: 2px; line-height: 140%; } a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { text-decoration: none; - font-weight: bold; + /*font-family: Courier;*/ + font-weight: normal; + /*font-size: 110%;*/ } a.qindex, a.qindex:visited { @@ -240,12 +328,92 @@ width: 80%; } + h3 a[name="index__"], + h3 a[name="index_a"], + h3 a[name="index_b"], + h3 a[name="index_c"], + h3 a[name="index_d"], + h3 a[name="index_e"], + h3 a[name="index_f"], + h3 a[name="index_g"], + h3 a[name="index_h"], + h3 a[name="index_i"], + h3 a[name="index_j"], + h3 a[name="index_k"], + h3 a[name="index_l"], + h3 a[name="index_m"], + h3 a[name="index_n"], + h3 a[name="index_o"], + h3 a[name="index_p"], + h3 a[name="index_q"], + h3 a[name="index_r"], + h3 a[name="index_s"], + h3 a[name="index_t"], + h3 a[name="index_u"], + h3 a[name="index_v"], + h3 a[name="index_w"], + h3 a[name="index_x"], + h3 a[name="index_y"], + h3 a[name="index_z"], + h3 a[name="index_0"], + h3 a[name="index_1"], + h3 a[name="index_2"], + h3 a[name="index_3"], + h3 a[name="index_4"], + h3 a[name="index_5"], + h3 a[name="index_6"], + h3 a[name="index_7"], + h3 a[name="index_8"], + h3 a[name="index_9"] + h3 a[id="index__"], + h3 a#index_a, + h3 a#index_b, + h3 a#index_c, + h3 a#index_d, + h3 a#index_e, + h3 a#index_f, + h3 a#index_g, + h3 a#index_h, + h3 a#index_i, + h3 a#index_j, + h3 a#index_k, + h3 a#index_l, + h3 a#index_m, + h3 a#index_n, + h3 a#index_o, + h3 a#index_p, + h3 a#index_q, + h3 a#index_r, + h3 a#index_s, + h3 a#index_t, + h3 a#index_u, + h3 a#index_v, + h3 a#index_w, + h3 a#index_x, + h3 a#index_y, + h3 a#index_z, + h3 a#index_0, + h3 a#index_1, + h3 a#index_2, + h3 a#index_3, + h3 a#index_4, + h3 a#index_5, + h3 a#index_6, + h3 a#index_7, + h3 a#index_8, + h3 a#index_9, + h3 a#index_0x7e + { + font-family: time; + font-size: 250%; + } + /* ------------------------------------------------------------------- * Verbatim Source Code / Examples. */ - pre.fragment { background-color: #EEEEEE; } + /* pre.fragment { background-color: #EEEEEE; } */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } @@ -254,26 +422,45 @@ span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } + span.red { color: red } /* ------------------------------------------------------------------- * Attributes Listing. */ +p.formulaDsp { + text-align: center; +} + .mdTable { - border: 1px solid #868686; - background-color: #F4F4FB; + /*border: 1px solid #868686;*/ + /*background-color: #DADAEF;*/ + /*background-color: #F4F4FB;*/ + border: 1px none #008500; + border-left-width: 1px; + border-left-style: solid; + /*background-color: #B8E6B8;*/ + /*background-color: #CCE6CA;*/ + margin-top: 25px; + font-size: 105%; } .mdRow { padding: 5px 10px; } + /* This Mozilla/Firefox bug has been corrected from v1.5. + * .mdname1 { + * padding: 3px 0px 0px 0px; + * } + */ + .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; - font-size: 12px; + font-size: 11px; font-style: italic; - background-color: #FAFAFA; + /*background-color: #FAFAFA;*/ border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; @@ -281,32 +468,92 @@ margin: 0px; } - .memItemLeft, .memItemRight, .memTemplItemLeft { - padding: 1px 0px 0px 8px; + .memitem { + margin-bottom: 30px; + border: 1px none #008500; + } + + .memproto { + background-color: #CCE6CA; + border-left-width: 4px; + border-left-style: solid; + border-color: #008500; + } + + .memname { + white-space: nowrap; + padding-left: 5px; + font-size: 105%; + } + + table.memname * { + font-family: "Monospace"; + } + + + .memdoc{ + padding-left: 5px; + /*margin-top: -8px;*/ + border-left-width: 1px; + border-left-style: solid; + border-color: #008500; + } + + div.contents * table tr { + padding: 3px 3px 3px 8px; + } + + .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight { + /*padding: 1px 0px 0px 8px;*/ + padding: 3px 3px 3px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; + /* border-top-color: #0c0c0c; border-right-color: #0c0c0c; border-bottom-color: #0c0c0c; border-left-color: #0c0c0c; - border-top-style: solid; + */ + border-top-style: none; border-right-style: none; - border-bottom-style: none; + border-bottom-style: dotted; border-left-style: none; - background-color: #FAFAFA; + /*background-color: #DADAEF;*/ + /*background-color: #eeeeff;*/ + /*background-color: #EEEEEE;*/ + /*background-color: #CCE6CA;*/ + font-family: "Monospace"; } - .memItemLeft { font-size: 12px; } - .memItemRight { font-size: 13px; } - .memTemplItemLeft { font-size: 12px; } - .memTemplItemRight { font-size: 13px; } + .memTemplItemLeft, .memTemplItemRight { + border-bottom-width: 2px; + border-bottom-style: solid; + font-weight: bold; + } + + .memItemLeft { font-size: 11px; width: 35%; } + .memItemRight { font-size: 12px; } + .memTemplItemLeft { font-size: 11px; } + .memTemplItemRight { font-size: 12px; } .memTemplParams { - color: #606060; - background-color: #FAFAFA; - font-size: 12px; + color: #FFFFFF; + background-color: #000000; + font-size: 11px; + font-weight: bold; + } + + .groupText, .groupHeader { + color: #09550B; + font-size: 130%; + font-weight: bold; + margin-top: 15px; + } + + .groupHeader { + margin-bottom: -30pt; } diff --git a/crlcore/doc/crlcore/AllianceFramework.dox b/crlcore/doc/crlcore/AllianceFramework.dox index 46ee7fd6..72ff3b50 100644 --- a/crlcore/doc/crlcore/AllianceFramework.dox +++ b/crlcore/doc/crlcore/AllianceFramework.dox @@ -110,6 +110,16 @@ /*! \function void AllianceFramework::addCellGauge(CellGauge* gauge); * \Return Add a new CellGauge. The last added becomes the default one. */ + + //! \function Cell* AllianceFramework::createCell( const string& name, AllianceLibrary* library=NULL ); + //! \param name the name of the cell. + //! \param library an Alliance library. + //! \Return the newly created Cell. + //! + //! Create a new Cell named \c name in the AllianceLibrary \c library. If \c library is + //! \c NULL, uses the working library. Checks are performed to ensure that + //! in a given library no two cells have the same name. + /*! \function Cell* AllianceFramework::getCell(const string& name, unsigned int mode, unsigned int depth=(unsigned int)-1); * \param name the name of the Cell. * \param mode control the loader behavior. diff --git a/crlcore/doc/crlcore/Environment.dox b/crlcore/doc/crlcore/Environment.dox index b70b2ea1..adc814be 100644 --- a/crlcore/doc/crlcore/Environment.dox +++ b/crlcore/doc/crlcore/Environment.dox @@ -102,6 +102,9 @@ /*! \function SearchPath& Environment::getLIBRARIES(); * \Return The ordered list of libraries, under the form of a serch path. */ + /*! \function string Environment::getLIBRARYPath(size_t i); + * \Return The path of library at index \c i in the search path. + */ /*! \function std::string Environment::getPrint() const; * \Return A nicely formatted string to resume the current environements * settings. Mainly for verbose outputs on ttys. diff --git a/crlcore/doc/crlcore/SoC.css b/crlcore/doc/crlcore/SoC.css index befe1aef..276a7c09 100644 --- a/crlcore/doc/crlcore/SoC.css +++ b/crlcore/doc/crlcore/SoC.css @@ -7,8 +7,9 @@ */ html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { - font-size: 96%; - font-family: verdana, sans-serif; + font-size: 11pt; + /* The Open Sans font family is supplied by TexLive. */ + font-family: "Open Sans", Verdana, sans-serif;; } body { @@ -19,8 +20,13 @@ background-attachment: fixed; background-repeat: no-repeat; margin-top: 2em; - margin-right: 8%; - margin-left: 8%; + width: 550pt; + margin-right: auto; + margin-left: auto; + /* + margin-right: 12%; + margin-left: 12%; + */ } hr { @@ -32,14 +38,14 @@ h1, h2, h3, h4, h5, h6 { - font-family: "Liberation Serif", sans-serif; + /*font-family: "Liberation Serif", sans-serif;*/ } h1 { text-align: center; } h2, h3, h4, h5, h6 { text-align: left; - padding-top: 2em; + padding-top: 11pt; } - h1, h2, h3 { font-family: "Liberation Serif", sans-serif; + h1, h2, h3 { /*font-family: "Liberation Serif", sans-serif; */ /*color: #09550B;*/ } h1 { font-weight:normal; font-size: 170%; letter-spacing:0.2em; word-spacing:0.4em; } @@ -52,8 +58,8 @@ h2.classHierarchy { /*border: 1px none #008500;*/ border: 1px none #000000; - border-top-width: 2px; - border-top-style: solid; + border-top-width: 1px; + border-top-style: dotted; padding-top: 1em; } @@ -110,7 +116,7 @@ pre, tt, code { - font-family: "andale mono", monospace; + /*font-family: "andale mono", monospace;*/ font-size: 100%; white-space: pre; } @@ -131,7 +137,7 @@ tt { color: green; } em { font-style: italic; - font-weight: bold; } + font-weight: normal; } strong { font-weight: bold; } span.textit { font-style: italic; } @@ -161,8 +167,6 @@ } - - /* * +-----------------------------------------------------------------+ * | Doxygen Specific Classes | @@ -176,7 +180,7 @@ h1.header { font-size: 200%; - font-family: times, verdana, sans-serif; + /*font-family: times, verdana, sans-serif;*/ } center.header { @@ -184,8 +188,8 @@ } table.header { - /*width: 100%;*/ - /*background-color: #EEEEEE;*/ + /*width: 100%;*/ + /*background-color: #EEEEEE;*/ background-color: #CCE6CA; } @@ -193,17 +197,26 @@ padding: 2px 14px; text-align: center; font-weight: bold; - font-family: verdana, sans-serif; + /*font-family: verdana, sans-serif;*/ font-size: 110%; } + table.DoxUser td, table.DoxUser th { + padding: 0px 5px; + border: 0px; + } + + table.DoxUser th { + background-color: #CCE6CA; + } + table.footer1, table.footer2 { width: 100%; } td.LFooter { text-align: left; } td.RFooter { text-align: right; } td.CFooter { text-align: center;} table.footer2 td.RFooter { font-weight: bold; width: 35% } table.footer2 td.CFooter { width: 30% } - table.footer2 td.LFooter { font-weight: bold; width: 35%; font-family: time; } + table.footer2 td.LFooter { font-weight: bold; width: 35%; /*font-family: time;*/ } table.classHierarchy { border-collapse: separate; @@ -246,7 +259,7 @@ } div.ah { - font-family: time; + /*font-family: time;*/ font-size: 250%; } @@ -270,7 +283,9 @@ a.qindex, a.qindex:visited, a.qindex:hover, a.qindexHL, a.el, a.elRef { text-decoration: none; - font-weight: bold; + /*font-family: Courier;*/ + font-weight: normal; + /*font-size: 110%;*/ } a.qindex, a.qindex:visited { @@ -407,12 +422,17 @@ span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } + span.red { color: red } /* ------------------------------------------------------------------- * Attributes Listing. */ +p.formulaDsp { + text-align: center; +} + .mdTable { /*border: 1px solid #868686;*/ /*background-color: #DADAEF;*/ @@ -466,6 +486,10 @@ font-size: 105%; } + table.memname * { + font-family: "Monospace"; + } + .memdoc{ padding-left: 5px; @@ -501,6 +525,7 @@ /*background-color: #eeeeff;*/ /*background-color: #EEEEEE;*/ /*background-color: #CCE6CA;*/ + font-family: "Monospace"; } .memTemplItemLeft, .memTemplItemRight { @@ -509,7 +534,7 @@ font-weight: bold; } - .memItemLeft { font-size: 11px; } + .memItemLeft { font-size: 11px; width: 35%; } .memItemRight { font-size: 12px; } .memTemplItemLeft { font-size: 11px; } .memTemplItemRight { font-size: 12px; } diff --git a/crlcore/etc/alliance.conf b/crlcore/etc/alliance.conf index 04244735..030a49ec 100644 --- a/crlcore/etc/alliance.conf +++ b/crlcore/etc/alliance.conf @@ -26,7 +26,7 @@ allianceConfig = \ , ( 'POWER' , 'vdd') , ( 'GROUND' , 'vss') , ( 'CLOCK' , '^ck.*') - , ( 'BLOCKAGE' , '^blockageNet*') + , ( 'BLOCKAGE' , '^blockage[Nn]et*') ) diff --git a/crlcore/src/ccore/Utilities.cpp b/crlcore/src/ccore/Utilities.cpp index 544d5d95..0fbc4607 100644 --- a/crlcore/src/ccore/Utilities.cpp +++ b/crlcore/src/ccore/Utilities.cpp @@ -41,44 +41,51 @@ namespace { void verboseLevel1Changed ( Cfg::Parameter* p ) { - if ( p->asBool() ) mstream::enable ( mstream::VerboseLevel1 ); - else mstream::disable ( mstream::VerboseLevel1 ); + if (p->asBool()) mstream::enable ( mstream::Verbose0|mstream::Verbose1 ); + else mstream::disable( mstream::Verbose1|mstream::Verbose2 ); - //cerr << "Verbose Level 1: " << boolalpha << p->asBool() << endl; + //cerr << "Verbose Level 1: " << boolalpha << p->asBool() << " mask:" << mstream::getActiveMask() << endl; } void verboseLevel2Changed ( Cfg::Parameter* p ) { - if ( p->asBool() ) mstream::enable ( mstream::VerboseLevel2 ); - else mstream::disable ( mstream::VerboseLevel2 ); + if (p->asBool()) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 ); + else mstream::disable( mstream::Verbose2 ); + + //cerr << "Verbose Level 2: " << boolalpha << p->asBool() << " mask:" << mstream::getActiveMask() << endl; } void infoChanged ( Cfg::Parameter* p ) { - if ( p->asBool() ) mstream::enable ( mstream::Info ); - else mstream::disable ( mstream::Info ); + if (p->asBool()) mstream::enable ( mstream::Info ); + else mstream::disable( mstream::Info ); + } + + + void paranoidChanged ( Cfg::Parameter* p ) + { + if (p->asBool()) mstream::enable ( mstream::Paranoid ); + else mstream::disable( mstream::Paranoid ); } void bugChanged ( Cfg::Parameter* p ) { - if ( p->asBool() ) mstream::enable ( mstream::Bug ); - else mstream::disable ( mstream::Bug ); + if ( p->asBool() ) mstream::enable ( mstream::Bug ); + else mstream::disable( mstream::Bug ); } void catchCoreChanged ( Cfg::Parameter* p ) - { - System::setCatchCore ( p->asBool() ); - } + { System::setCatchCore( p->asBool() ); } void logModeChanged ( Cfg::Parameter* p ) { - if ( not p->asBool() ) tty::enable (); - else tty::disable (); + if (not p->asBool()) tty::enable (); + else tty::disable (); } @@ -114,11 +121,12 @@ int tty::_width = 80; bool tty::_enabled = true; unsigned int mstream::_activeMask = mstream::Verbose0; -mstream cmess0 ( mstream::Verbose0, std::cout ); -mstream cmess1 ( mstream::Verbose1, std::cout ); -mstream cmess2 ( mstream::Verbose2, std::cout ); -mstream cinfo ( mstream::Info , std::cout ); -mstream cbug ( mstream::Bug , std::cout ); +mstream cmess0 ( mstream::Verbose0, std::cout ); +mstream cmess1 ( mstream::Verbose1, std::cout ); +mstream cmess2 ( mstream::Verbose2, std::cout ); +mstream cinfo ( mstream::Info , std::cout ); +mstream cparanoid ( mstream::Paranoid, std::cout ); +mstream cbug ( mstream::Bug , std::cout ); // ------------------------------------------------------------------- @@ -315,6 +323,7 @@ namespace CRL { Cfg::getParamBool ("misc.verboseLevel1" ,true )->registerCb ( verboseLevel1Changed ); Cfg::getParamBool ("misc.verboseLevel2" ,true )->registerCb ( verboseLevel2Changed ); Cfg::getParamBool ("misc.info" ,false)->registerCb ( infoChanged ); + Cfg::getParamBool ("misc.paranoid" ,false)->registerCb ( paranoidChanged ); Cfg::getParamBool ("misc.bug" ,false)->registerCb ( bugChanged ); Cfg::getParamBool ("misc.logMode" ,false)->registerCb ( logModeChanged ); Cfg::getParamInt ("misc.traceLevel" ,1000 )->registerCb ( traceLevelChanged ); @@ -325,6 +334,7 @@ namespace CRL { verboseLevel1Changed ( Cfg::getParamBool("misc.verboseLevel1") ); verboseLevel2Changed ( Cfg::getParamBool("misc.verboseLevel2") ); infoChanged ( Cfg::getParamBool("misc.info" ) ); + paranoidChanged ( Cfg::getParamBool("misc.paranoid" ) ); bugChanged ( Cfg::getParamBool("misc.bug" ) ); logModeChanged ( Cfg::getParamBool("misc.logMode" ) ); traceLevelChanged ( Cfg::getParamInt ("misc.traceLevel" ) ); diff --git a/crlcore/src/ccore/alliance/ap/ApParser.cpp b/crlcore/src/ccore/alliance/ap/ApParser.cpp index 1962183f..126d4cee 100644 --- a/crlcore/src/ccore/alliance/ap/ApParser.cpp +++ b/crlcore/src/ccore/alliance/ap/ApParser.cpp @@ -445,8 +445,8 @@ namespace { void ApParser::_parseConnector () { static DbU::Unit XCON, YCON, WIDTH; - static unsigned int index; - static char pinName[1024]; + static int index; + string pinName; static Net* net; static Pin* pin; static LayerInformation* layerInfo; @@ -457,53 +457,58 @@ namespace { static Name EAST = "EAST"; static Name WEST = "WEST"; - vector fields = _splitString ( _rawLine+2, ',' ); - if ( fields.size() < 7 ) + vector fields = _splitString( _rawLine+2, ',' ); + if (fields.size() < 7) _printError ( false, "Malformed Connector line." ); else { - XCON = _getUnit ( fields[0] ); - YCON = _getUnit ( fields[1] ); - WIDTH = _getUnit ( fields[2] ); - index = atoi(fields[4]); + XCON = _getUnit( fields[0] ); + YCON = _getUnit( fields[1] ); + WIDTH = _getUnit( fields[2] ); orientation = fields[5]; - size_t length = strlen ( fields[3] ); - if ( length > 1000 ) { + index = -1; + if (fields[4] != '\0') index = atoi( fields[4] ); + + size_t length = strlen( fields[3] ); + if (length > 1000) { _printError ( false, "Connector name too long (exceed 1000 characters)." ); return; } - strncpy ( pinName, fields[3], 1023 ); - if ( index > 0 ) { - pinName [ length ] = '.'; - strncpy ( pinName+length+1, fields[4], 1022-length ); + pinName = fields[3]; + size_t bindex = pinName.find(' '); + if (bindex != string::npos) { + pinName[ bindex ] = '('; + pinName += ')'; + } + if (index >= 0) { + pinName += '.' + string(fields[4]); } - net = _getNet ( fields[3] ); - layerInfo = _getLayerInformation ( fields[6] ); + net = _getNet ( fields[3] ); + layerInfo = _getLayerInformation( fields[6] ); - if ( orientation == NORTH ) accessDirection = Pin::AccessDirection::NORTH; - else if ( orientation == WEST ) accessDirection = Pin::AccessDirection::WEST; - else if ( orientation == SOUTH ) accessDirection = Pin::AccessDirection::SOUTH; - else if ( orientation == EAST ) accessDirection = Pin::AccessDirection::EAST; + if (orientation == NORTH) accessDirection = Pin::AccessDirection::NORTH; + else if (orientation == SOUTH) accessDirection = Pin::AccessDirection::SOUTH; + else if (orientation == WEST ) accessDirection = Pin::AccessDirection::WEST; + else if (orientation == EAST ) accessDirection = Pin::AccessDirection::EAST; else accessDirection = Pin::AccessDirection::UNDEFINED; - if ( layerInfo && net ) { - net->setExternal ( true ); - pin = Pin::create ( net - , pinName - , accessDirection - , Pin::PlacementStatus::PLACED - , layerInfo->getLayer() - , XCON - , YCON - , WIDTH - , WIDTH - ); - //setExternal ( pin ); + if (layerInfo and net) { + net->setExternal( true ); + pin = Pin::create( net + , pinName + , accessDirection + , Pin::PlacementStatus::PLACED + , layerInfo->getLayer() + , XCON + , YCON + , WIDTH + , WIDTH + ); } - if ( !net ) _printError ( false, "Unknown net name %s." , fields[5] ); - if ( !layerInfo ) _printError ( false, "Unknown layer name %s.", fields[6] ); + if (not net ) _printError( false, "Unknown net name %s." , fields[5] ); + if (not layerInfo ) _printError( false, "Unknown layer name %s.", fields[6] ); } } diff --git a/crlcore/src/ccore/crlcore/Utilities.h b/crlcore/src/ccore/crlcore/Utilities.h index 14682d51..01441a1c 100644 --- a/crlcore/src/ccore/crlcore/Utilities.h +++ b/crlcore/src/ccore/crlcore/Utilities.h @@ -257,14 +257,12 @@ inline std::string tty::bgcolor ( unsigned int mask ) class mstream : public std::ostream { public: - enum StreamMasks { Verbose0 = (1<<0) - , Verbose1 = (1<<1) - , Verbose2 = (1<<2) - , Info = (1<<3) - , Bug = (1<<4) - , VerboseLevel0 = Verbose0 - , VerboseLevel1 = Verbose0|Verbose1 - , VerboseLevel2 = Verbose0|Verbose1|Verbose2 + enum StreamMasks { Verbose0 = 0x00000001 + , Verbose1 = 0x00000002 + , Verbose2 = 0x00000004 + , Info = 0x00000008 + , Paranoid = 0x00000010 + , Bug = 0x00000020 }; public: static void enable ( unsigned int mask ); @@ -340,6 +338,7 @@ extern mstream cmess0; extern mstream cmess1; extern mstream cmess2; extern mstream cinfo; +extern mstream cparanoid; extern mstream cbug; diff --git a/crlcore/src/ccore/lefdef/DefExport.cpp b/crlcore/src/ccore/lefdef/DefExport.cpp index f9418658..4026231b 100644 --- a/crlcore/src/ccore/lefdef/DefExport.cpp +++ b/crlcore/src/ccore/lefdef/DefExport.cpp @@ -1,15 +1,9 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// Copyright (c) UPMC 2010-2013, All Rights Reserved // -// =================================================================== -// -// $Id$ -// -// x-----------------------------------------------------------------x -// | | +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | C a d e n c e D E F E x p o r t e r | // | | @@ -17,10 +11,7 @@ // | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./crlcore/DefExport.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x +// +-----------------------------------------------------------------+ #include @@ -58,6 +49,20 @@ namespace { using namespace CRL; + string toLower ( const string& s ) + { + string lowered; + + for ( size_t i=0 ; i 'Z') ) + lowered.push_back( s[i] ); + else + lowered.push_back( s[i] + (int)'a'-(int)'A' ); + } + return lowered; + } + + #define CHECK_STATUS_CBK(status) if ((status) != 0) return driver->checkStatus(status); #define CHECK_STATUS_DRV(status) if ((status) != 0) return checkStatus(status); #define RETURN_CHECK_STATUS_CBK(status) return driver->checkStatus(status); @@ -66,44 +71,46 @@ namespace { class DefDriver { public: - static void drive ( Cell* cell, unsigned int flags ); - static int getUnits (); - static int toDefUnits ( DbU::Unit ); - static DbU::Unit getSliceHeight (); - static DbU::Unit getPitchWidth (); - ~DefDriver (); - int write (); + static void drive ( Cell* cell, unsigned int flags ); + static int getUnits (); + static int toDefUnits ( DbU::Unit ); + static int toDefOrient ( Transformation::Orientation ); + static void toDefCoordinates ( Instance*, int& statusX, int& statusY, int& statusOrient ); + static DbU::Unit getSliceHeight (); + static DbU::Unit getPitchWidth (); + ~DefDriver (); + int write (); + private: + DefDriver ( Cell*, const string& designName, FILE*, unsigned int flags ); + inline Cell* getCell (); + inline const string& getDesignName () const; + inline unsigned int getFlags () const; + inline int getStatus () const; + int checkStatus ( int status ); private: - DefDriver ( Cell*, const string& designName, FILE*, unsigned int flags ); - inline Cell* getCell (); - inline const string& getDesignName () const; - inline unsigned int getFlags () const; - inline int getStatus () const; - int checkStatus ( int status ); - private: - static int _designCbk ( defwCallbackType_e, defiUserData ); - static int _designEndCbk ( defwCallbackType_e, defiUserData ); - static int _historyCbk ( defwCallbackType_e, defiUserData ); - static int _versionCbk ( defwCallbackType_e, defiUserData ); - static int _dividerCbk ( defwCallbackType_e, defiUserData ); - static int _busBitCbk ( defwCallbackType_e, defiUserData ); - static int _unitsCbk ( defwCallbackType_e, defiUserData ); - static int _technologyCbk ( defwCallbackType_e, defiUserData ); - static int _dieAreaCbk ( defwCallbackType_e, defiUserData ); - static int _gcellGridCbk ( defwCallbackType_e, defiUserData ); - static int _rowCbk ( defwCallbackType_e, defiUserData ); - static int _trackCbk ( defwCallbackType_e, defiUserData ); - static int _viaCbk ( defwCallbackType_e, defiUserData ); - static int _pinCbk ( defwCallbackType_e, defiUserData ); - static int _pinPropCbk ( defwCallbackType_e, defiUserData ); - static int _componentCbk ( defwCallbackType_e, defiUserData ); - static int _netCbk ( defwCallbackType_e, defiUserData ); - static int _snetCbk ( defwCallbackType_e, defiUserData ); - static int _extensionCbk ( defwCallbackType_e, defiUserData ); - static int _groupCbk ( defwCallbackType_e, defiUserData ); - static int _propDefCbk ( defwCallbackType_e, defiUserData ); - static int _regionCbk ( defwCallbackType_e, defiUserData ); - static int _scanchainCbk ( defwCallbackType_e, defiUserData ); + static int _designCbk ( defwCallbackType_e, defiUserData ); + static int _designEndCbk ( defwCallbackType_e, defiUserData ); + static int _historyCbk ( defwCallbackType_e, defiUserData ); + static int _versionCbk ( defwCallbackType_e, defiUserData ); + static int _dividerCbk ( defwCallbackType_e, defiUserData ); + static int _busBitCbk ( defwCallbackType_e, defiUserData ); + static int _unitsCbk ( defwCallbackType_e, defiUserData ); + static int _technologyCbk ( defwCallbackType_e, defiUserData ); + static int _dieAreaCbk ( defwCallbackType_e, defiUserData ); + static int _gcellGridCbk ( defwCallbackType_e, defiUserData ); + static int _rowCbk ( defwCallbackType_e, defiUserData ); + static int _trackCbk ( defwCallbackType_e, defiUserData ); + static int _viaCbk ( defwCallbackType_e, defiUserData ); + static int _pinCbk ( defwCallbackType_e, defiUserData ); + static int _pinPropCbk ( defwCallbackType_e, defiUserData ); + static int _componentCbk ( defwCallbackType_e, defiUserData ); + static int _netCbk ( defwCallbackType_e, defiUserData ); + static int _snetCbk ( defwCallbackType_e, defiUserData ); + static int _extensionCbk ( defwCallbackType_e, defiUserData ); + static int _groupCbk ( defwCallbackType_e, defiUserData ); + static int _propDefCbk ( defwCallbackType_e, defiUserData ); + static int _regionCbk ( defwCallbackType_e, defiUserData ); + static int _scanchainCbk ( defwCallbackType_e, defiUserData ); private: static int _units; static DbU::Unit _sliceHeight; @@ -116,7 +123,9 @@ namespace { }; - int DefDriver::_units = 100; + int DefDriver::_units = 100; + DbU::Unit DefDriver::_sliceHeight = 0; + DbU::Unit DefDriver::_pitchWidth = 0; int DefDriver::getUnits () { return _units; } @@ -129,6 +138,53 @@ namespace { inline const string& DefDriver::getDesignName () const { return _designName; } + int DefDriver::toDefOrient ( Transformation::Orientation orient ) + { + switch ( orient ) { + case Transformation::Orientation::ID: return 0; // N. + case Transformation::Orientation::R1: return 1; // W. + case Transformation::Orientation::R2: return 2; // S. + case Transformation::Orientation::R3: return 3; // E. + case Transformation::Orientation::MX: return 4; // FN. + case Transformation::Orientation::XR: return 5; // FE. + case Transformation::Orientation::MY: return 6; // FS. + case Transformation::Orientation::YR: return 7; // FW. + } + + return 0; // N + } + + + void DefDriver::toDefCoordinates ( Instance* instance, int& statusX, int& statusY, int& statusOrient ) + { + const Transformation& transf = instance->getTransformation(); + statusX = toDefUnits ( transf.getTx() ); + statusY = toDefUnits ( transf.getTy() ); + statusOrient = toDefOrient( transf.getOrientation() ); + + switch ( transf.getOrientation() ) { + case Transformation::Orientation::ID: break; + case Transformation::Orientation::R1: break; + case Transformation::Orientation::R2: + statusX -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getWidth() ); + statusY -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getHeight() ); + break; + case Transformation::Orientation::R3: break; + case Transformation::Orientation::MX: + statusX -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getWidth() ); + break; + case Transformation::Orientation::XR: + break; + case Transformation::Orientation::MY: + statusY -= toDefUnits( instance->getMasterCell()->getAbutmentBox().getHeight() ); + break; + case Transformation::Orientation::YR: + break; + } + + } + + DefDriver::DefDriver ( Cell* cell, const string& designName, FILE* defStream, unsigned int flags ) : _cell (cell) , _designName(designName) @@ -435,26 +491,41 @@ namespace { CHECK_STATUS_CBK(status); forEach ( Instance*, iinstance, cell->getInstances() ) { - status = defwComponent ( getString((*iinstance)->getName()).c_str() + string insname = getString((*iinstance)->getName()); + const char* source = NULL; + const char* statusS = "UNPLACED"; + int statusX = 0; + int statusY = 0; + int statusOrient = 0; + + if (CatalogExtension::isFeed((*iinstance)->getMasterCell())) source = "DIST"; + + if ((*iinstance)->getPlacementStatus() == Instance::PlacementStatus::PLACED) statusS = "PLACED"; + if ((*iinstance)->getPlacementStatus() == Instance::PlacementStatus::FIXED ) statusS = "FIXED"; + if (statusS[0] != 'U') { + toDefCoordinates( *iinstance, statusX, statusY, statusOrient ); + } + + status = defwComponent ( insname.c_str() , getString((*iinstance)->getMasterCell()->getName()).c_str() - , 0 // numNetNames (disabled). - , NULL // netNames (disabled). - , NULL // eeq (electrical equivalence). - , NULL // genName. - , NULL // genParameters. - , NULL // source (who has created it). - , 0 // numForeigns. - , NULL // foreigns. - , NULL // foreignsX[]. - , NULL // foreignsY[]. - , NULL // foreignsOrient[]. - , "UNPLACED" // status (placement status). - , 0 // status X (disabled). - , 0 // status Y (disabled). - , 0 // status orientation (disabled). - , 0.0 // weight (disabled). - , NULL // region (disabled). - , 0, 0, 0, 0 // region coordinates. + , 0 // numNetNames (disabled). + , NULL // netNames (disabled). + , NULL // eeq (electrical equivalence). + , NULL // genName. + , NULL // genParameters. + , source // source (who has created it). + , 0 // numForeigns. + , NULL // foreigns. + , NULL // foreignsX[]. + , NULL // foreignsY[]. + , NULL // foreignsOrient[]. + , statusS // status (placement status). + , statusX // status X (disabled). + , statusY // status Y (disabled). + , statusOrient // status orientation (disabled). + , 0.0 // weight (disabled). + , NULL // region (disabled). + , 0, 0, 0, 0 // region coordinates. ); if ( status != 0 ) return driver->checkStatus(status); } @@ -481,7 +552,8 @@ namespace { forEach ( Net*, inet, cell->getNets() ) { if ( (*inet)->isSupply() or (*inet)->isClock() ) continue; - status = defwNet ( getString((*inet)->getName()).c_str() ); + string netName = getString((*inet)->getName()) + "_net"; + status = defwNet ( netName.c_str() ); if ( status != 0 ) return driver->checkStatus(status); forEach ( Plug*, iplug, (*inet)->getPlugs() ) { diff --git a/crlcore/src/ccore/lefdef/LefExport.cpp b/crlcore/src/ccore/lefdef/LefExport.cpp index 473488be..6aa03c29 100644 --- a/crlcore/src/ccore/lefdef/LefExport.cpp +++ b/crlcore/src/ccore/lefdef/LefExport.cpp @@ -1,15 +1,9 @@ - // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// Copyright (c) LIP6 2010-2013, All Rights Reserved // -// =================================================================== -// -// $Id$ -// -// x-----------------------------------------------------------------x -// | | +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | C a d e n c e D E F E x p o r t e r | // | | @@ -17,10 +11,7 @@ // | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./crlcore/LefExport.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x +// +-----------------------------------------------------------------+ #include @@ -59,6 +50,20 @@ namespace { using namespace CRL; + string toLower ( const string& s ) + { + string lowered; + + for ( size_t i=0 ; i 'Z') ) + lowered.push_back( s[i] ); + else + lowered.push_back( s[i] + (int)'a'-(int)'A' ); + } + return lowered; + } + + #define CHECK_STATUS(status) if ((status) != 0) return checkStatus(status); #define RETURN_CHECK_STATUS(status) return checkStatus(status); @@ -121,8 +126,10 @@ namespace { }; - int LefDriver::_units = 100; - AllianceFramework* LefDriver::_framework = NULL; + int LefDriver::_units = 100; + AllianceFramework* LefDriver::_framework = NULL; + DbU::Unit LefDriver::_sliceHeight = 0; + DbU::Unit LefDriver::_pitchWidth = 0; int LefDriver::getUnits () { return _units; } @@ -198,7 +205,9 @@ namespace { { if ( lg == NULL ) return 0; - _status = lefwStartLayerRouting ( getString(lg->getLayer()->getName()).c_str() ); + string layerName = getString(lg->getLayer()->getName()); + + _status = lefwStartLayerRouting ( layerName.c_str() ); if ( _status != 0 ) return _status; _status = lefwLayerRouting ( (lg->getDirection() == Constant::Horizontal) ? "HORIZONTAL" : "VERTICAL" @@ -215,7 +224,7 @@ namespace { _status = lefwLayerRoutingSpacing ( toLefUnits(lg->getPitch()-lg->getWireWidth()-DbU::lambda(1.0)) ); if ( _status != 0 ) return _status; - return _status = lefwEndLayerRouting ( getString(lg->getLayer()->getName()).c_str() ); + return _status = lefwEndLayerRouting ( layerName.c_str() ); } @@ -567,7 +576,7 @@ namespace { int LefDriver::_manufacturingGridCbk ( lefwCallbackType_e, lefiUserData udata ) { -#if 0 +#if 1 // The driver puts it before UNITS, which seems to displease Cadence Encounter. // So, as long as it doesn't prevent Encounter to works, disable it. LefDriver* driver = (LefDriver*)udata; diff --git a/crlcore/src/crlcore/helpers/misc.py b/crlcore/src/crlcore/helpers/misc.py index 75c1ba8b..fb51b6b5 100644 --- a/crlcore/src/crlcore/helpers/misc.py +++ b/crlcore/src/crlcore/helpers/misc.py @@ -6,6 +6,7 @@ print " - Loading Misc. configuration." # Misc. parameters. Cfg.getParamBool("misc.catchCore" ).setBool(False) Cfg.getParamBool("misc.info" ).setBool(True ) +Cfg.getParamBool("misc.paranoid" ).setBool(False) Cfg.getParamBool("misc.bug" ).setBool(False) Cfg.getParamBool("misc.logMode" ).setBool(True ) Cfg.getParamBool("misc.verboseLevel1").setBool(True ) @@ -22,6 +23,7 @@ layout.addParameter ( "Misc.", "misc.catchCore" , "Catch Core Dumps", 1 ) layout.addParameter ( "Misc.", "misc.verboseLevel1", "Verbose" , 0 ) layout.addParameter ( "Misc.", "misc.verboseLevel2", "Very Verbose" , 0 ) layout.addParameter ( "Misc.", "misc.info" , "Show Infos" , 0 ) +layout.addParameter ( "Misc.", "misc.paranoid" , "Show Everything" , 0 ) layout.addParameter ( "Misc.", "misc.bug" , "Show Bugs" , 0 ) layout.addParameter ( "Misc.", "misc.logMode" , "Output is a TTY" , 0 ) layout.addParameter ( "Misc.", "misc.traceLevel" , "Trace Level" , 1 ) diff --git a/crlcore/src/cyclop/CyclopMain.cpp b/crlcore/src/cyclop/CyclopMain.cpp index 9ff23a33..9c91461b 100644 --- a/crlcore/src/cyclop/CyclopMain.cpp +++ b/crlcore/src/cyclop/CyclopMain.cpp @@ -127,8 +127,8 @@ int main ( int argc, char *argv[] ) } System::get()->setCatchCore ( not coreDump ); - if ( verbose1 ) mstream::enable ( mstream::VerboseLevel1 ); - if ( verbose2 ) mstream::enable ( mstream::VerboseLevel2 ); + if (verbose1) mstream::enable ( mstream::Verbose0|mstream::Verbose1 ); + if (verbose2) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 ); dbo_ptr af ( AllianceFramework::create() ); diff --git a/crlcore/src/x2y/x2y.cpp b/crlcore/src/x2y/x2y.cpp index 394ea7dc..2df48370 100644 --- a/crlcore/src/x2y/x2y.cpp +++ b/crlcore/src/x2y/x2y.cpp @@ -46,8 +46,8 @@ int main(int argc, char *argv[]) { } System::get()->setCatchCore ( not coreDump ); - if ( verbose1 ) mstream::enable ( mstream::VerboseLevel1 ); - if ( verbose2 ) mstream::enable ( mstream::VerboseLevel2 ); + if (verbose1) mstream::enable ( mstream::Verbose0|mstream::Verbose1 ); + if (verbose2) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 ); AllianceFramework* af = AllianceFramework::create ();