From 2012f14acf2b65042aa03adb6f9228a4a8768ae7 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 3 Dec 2012 08:27:41 +0000 Subject: [PATCH] * All Tools: - New: Added FreeBSD/Ubuntu patches from Otacilio De Araujo (). * ./crlcore: - New: In Utilities, cbug stream to separate all the scary messages from Kite/Katabatic and maybe others. - New: In stratus1.conf, adds default settings previously in st_config. - New: Moves Python configuration helpers from under /etc/coriolis2 into PYTHON_SITE_PACKAGES/crlcore. Adapt Utilities so coriolisInit.py is now searched in that directory. This way only true configuration files remains under /etc/coriolis2 - Change: In helpers/__init__.py, do not try to guess the sysConfDir when not run through coriolisInit.py. This is done by exploring the call stack with traceback. - Change: In ApDriver, when a physical view is driven, update the flag in the catalog state telling that this view is present. This is far from satisfactory as this flag should be set as soon as any physical component is created. --- crlcore/CMakeLists.txt | 2 + crlcore/doc/UsersGuide/SoC.css | 122 ++++++++++++++---- crlcore/doc/general-index.html | 52 +++++--- crlcore/etc/CMakeLists.txt | 9 -- crlcore/etc/kite.conf | 2 +- crlcore/etc/misc.conf | 3 +- crlcore/etc/stratus1.conf | 4 + crlcore/src/CMakeLists.txt | 1 + crlcore/src/ccore/CMakeLists.txt | 2 +- crlcore/src/ccore/Utilities.cpp | 24 +++- crlcore/src/ccore/alliance/ap/ApDriver.cpp | 16 +-- crlcore/src/ccore/alliance/ap/ApParser.cpp | 39 +----- crlcore/src/ccore/alliance/vst/VstDriver.cpp | 10 +- crlcore/src/ccore/crlcore/Utilities.h | 2 + crlcore/src/ccore/toolbox/ToolBox.cpp | 4 - crlcore/src/crlcore/CMakeLists.txt | 10 ++ crlcore/{etc => src/crlcore}/coriolisInit.py | 0 .../{etc => src/crlcore}/helpers/Alliance.py | 36 +++--- .../crlcore}/helpers/Configuration.py | 70 +++++----- crlcore/{etc => src/crlcore}/helpers/Debug.py | 0 .../{etc => src/crlcore}/helpers/Display.py | 92 ++++++------- .../{etc => src/crlcore}/helpers/Patterns.py | 24 ++-- .../crlcore}/helpers/RealTechnology.py | 42 +++--- .../crlcore}/helpers/SymbolicTechnology.py | 104 +++++++-------- .../{etc => src/crlcore}/helpers/__init__.py | 59 +++++++-- .../{etc => src/crlcore}/helpers/display.py | 0 .../{etc => src/crlcore}/helpers/hMetis.py | 0 crlcore/{etc => src/crlcore}/helpers/kite.py | 0 crlcore/{etc => src/crlcore}/helpers/mauka.py | 0 crlcore/{etc => src/crlcore}/helpers/misc.py | 4 +- .../{etc => src/crlcore}/helpers/nimbus.py | 0 .../{etc => src/crlcore}/helpers/stratus1.py | 0 crlcore/src/cyclop/CMakeLists.txt | 3 +- crlcore/src/pyCRL/CMakeLists.txt | 1 + crlcore/src/x2y/CMakeLists.txt | 4 +- 35 files changed, 426 insertions(+), 315 deletions(-) create mode 100644 crlcore/src/crlcore/CMakeLists.txt rename crlcore/{etc => src/crlcore}/coriolisInit.py (100%) rename crlcore/{etc => src/crlcore}/helpers/Alliance.py (82%) rename crlcore/{etc => src/crlcore}/helpers/Configuration.py (71%) rename crlcore/{etc => src/crlcore}/helpers/Debug.py (100%) rename crlcore/{etc => src/crlcore}/helpers/Display.py (73%) rename crlcore/{etc => src/crlcore}/helpers/Patterns.py (98%) rename crlcore/{etc => src/crlcore}/helpers/RealTechnology.py (65%) rename crlcore/{etc => src/crlcore}/helpers/SymbolicTechnology.py (70%) rename crlcore/{etc => src/crlcore}/helpers/__init__.py (62%) rename crlcore/{etc => src/crlcore}/helpers/display.py (100%) rename crlcore/{etc => src/crlcore}/helpers/hMetis.py (100%) rename crlcore/{etc => src/crlcore}/helpers/kite.py (100%) rename crlcore/{etc => src/crlcore}/helpers/mauka.py (100%) rename crlcore/{etc => src/crlcore}/helpers/misc.py (83%) rename crlcore/{etc => src/crlcore}/helpers/nimbus.py (100%) rename crlcore/{etc => src/crlcore}/helpers/stratus1.py (100%) diff --git a/crlcore/CMakeLists.txt b/crlcore/CMakeLists.txt index 22859135..3ea8097b 100644 --- a/crlcore/CMakeLists.txt +++ b/crlcore/CMakeLists.txt @@ -29,6 +29,8 @@ find_package(OPENACCESS) find_package(VLSISAPD REQUIRED) find_package(HURRICANE REQUIRED) + find_package(Boost REQUIRED) + find_package(Libexecinfo REQUIRED) if(BUILD_DOC) include(UseLATEX) endif(BUILD_DOC) diff --git a/crlcore/doc/UsersGuide/SoC.css b/crlcore/doc/UsersGuide/SoC.css index 403d30e0..ec6d2f2e 100644 --- a/crlcore/doc/UsersGuide/SoC.css +++ b/crlcore/doc/UsersGuide/SoC.css @@ -4,30 +4,6 @@ html, body, th, td, tr, p, li, h1, h2, h3, h4, h5, h6 { font-family: verdana, sans-serif; } -p, li { - text-align: justify; -} - -.sc { - font-variant: small-caps; - font-size: 110%; -} - -h1, h2, h3, h4, h5, h6 { - font-family: verdana, sans-serif; -} - -h1 { text-align: left; } -h2, h3, h4, h5, h6 { text-align: left; } -h1, h2, h3 { font-family: "Liberation Serif"; - } -h1 { font-weight: normal; font-size: 170%; padding-top: 7pt; margin-top: 25pt; } -h2 { font-weight: normal; font-size: 140%; padding-top: 7pt; margin-top: 25pt; } -h3 { font-weight: bold; font-size: 118%; padding-top: 7pt; margin-top: 25pt; } -h4 { font-weight: bold; font-size: 100%; } -h5 { font-style: italic; font-size: 100%; } -h6 { font-variant: small-caps; font-size: 100%; } - body { color: black; background: white; @@ -44,6 +20,28 @@ body { margin-left: 30%; } +body.gsummary { + margin-right: 10%; + margin-left: 10%; +} + +h1, h2, h3, h4, h5, h6 { + font-family: verdana, sans-serif; +} + +h1 { text-align: left; } +h2, h3, h4, h5, h6 { text-align: left; } +h1, h2, h3 { font-family: "Liberation Serif"; + } +h1 { font-weight: normal; font-size: 170%; padding-top: 7pt; margin-top: 25pt; } +h2 { font-weight: normal; font-size: 140%; padding-top: 7pt; margin-top: 25pt; } +h3 { font-weight: bold; font-size: 118%; padding-top: 7pt; margin-top: 25pt; } +h4 { font-weight: bold; font-size: 100%; } +h5 { font-style: italic; font-size: 100%; } +h6 { font-variant: small-caps; font-size: 100%; } + +body.gsummary h1 { text-align: center; font-size: 220%; } + hr { color: #09550b; border: 1px dotted #09550b; @@ -58,6 +56,15 @@ div#centered { text-align: center; } +p, li { + text-align: justify; +} + +.sc { + font-variant: small-caps; + font-size: 110%; +} + pre, tt, code { font-family: "courrier", "andale mono", monospace; font-size: 100%; @@ -98,6 +105,32 @@ a:hover, a:focus, a:visited { border-bottom: 1px dotted #09550b; } +body.gsummary a:link, a:active { + font-size: 140%; + font-weight: bold; + text-decoration: none; + color: #09550b; + border-bottom: none; + /* + border-bottom: 1px dotted #09550b; + */ +} + +body.gsummary a:hover, a:focus, a:visited { + font-size: 120%; + font-weight: bold; + font-style: italic; + text-decoration: none; + /* + color: #A40010; + border-bottom: 1px dotted #A40010; + */ + color: #09550b; + /* + border-bottom: 1px dotted #09550b; + */ +} + p.credit { margin-left: 10%; margin-right: 10%; @@ -544,6 +577,47 @@ div.topic p.first { font-weight: bold; } +body.gsummary table { + border-collapse: collapse; + border-color: transparent; + width: 60%; + margin-left: auto; + margin-right: auto; +} + +/* +body.gsummary table th { +} +*/ + +body.gsummary table td { + border: none; +} + +/* +body.gsummary table tr td ul { + margin: 0pt; + border-left: 1px solid black; +} +*/ + +/* +body.gsummary table tr td ul li { + border-bottom: 2px dotted black; +} +*/ + +body.gsummary li { + padding: 0%; + list-style-type: none; +} + +body.gsummary ul { + padding: 0px 0px 10px 0px; + margin: 0%; + border-bottom: 1px dotted black; +} + table.wiki th, table th { color: black; background: #FFFFCC; diff --git a/crlcore/doc/general-index.html b/crlcore/doc/general-index.html index 27920d23..47bcf1a6 100644 --- a/crlcore/doc/general-index.html +++ b/crlcore/doc/general-index.html @@ -4,53 +4,65 @@ Coriolis 2 Documentation - + - +

Coriolis 2 Documentation

- +
- - - + + + + + + - - - + diff --git a/crlcore/etc/CMakeLists.txt b/crlcore/etc/CMakeLists.txt index 9b71a680..138453a3 100644 --- a/crlcore/etc/CMakeLists.txt +++ b/crlcore/etc/CMakeLists.txt @@ -1,13 +1,4 @@ - install ( FILES coriolisInit.py DESTINATION ${SYS_CONF_DIR}/coriolis2 ) - install ( FILES helpers/__init__.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/Configuration.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/Alliance.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/Display.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/Patterns.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/SymbolicTechnology.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/RealTechnology.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) - install ( FILES helpers/Debug.py DESTINATION ${SYS_CONF_DIR}/coriolis2/helpers ) install ( FILES technology_symbolic.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) install ( FILES technology_cmos130_s2r.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) install ( FILES misc.conf DESTINATION ${SYS_CONF_DIR}/coriolis2 ) diff --git a/crlcore/etc/kite.conf b/crlcore/etc/kite.conf index 67816486..bbb26a68 100644 --- a/crlcore/etc/kite.conf +++ b/crlcore/etc/kite.conf @@ -7,7 +7,7 @@ parametersTable = \ , ("katabatic.saturateRp" ,TypeInt ,8 ) , ("kite.borderRipupLimit" ,TypeInt ,26 ) # Kite parameters. - , ("kite.edgeCapacity" ,TypePercentage,65 , { 'min':0, 'max':110 } ) + , ("kite.edgeCapacity" ,TypePercentage,75 , { 'min':0, 'max':110 } ) , ("kite.eventsLimit" ,TypeInt ,4000002) , ("kite.ripupCost" ,TypeInt ,3 , { 'min':0 } ) , ("kite.globalRipupLimit" ,TypeInt ,5 , { 'min':1 } ) diff --git a/crlcore/etc/misc.conf b/crlcore/etc/misc.conf index 1e533017..20e212ef 100644 --- a/crlcore/etc/misc.conf +++ b/crlcore/etc/misc.conf @@ -3,7 +3,8 @@ parametersTable = \ ( ('misc.catchCore' , TypeBool, False) - , ('misc.info' , TypeBool, True ) + , ('misc.info' , TypeBool, False) + , ('misc.bug' , TypeBool, False) , ('misc.logMode' , TypeBool, False) , ('misc.verboseLevel1', TypeBool, True ) , ('misc.verboseLevel2', TypeBool, False) diff --git a/crlcore/etc/stratus1.conf b/crlcore/etc/stratus1.conf index 904a156f..b5f178f3 100644 --- a/crlcore/etc/stratus1.conf +++ b/crlcore/etc/stratus1.conf @@ -5,6 +5,8 @@ parametersTable = \ ( ("stratus1.mappingName", TypeString, "./stratus2sxlib.xml", { 'flags':Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist } ) + , ("stratus1.format" , TypeString, "vst") + , ("stratus1.simulator" , TypeString, "asimut") ,) @@ -13,4 +15,6 @@ layoutTable = \ ( (TypeTab ,"Stratus1", "stratus1" ) , (TypeTitle , "Stratus1 - Netlist & Layout Capture" ) , (TypeOption, "stratus1.mappingName", "Virtual Library Translation", 0, 2 ) + , (TypeOption, "stratus1.format" , "Netlist Format (vst, vhd)" , 0, 2 ) + , (TypeOption, "stratus1.simulator" , "Simulator" , 0, 2 ) ) diff --git a/crlcore/src/CMakeLists.txt b/crlcore/src/CMakeLists.txt index 6ea83480..ef64edb9 100644 --- a/crlcore/src/CMakeLists.txt +++ b/crlcore/src/CMakeLists.txt @@ -1,4 +1,5 @@ add_subdirectory(ccore) add_subdirectory(pyCRL) +add_subdirectory(crlcore) add_subdirectory(cyclop) add_subdirectory(x2y) diff --git a/crlcore/src/ccore/CMakeLists.txt b/crlcore/src/ccore/CMakeLists.txt index fda081a2..12e2d33a 100644 --- a/crlcore/src/ccore/CMakeLists.txt +++ b/crlcore/src/ccore/CMakeLists.txt @@ -31,7 +31,7 @@ ${CIF_INCLUDE_DIR} ${CONFIGURATION_INCLUDE_DIR} ${PYTHON_INCLUDE_PATH} - ${Boost_INCLUDE_DIRS} + ${Boost_INCLUDE_DIR} ) add_definitions ( -DCORIOLIS_TOP="${CORIOLIS_TOP}" diff --git a/crlcore/src/ccore/Utilities.cpp b/crlcore/src/ccore/Utilities.cpp index 08d08e1d..906661d3 100644 --- a/crlcore/src/ccore/Utilities.cpp +++ b/crlcore/src/ccore/Utilities.cpp @@ -61,6 +61,13 @@ namespace { } + void bugChanged ( Cfg::Parameter* p ) + { + if ( p->asBool() ) mstream::enable ( mstream::Bug ); + else mstream::disable ( mstream::Bug ); + } + + void catchCoreChanged ( Cfg::Parameter* p ) { System::setCatchCore ( p->asBool() ); @@ -110,6 +117,7 @@ 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 ); // ------------------------------------------------------------------- @@ -291,11 +299,14 @@ namespace CRL { // Early setting of python pathes to be able to execute configuration scripts. bfs::path pythonSitePackages = PYTHON_SITE_PACKAGES; pythonSitePackages = arguments["coriolis_top"].as() / pythonSitePackages; + _pathes.insert ( make_pair("pythonSitePackages",pythonSitePackages.string()) ); + bfs::path crlcoreDir = pythonSitePackages / "crlcore"; bfs::path stratusDir = pythonSitePackages / "stratus"; bfs::path cumulusDir = pythonSitePackages / "cumulus"; Isobar::Script::addPath ( sysConfDir.string() ); Isobar::Script::addPath ( pythonSitePackages.string() ); + Isobar::Script::addPath ( crlcoreDir.string() ); Isobar::Script::addPath ( stratusDir.string() ); Isobar::Script::addPath ( cumulusDir.string() ); @@ -306,6 +317,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.bug" ,false)->registerCb ( bugChanged ); Cfg::getParamBool ("misc.logMode" ,false)->registerCb ( logModeChanged ); Cfg::getParamInt ("misc.traceLevel" ,1000 )->registerCb ( traceLevelChanged ); Cfg::getParamString("stratus1.mappingName","./stratus2sxlib.xml")->registerCb ( stratus1MappingNameChanged ); @@ -315,6 +327,7 @@ namespace CRL { verboseLevel1Changed ( Cfg::getParamBool("misc.verboseLevel1") ); verboseLevel2Changed ( Cfg::getParamBool("misc.verboseLevel2") ); infoChanged ( Cfg::getParamBool("misc.info" ) ); + bugChanged ( Cfg::getParamBool("misc.bug" ) ); logModeChanged ( Cfg::getParamBool("misc.logMode" ) ); traceLevelChanged ( Cfg::getParamInt ("misc.traceLevel" ) ); @@ -406,8 +419,9 @@ namespace CRL { void System::_runPythonInit () { - Cfg::Configuration* conf = Cfg::Configuration::get (); - bfs::path sysConfDir = getPath("etc"); + Cfg::Configuration* conf = Cfg::Configuration::get (); + bfs::path sysConfDir = getPath("etc"); + bfs::path pythonSitePackages = getPath("pythonSitePackages"); #if XML_NOT_DISABLED bool systemConfFound = false; @@ -422,11 +436,11 @@ namespace CRL { #endif bool systemConfFound = false; - bfs::path systemConfFile = sysConfDir / "coriolisInit.py"; + bfs::path systemConfFile = pythonSitePackages / "crlcore" / "coriolisInit.py"; if ( bfs::exists(systemConfFile) ) { systemConfFound = true; - cout << " o Reading python dot configuration:" << endl; - cout << " - <" << systemConfFile.string() << ">." << endl; + //cout << " o Reading python dot configuration:" << endl; + //cout << " - <" << systemConfFile.string() << ">." << endl; Isobar::Script* systemScript = Isobar::Script::create(systemConfFile.stem()); systemScript->runFunction("coriolisConfigure",NULL,Isobar::Script::NoScriptArgs); diff --git a/crlcore/src/ccore/alliance/ap/ApDriver.cpp b/crlcore/src/ccore/alliance/ap/ApDriver.cpp index 3df0ab6c..e0529333 100644 --- a/crlcore/src/ccore/alliance/ap/ApDriver.cpp +++ b/crlcore/src/ccore/alliance/ap/ApDriver.cpp @@ -2,14 +2,9 @@ // -*- C++ -*- // // This file is part of the Coriolis Software. -// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved +// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved // -// =================================================================== -// -// $Id$ -// -// x-----------------------------------------------------------------x -// | | +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | Alliance / Hurricane Interface | // | | @@ -17,10 +12,7 @@ // | E-mail : Christophe.Alexandre@asim.lip6.fr | // | =============================================================== | // | C++ Header : "./ParsersDrivers.h" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x +// +-----------------------------------------------------------------+ #include @@ -40,6 +32,7 @@ using namespace std; #include "hurricane/Warning.h" #include "Ap.h" +#include "crlcore/Catalog.h" namespace { @@ -452,6 +445,7 @@ void apDriver( const string cellPath, Cell *cell, unsigned int &saveState) { DumpReference(ccell, cell); ccell << "EOF" << endl; ccell.close (); + CRL::CatalogExtension::setPhysical(cell, true); } } diff --git a/crlcore/src/ccore/alliance/ap/ApParser.cpp b/crlcore/src/ccore/alliance/ap/ApParser.cpp index ada9d7c0..1962183f 100644 --- a/crlcore/src/ccore/alliance/ap/ApParser.cpp +++ b/crlcore/src/ccore/alliance/ap/ApParser.cpp @@ -1,40 +1,8 @@ // -*- C++ -*- // -// This file is part of the Coriolis Project. -// Copyright (C) Laboratoire LIP6 - Departement ASIM -// Universite Pierre et Marie Curie -// -// Main contributors : -// Christophe Alexandre -// Sophie Belloeil -// Hugo Clément -// Jean-Paul Chaput -// Damien Dupuis -// Christian Masson -// Marek Sroka -// -// The Coriolis Project is free software; you can redistribute it -// and/or modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// The Coriolis Project is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with the Coriolis Project; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// License-Tag -// Authors-Tag -// -// =================================================================== -// -// $Id$ +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -44,9 +12,6 @@ // | E-mail : Christian.Masson@lip6.fr | // | =============================================================== | // | C++ Module : "./ApParser.cpp" | -// | | -// | 05/06/2008 - Jean-Paul Chaput | -// | Complete rewrite & simplification. | // +-----------------------------------------------------------------+ diff --git a/crlcore/src/ccore/alliance/vst/VstDriver.cpp b/crlcore/src/ccore/alliance/vst/VstDriver.cpp index cdec8351..46fbd84d 100644 --- a/crlcore/src/ccore/alliance/vst/VstDriver.cpp +++ b/crlcore/src/ccore/alliance/vst/VstDriver.cpp @@ -312,9 +312,9 @@ void DumpPortList(ofstream &ccell, Cell* cell) + ": " + getNetDirection(net1) + vectorType - + index1StringStream.str() - + " to " + index2StringStream.str() + + " downto " + + index1StringStream.str() + ")" + busType); } @@ -400,9 +400,9 @@ void DumpSignalList(ofstream &ccell, Cell* cell) << name << string(biggestName - name.size() + 1, ' ') << ": bit_vector(" - << index1StringStream.str() - << " to " << index2StringStream.str() + << " downto " + << index1StringStream.str() << ");" << endl; } @@ -552,7 +552,7 @@ void DumpConnectionList(ofstream &ccell, Instance*instance) if (vectorFound) { - if (index2 < index1) + if (index2 > index1) reverse(plugConnectedVector.begin(), plugConnectedVector.end()); string connections; PlugVector::const_iterator pvit = plugConnectedVector.begin(); diff --git a/crlcore/src/ccore/crlcore/Utilities.h b/crlcore/src/ccore/crlcore/Utilities.h index af01db7a..940b375c 100644 --- a/crlcore/src/ccore/crlcore/Utilities.h +++ b/crlcore/src/ccore/crlcore/Utilities.h @@ -265,6 +265,7 @@ inline std::string tty::bgcolor ( unsigned int mask ) , Verbose1 = (1<<1) , Verbose2 = (1<<2) , Info = (1<<3) + , Bug = (1<<4) , VerboseLevel0 = Verbose0 , VerboseLevel1 = Verbose0|Verbose1 , VerboseLevel2 = Verbose0|Verbose1|Verbose2 @@ -343,6 +344,7 @@ extern mstream cmess0; extern mstream cmess1; extern mstream cmess2; extern mstream cinfo; +extern mstream cbug; // ------------------------------------------------------------------- diff --git a/crlcore/src/ccore/toolbox/ToolBox.cpp b/crlcore/src/ccore/toolbox/ToolBox.cpp index 9a909fb8..d3f94173 100644 --- a/crlcore/src/ccore/toolbox/ToolBox.cpp +++ b/crlcore/src/ccore/toolbox/ToolBox.cpp @@ -4,10 +4,6 @@ // This file is part of the Coriolis Software. // Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved // -// =================================================================== -// -// $Id$ -// // +-----------------------------------------------------------------+ // | C O R I O L I S | // | Alliance / Hurricane Interface | diff --git a/crlcore/src/crlcore/CMakeLists.txt b/crlcore/src/crlcore/CMakeLists.txt new file mode 100644 index 00000000..b4e2dd88 --- /dev/null +++ b/crlcore/src/crlcore/CMakeLists.txt @@ -0,0 +1,10 @@ + + install ( FILES coriolisInit.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore ) + install ( FILES helpers/__init__.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/Configuration.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/Alliance.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/Display.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/Patterns.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/SymbolicTechnology.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/RealTechnology.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) + install ( FILES helpers/Debug.py DESTINATION ${PYTHON_SITE_PACKAGES}/crlcore/helpers ) diff --git a/crlcore/etc/coriolisInit.py b/crlcore/src/crlcore/coriolisInit.py similarity index 100% rename from crlcore/etc/coriolisInit.py rename to crlcore/src/crlcore/coriolisInit.py diff --git a/crlcore/etc/helpers/Alliance.py b/crlcore/src/crlcore/helpers/Alliance.py similarity index 82% rename from crlcore/etc/helpers/Alliance.py rename to crlcore/src/crlcore/helpers/Alliance.py index 41c236c2..7a508fdb 100644 --- a/crlcore/etc/helpers/Alliance.py +++ b/crlcore/src/crlcore/helpers/Alliance.py @@ -43,10 +43,10 @@ def _loadAllianceConfig ( af, allianceConfig ): try: if len(entry) != 2: - raise ErrorMessage(['Malformed entry in .' - ,'Must have exactly two fields ("key", ).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Must have exactly two fields ("key", ).' + ,str(entry) + ]) key, value = entry if key == 'SYMBOLIC_TECHNOLOGY': env.setSYMBOLIC_TECHNOLOGY(value) @@ -66,10 +66,10 @@ def _loadAllianceConfig ( af, allianceConfig ): if key == 'SYSTEM_LIBRARY': for libraryEntry in value: if len(libraryEntry) != 2: - raise ErrorMessage(['Malformed system library entry in .' - ,'Must have exactly two fields ("path", ).' - ,str(libraryEntry) - ]) + raise ErrorMessage(1,['Malformed system library entry in .' + ,'Must have exactly two fields ("path", ).' + ,str(libraryEntry) + ]) libPath, mode = libraryEntry env.addSYSTEM_LIBRARY(library=libPath,mode=mode) @@ -101,16 +101,16 @@ def loadRoutingGaugesTable ( routingGaugesTable, fromFile ): try: if len(entry) != 2: - raise ErrorMessage(['Malformed entry in .' % gaugeName - ,'Must have exactly two fields ("METAL_LAYER", (parameters_list)).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' % gaugeName + ,'Must have exactly two fields ("METAL_LAYER", (parameters_list)).' + ,str(entry) + ]) if len(entry[1]) != 8: - raise ErrorMessage(['Malformed entry in .' % gaugeName - ,'Parameters list must have exactly eight fields:' - ,' (direction, type, depth, density, offset, pitch, wire_width, via_width)' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' % gaugeName + ,'Parameters list must have exactly eight fields:' + ,' (direction, type, depth, density, offset, pitch, wire_width, via_width)' + ,str(entry) + ]) gauge.addLayerGauge( RoutingLayerGauge.create( technology.getLayer(entry[0]) , entry[1][0] # Direction. @@ -142,7 +142,7 @@ def loadCellGaugesTable ( cellGaugesTable, fromFile ): try: if len(gaugeDatas) != 4: - raise ErrorMessage(['Malformed gaugeDatas in .' % gaugeName + raise ErrorMessage(1,['Malformed gaugeDatas in .' % gaugeName ,'Parameters list must have exactly four fields:' ,' (terminal_metal, xy_common_pitch, slice_height, slice_step)' ,str(gaugeDatas) diff --git a/crlcore/etc/helpers/Configuration.py b/crlcore/src/crlcore/helpers/Configuration.py similarity index 71% rename from crlcore/etc/helpers/Configuration.py rename to crlcore/src/crlcore/helpers/Configuration.py index cc4ba959..ef5de2ee 100644 --- a/crlcore/etc/helpers/Configuration.py +++ b/crlcore/src/crlcore/helpers/Configuration.py @@ -75,20 +75,20 @@ def loadParameters ( parametersData, fromFile ): try: if len(entry) < 3: - raise ErrorMessage(['Malformed entry in .' - ,'Less than three fields: (path_name, Type, default_value [,options]).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Less than three fields: (path_name, Type, default_value [,options]).' + ,str(entry) + ]) if len(entry) == 3: pathName, paramType, value = entry options = None elif len(entry) == 4: pathName, paramType, value, options = entry else: - raise ErrorMessage(['Malformed entry in .' - ,'More than four fields: (path_name, Type, default_value [,options]).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'More than four fields: (path_name, Type, default_value [,options]).' + ,str(entry) + ]) if paramType == TypeBool: param = Cfg.getParamBool(pathName) @@ -140,53 +140,53 @@ def loadLayout ( layoutData, fromFile ): try: if not isinstance(entry,tuple): - raise ErrorMessage(['Malformed entry in .' - ,'Not a tuple (a, b, c, ...) or (a,).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Not a tuple (a, b, c, ...) or (a,).' + ,str(entry) + ]) if entry[0] == TypeTab: if len(entry) != 3: - raise ErrorMessage(['Malformed entry in .' - ,'Tab must have exactly three fields: (TypeTab, tab_name, tag).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Tab must have exactly three fields: (TypeTab, tab_name, tag).' + ,str(entry) + ]) layoutType, tabName, tagName = entry layout.addTab ( tabName, tagName ) if not tabName: - raise ErrorMessage(['Bad entry order in .' - ,'First entry must be of Tab type.' - ]) + raise ErrorMessage(1,['Bad entry order in .' + ,'First entry must be of Tab type.' + ]) if entry[0] == TypeTitle: if len(entry) != 2: - raise ErrorMessage(['Malformed entry in .' - ,'Title must have exactly two fields: (TypeTitle, title).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Title must have exactly two fields: (TypeTitle, title).' + ,str(entry) + ]) layoutType, title = entry layout.addTitle ( tabName, title ) elif entry[0] == TypeSection: if len(entry) != 3: - raise ErrorMessage(['Malformed entry in .' - ,'Section must have exactly three fields: (TypeSection, section, column).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Section must have exactly three fields: (TypeSection, section, column).' + ,str(entry) + ]) layoutType, section, column = entry layout.addSection ( tabName, section, column ) elif entry[0] == TypeRule: if len(entry) != 1: - raise ErrorMessage(['Malformed entry in .' - ,'Rule must have exactly one fields: (TypeRule,).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Rule must have exactly one fields: (TypeRule,).' + ,str(entry) + ]) layout.addRule ( tabName ) elif entry[0] == TypeOption: if len(entry) < 4: - raise ErrorMessage(['Malformed entry in .' - ,'Option must have at least four fields: (TypeOption,path_name,text,column[,span,flags]).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Option must have at least four fields: (TypeOption,path_name,text,column[,span,flags]).' + ,str(entry) + ]) if len(entry) == 4: layoutType, pathName, text, column = entry layout.addParameter ( tabName, pathName, text, column ) diff --git a/crlcore/etc/helpers/Debug.py b/crlcore/src/crlcore/helpers/Debug.py similarity index 100% rename from crlcore/etc/helpers/Debug.py rename to crlcore/src/crlcore/helpers/Debug.py diff --git a/crlcore/etc/helpers/Display.py b/crlcore/src/crlcore/helpers/Display.py similarity index 73% rename from crlcore/etc/helpers/Display.py rename to crlcore/src/crlcore/helpers/Display.py index 9324ea89..2e413e82 100644 --- a/crlcore/etc/helpers/Display.py +++ b/crlcore/src/crlcore/helpers/Display.py @@ -41,7 +41,7 @@ def checkAttribute ( options, attribute, goodType ): if goodType == float and isinstance(options[attribute],int): return True if not isinstance(options[attribute],goodType): - raise ErrorMessage( + raise ErrorMessage( 1, ['The <%s> attribute of Drawing must be %s, not %s.' \ % (attribute,str(goodType).split("'")[1],helpers.stype(options[attribute])) ,str(options[attribute])]) @@ -50,7 +50,7 @@ def checkAttribute ( options, attribute, goodType ): def checkColor ( color ): if not isinstance(color,str): - raise ErrorMessage( + raise ErrorMessage( 1, ['The attribute of Drawing must be str, not %s.' % (helpers.stype(color)) ,str(options[attribute])]) @@ -61,11 +61,11 @@ def checkColor ( color ): if color[0] == '#': for digit in color[1:]: if not digit in string.hexdigits: - raise ErrorMessage( + raise ErrorMessage( 1, ['Non-hexadecimal digit \'%c\' in attribute of Drawing.' % digit ,color]) if len(color) != 7: - raise ErrorMessage( + raise ErrorMessage( 1, [' attribute of Drawing do not have exactly six digits.' % digit ,color]) return color @@ -73,19 +73,19 @@ def checkColor ( color ): # Try a RGB tuple (R,G,B). rgb = color.split(',') if len(rgb) != 3: - raise ErrorMessage( + raise ErrorMessage( 1, [' attribute of Drawing is neither hexa nor RGB nor predefined.' ,color]) for component in rgb: for digit in component: if not digit in string.digits: - raise ErrorMessage( + raise ErrorMessage( 1, ['Bad RGB component \'%s\' of Drawing, not an integer.' % component ,color]) value = int(component) if value < 0 or value > 255: - raise ErrorMessage( + raise ErrorMessage( 1, ['Bad RGB component \'%s\' of Drawing, not between 0 and 255.' % component ,color]) return color @@ -136,74 +136,74 @@ def loadStyleTuple ( styleTuple ): try: if styleEntry[0] == Style: if len(styleEntry) != 3: - raise ErrorMessage(['Malformed entry in .' - ,'Style must have exactly three fields: (Style,id,description).' - ,str(styleEntry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Style must have exactly three fields: (Style,id,description).' + ,str(styleEntry) + ]) styleType, styleId, description = styleEntry if not isinstance(styleId,str): - raise ErrorMessage(['The second Style field, must be a string, not a %s.' % helpers.stype(styleId) - ,str(styleEntry)]) + raise ErrorMessage(1,['The second Style field, must be a string, not a %s.' % helpers.stype(styleId) + ,str(styleEntry)]) if not isinstance(description,str): - raise ErrorMessage(['The third Style field, must be a string, not a %s.' % helpers.stype(styleId) - ,str(styleEntry)]) + raise ErrorMessage(1,['The third Style field, must be a string, not a %s.' % helpers.stype(styleId) + ,str(styleEntry)]) style = Viewer.DisplayStyle(styleId) style.setDescription(description) if not style: - raise ErrorMessage(['Bad entry order in .' - ,'First entry must be of Style type.' - ]) + raise ErrorMessage(1,['Bad entry order in .' + ,'First entry must be of Style type.' + ]) if styleEntry[0] == Inherit: if len(styleEntry) != 2: - raise ErrorMessage(['Malformed entry in .' - ,'Inherit must have exactly two fields: (Inherit,id).' - ,str(styleEntry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Inherit must have exactly two fields: (Inherit,id).' + ,str(styleEntry) + ]) styleType, styleId = styleEntry if not isinstance(styleId,str): - raise ErrorMessage(['The second Inherit field, must be a string, not a %s.' % helpers.stype(styleId) - ,str(styleEntry)]) + raise ErrorMessage(1,['The second Inherit field, must be a string, not a %s.' % helpers.stype(styleId) + ,str(styleEntry)]) style.inheritFrom(styleId) if styleEntry[0] == Darkening: if len(styleEntry) != 4: - raise ErrorMessage(['Malformed entry in .' - ,'Darkening (HSV color) must have exactly four fields: (Darkening,hue,value,saturation).' - ,str(styleEntry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Darkening (HSV color) must have exactly four fields: (Darkening,hue,value,saturation).' + ,str(styleEntry) + ]) styleType, hue, value, saturation = styleEntry if not isinstance(hue ,float) or \ not isinstance(value ,float) or \ not isinstance(saturation,float) : - raise ErrorMessage([', & fields of Darkening must be floats.' - ,'%s is (Type, %s, %s, %s)' % (str(styleEntry) - ,helpers.stype(hue) - ,helpers.stype(value) - ,helpers.stype(saturation)) - ]) + raise ErrorMessage(1,[', & fields of Darkening must be floats.' + ,'%s is (Type, %s, %s, %s)' % (str(styleEntry) + ,helpers.stype(hue) + ,helpers.stype(value) + ,helpers.stype(saturation)) + ]) style.setDarkening(Viewer.DisplayStyle.HSVr( hue, value, saturation )) elif styleEntry[0] == Group: if len(styleEntry) != 2: - raise ErrorMessage(['Malformed entry in .' - ,'Group must have exactly two fields: (Group,group).' - ,str(styleEntry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Group must have exactly two fields: (Group,group).' + ,str(styleEntry) + ]) styleType, group = styleEntry if not isinstance(group,str): - raise ErrorMessage(['The second Group field, must be a string, not a %s.' % helpers.stype(group) - ,str(styleEntry)]) + raise ErrorMessage(1,['The second Group field, must be a string, not a %s.' % helpers.stype(group) + ,str(styleEntry)]) elif styleEntry[0] == Drawing: if len(styleEntry) != 3: - raise ErrorMessage(['Malformed entry in .' - ,'Rule must have exactly three fields: (Drawing,dname,{dict}).' - ,str(styleEntry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Rule must have exactly three fields: (Drawing,dname,{dict}).' + ,str(styleEntry) + ]) styleType, name, options = styleEntry arguments = { 'group':group, 'name':name } for key in options.keys(): @@ -247,9 +247,9 @@ def loadStyles ( stylesTable, fromFile ): try: # Check for three levels of tuple for a correct . if not isinstance(stylesTable,tuple): - raise ErrorMessage(['Malformed , not even a one level deep tuple.']) + raise ErrorMessage(1,['Malformed , not even a one level deep tuple.']) if not isinstance(stylesTable[0],tuple): - raise ErrorMessage(['Malformed , only two level deep tuple.']) + raise ErrorMessage(1,['Malformed , only two level deep tuple.']) for styleTuple in stylesTable: loadStyleTuple( styleTuple ) diff --git a/crlcore/etc/helpers/Patterns.py b/crlcore/src/crlcore/helpers/Patterns.py similarity index 98% rename from crlcore/etc/helpers/Patterns.py rename to crlcore/src/crlcore/helpers/Patterns.py index d24cb8b5..f7fd297e 100755 --- a/crlcore/etc/helpers/Patterns.py +++ b/crlcore/src/crlcore/helpers/Patterns.py @@ -95,8 +95,8 @@ class Pattern ( object ): self._side = math.sqrt(4*len(self._hexa)) if pow(self._side,2) != 4*len(self._hexa): - raise ErrorMessage( 'The pattern is not square (%d bits).' - % (4*len(self._hexa)) ) + raise ErrorMessage( 1, 'The pattern is not square (%d bits).' + % (4*len(self._hexa)) ) return self._fromHexa() @@ -108,8 +108,8 @@ class Pattern ( object ): for line in bits: if self._side != len(line): - raise ErrorMessage( 'The pattern is not square (%dx%d bits).' - % (len(line),len(self._bits)) ) + raise ErrorMessage( 1, 'The pattern is not square (%dx%d bits).' + % (len(line),len(self._bits)) ) self._toHexa() return @@ -149,16 +149,16 @@ def loadPatterns ( patternsData, fromFile ): try: if not isinstance(entry,dict): - raise ErrorMessage(['Malformed entry in .' - ,'Not a dictionary {\'key1\':\'value1\', ...}.' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Not a dictionary {\'key1\':\'value1\', ...}.' + ,str(entry) + ]) if not entry.has_key('name'): - raise ErrorMessage(['Malformed entry in .' - ,'Pattern has no \'name\' key.' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Pattern has no \'name\' key.' + ,str(entry) + ]) arguments = { 'name':entry['name'] } if entry.has_key('bits'): diff --git a/crlcore/etc/helpers/RealTechnology.py b/crlcore/src/crlcore/helpers/RealTechnology.py similarity index 65% rename from crlcore/etc/helpers/RealTechnology.py rename to crlcore/src/crlcore/helpers/RealTechnology.py index 8fd61a95..c2bb6bf6 100644 --- a/crlcore/etc/helpers/RealTechnology.py +++ b/crlcore/src/crlcore/helpers/RealTechnology.py @@ -21,25 +21,25 @@ def loadRealLayers ( technology, basicLayersData ): try: if len(entry) != 3: - raise ErrorMessage(['Malformed entry in .' - ,'Must have exactly three fields: (symb_name,real_name,GDSII_extnb).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Must have exactly three fields: (symb_name,real_name,GDSII_extnb).' + ,str(entry) + ]) symbName, realName, gdsiiExtractNumber = entry if not isinstance(gdsiiExtractNumber,int): - raise ErrorMessage(['Incoherency in entry.' - ,'GDSII exctract number is not of int type (%s).' \ - % helpers.stype(gdsiiExtractNumber) - ,str(entry) - ]) + raise ErrorMessage(1,['Incoherency in entry.' + ,'GDSII exctract number is not of int type (%s).' \ + % helpers.stype(gdsiiExtractNumber) + ,str(entry) + ]) basicLayer = technology.getBasicLayer(symbName) if not basicLayer: - raise ErrorMessage(['Incoherency in entry.' - ,'The real layer "%s" associated to the GDSII "%s" do not exists.' \ - % (symbName,realName) - ,str(entry) - ]) + raise ErrorMessage(1,['Incoherency in entry.' + ,'The real layer "%s" associated to the GDSII "%s" do not exists.' \ + % (symbName,realName) + ,str(entry) + ]) basicLayer.setRealName ( realName ) basicLayer.setExtractNumber( gdsiiExtractNumber ) @@ -62,26 +62,26 @@ def loadTechnoConfig ( technology, technoConfig ): gridUnit != DbU.UnitPowerMilli and \ gridUnit != DbU.UnitPowerUnity and \ gridUnit != DbU.UnitPowerKilo: - raise ErrorMessage('In , invalid DbU unit power for gridUnit, reseting to Micro.') + raise ErrorMessage(1,'In , invalid DbU unit power for gridUnit, reseting to Micro.') else: - raise ErrorMessage(' has no defined, assuming Micro.') + raise ErrorMessage(1,' has no defined, assuming Micro.') elif key == 'gridValue': if technoConfig.has_key('gridValue'): gridValue = technoConfig['gridValue'] if not isinstance(gridUnit,float) and not isinstance(gridUnit,int): - raise ErrorMessage(['In , must be of type float (and not: %s).' - % helpers.stype(gridValue) - ]) + raise ErrorMessage(1,['In , must be of type float (and not: %s).' + % helpers.stype(gridValue) + ]) DbU.setPhysicalsPerGrid(gridValue,gridUnit) else: - raise ErrorMessage(' has no defined.') + raise ErrorMessage(1,' has no defined.') elif key == 'gridsPerLambda': if technoConfig.has_key('gridsPerLambda'): gridsPerLambda = technoConfig['gridsPerLambda'] if not isinstance(gridsPerLambda,int): - raise ErrorMessage(['In , must be of type int (and not: %s).' + raise ErrorMessage(1,['In , must be of type int (and not: %s).' % helpers.stype(gridsPerLambda) ]) DbU.setGridsPerLambda(gridsPerLambda) diff --git a/crlcore/etc/helpers/SymbolicTechnology.py b/crlcore/src/crlcore/helpers/SymbolicTechnology.py similarity index 70% rename from crlcore/etc/helpers/SymbolicTechnology.py rename to crlcore/src/crlcore/helpers/SymbolicTechnology.py index 264e867b..3e777978 100644 --- a/crlcore/etc/helpers/SymbolicTechnology.py +++ b/crlcore/src/crlcore/helpers/SymbolicTechnology.py @@ -86,7 +86,7 @@ class LayersLUT ( object ): layer = self._symbolicLayers[name] if not layer and flags&LayersLUT.MissingError: - raise ErrorMessage(['Layer <%s> is not defined (yet?).'%name]) + raise ErrorMessage(1,['Layer <%s> is not defined (yet?).'%name]) return layer @@ -101,22 +101,22 @@ def loadRealLayers ( technology, basicLayersData ): try: if len(entry) < 2: - raise ErrorMessage(['Malformed entry in .' - ,'Less than two fields: missing name and/or material.' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Less than two fields: missing name and/or material.' + ,str(entry) + ]) if len(entry) > 2: if entry[1] != BasicLayer.Material.blockage: - raise ErrorMessage(['Invalid entry in .' - ,'Only blockage material can have a third field.' - ,str(entry) - ]) + raise ErrorMessage(1,['Invalid entry in .' + ,'Only blockage material can have a third field.' + ,str(entry) + ]) routingLayer = technology.getBasicLayer(entry[2]) if not routingLayer: - raise ErrorMessage(['Incoherency in entry at.' - ,'The metal <%s> associated to the blockage doesn\'t exist (yet?).' % entry[2] - ,str(entry) - ]) + raise ErrorMessage(1,['Incoherency in entry at.' + ,'The metal <%s> associated to the blockage doesn\'t exist (yet?).' % entry[2] + ,str(entry) + ]) basicLayer = BasicLayer.create( technology , entry[0] @@ -137,28 +137,28 @@ def loadSymbolicLayers ( technology, symbolicLayersData ): try: if len(entry) != 3: - raise ErrorMessage(['Malformed entry in .' - ,'Must contains exactly three fields: ( name, type, (real_layers,) ).' - ,str(entry) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Must contains exactly three fields: ( name, type, (real_layers,) ).' + ,str(entry) + ]) name, layerType, realLayers = entry if not isinstance(layerType,SymbolicLayerType): - raise ErrorMessage(['Invalid entry in .' - ,'The layer type code is not valid, should be any of:' - ,' * TypeRegular' - ,' * TypeDiffusion' - ,' * TypeTransistor' - ,' * TypeContact' - ,' * TypeVia' - ,str(entry) - ]) + raise ErrorMessage(1,['Invalid entry in .' + ,'The layer type code is not valid, should be any of:' + ,' * TypeRegular' + ,' * TypeDiffusion' + ,' * TypeTransistor' + ,' * TypeContact' + ,' * TypeVia' + ,str(entry) + ]) if layerType.realLayerLength() != len(realLayers): - raise ErrorMessage(['Invalid entry in .' - ,'Layer of type <%s> contains %d real layers instead of %d.' \ - % (layerType,len(realLayers),layerType.realLayerLength()) - ,str(entry) - ]) + raise ErrorMessage(1,['Invalid entry in .' + ,'Layer of type <%s> contains %d real layers instead of %d.' \ + % (layerType,len(realLayers),layerType.realLayerLength()) + ,str(entry) + ]) realLayersArgs = [] for layerName in realLayers: @@ -198,23 +198,23 @@ def loadSymbolicRules ( technology, symbolicRulesTable ): try: if len(rule) != 2: - raise ErrorMessage(['Malformed entry in .' - ,'Must contains exactly two fields: ( rule_path, value ).' - ,str(rule) - ]) + raise ErrorMessage(1,['Malformed entry in .' + ,'Must contains exactly two fields: ( rule_path, value ).' + ,str(rule) + ]) if not isinstance(rule[1],int) and not isinstance(rule[1],float): - raise ErrorMessage(['Invalid entry in .' - ,'Rule value must be of integer or float type.' - ,str(rule) - ]) + raise ErrorMessage(1,['Invalid entry in .' + ,'Rule value must be of integer or float type.' + ,str(rule) + ]) value = DbU.fromLambda(rule[1]) elements = rule[0].split('.') if len(elements) < 3: - raise ErrorMessage(['Invalid entry in .' - ,'Rule name must contains at least three components: \"LAYER.category.dimension\".' - ,str(rule) - ]) + raise ErrorMessage(1,['Invalid entry in .' + ,'Rule name must contains at least three components: \"LAYER.category.dimension\".' + ,str(rule) + ]) ruleLayer = layersLUT.lookup( elements[0], LayersLUT.Symbolic|LayersLUT.MissingError ) subLayer = layersLUT.lookup( elements[1], LayersLUT.Real ) @@ -228,15 +228,15 @@ def loadSymbolicRules ( technology, symbolicRulesTable ): elif ruleTag == 'minimum.width': ruleLayer.setMinimalSize ( value ) elif ruleTag == 'minimum.side': ruleLayer.setMinimalSize ( value ) else: - raise ErrorMessage(['Invalid entry in .' - ,'Unknown rule kind: \".%s\", should be any of:' % ruleTag - ,' * "RULE_HEAD.extention.cap"' - ,' * "RULE_HEAD.extention.width"' - ,' * "RULE_HEAD.enclosure"' - ,' * "RULE_HEAD.minimum.width"' - ,' * "RULE_HEAD.minimum.side"' - ,str(rule) - ]) + raise ErrorMessage(1,['Invalid entry in .' + ,'Unknown rule kind: \".%s\", should be any of:' % ruleTag + ,' * "RULE_HEAD.extention.cap"' + ,' * "RULE_HEAD.extention.width"' + ,' * "RULE_HEAD.enclosure"' + ,' * "RULE_HEAD.minimum.width"' + ,' * "RULE_HEAD.minimum.side"' + ,str(rule) + ]) except Exception, e: ErrorMessage.wrapPrint(e,'In %s: at index %d.' % (symbolicFile,entryNo)) diff --git a/crlcore/etc/helpers/__init__.py b/crlcore/src/crlcore/helpers/__init__.py similarity index 62% rename from crlcore/etc/helpers/__init__.py rename to crlcore/src/crlcore/helpers/__init__.py index 3af1ebd5..c126020a 100644 --- a/crlcore/etc/helpers/__init__.py +++ b/crlcore/src/crlcore/helpers/__init__.py @@ -8,11 +8,11 @@ import sys import os import os.path +import re import traceback import Hurricane - -sysConfDir = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-2]) +sysConfDir = None xmlCompatMode = False @@ -26,12 +26,21 @@ def truncPath ( path ): class ErrorMessage ( Exception ): - def __init__ ( self, message ): - self._errors = [] + def __init__ ( self, code, *arguments ): + self._code = code + self._errors = [ 'Malformed call to ErrorMessage()' + , '%s' % str(arguments) ] - if isinstance(message,Exception): - text = str(message).split('\n') + text = None + if len(arguments) == 1: + if isinstance(arguments[0],Exception): text = str(arguments[0]).split('\n') + else: + self._errors = arguments[0] + elif len(arguments) > 1: + text = list(arguments) + if text: + self._errors = [] while len(text[0]) == 0: del text[0] lstrip = 0 @@ -43,8 +52,6 @@ class ErrorMessage ( Exception ): self._errors += [ line[lstrip:] ] else: self._errors += [ line.lstrip() ] - else: - self._errors = message return def __str__ ( self ): @@ -68,15 +75,23 @@ class ErrorMessage ( Exception ): self._errors += [ message ] return + def terminate ( self ): + print self + sys.exit(self._code) + + def _getCode ( self ): return self._code + + code = property(_getCode) + @staticmethod def wrapPrint ( e, footer=None ): showTrace = False if not isinstance(e,ErrorMessage): if isinstance(e,Hurricane.ConstructorError) or \ isinstance(e,Hurricane.HurricaneError): - ewrap = ErrorMessage(e) + ewrap = ErrorMessage(1,e) else: - ewrap = ErrorMessage('An unmanaged Python exception occurred:') + ewrap = ErrorMessage(3,'An unmanaged Python exception occurred:') ewrap.addMessage(str(e)) showTrace = True else: @@ -103,3 +118,27 @@ class WarningMessage ( Exception ): else: formatted += " %s" % self._warnings[i] if i+1 < len(self._warnings): formatted += "\n" return formatted + + +for (modulePath,moduleLine,contextType,lineContent) in traceback.extract_stack(): + if modulePath.endswith('/coriolisInit.py'): + + reSysConfDir = re.compile(r'.*etc\/coriolis2') + print ' o Locating configuration directory:' + + for path in sys.path: + if reSysConfDir.match(path): + sysConfDir = path + print ' - <%s>' % sysConfDir + break + + if not sysConfDir: + coriolisTop = os.getenv('CORIOLIS_TOP') + if coriolisTop == '/usr': + sysConfDir = '/etc/coriolis2' + elif coriolisTop: + sysConfDir = os.path.join(coriolisTop,'/etc/coriolis2') + else: + raise ErrorMessage( 1, [ 'Cannot locate the directoty holding the configuration files.' + , 'The path is something ending by <.../etc/coriolis2>.'] ) + break diff --git a/crlcore/etc/helpers/display.py b/crlcore/src/crlcore/helpers/display.py similarity index 100% rename from crlcore/etc/helpers/display.py rename to crlcore/src/crlcore/helpers/display.py diff --git a/crlcore/etc/helpers/hMetis.py b/crlcore/src/crlcore/helpers/hMetis.py similarity index 100% rename from crlcore/etc/helpers/hMetis.py rename to crlcore/src/crlcore/helpers/hMetis.py diff --git a/crlcore/etc/helpers/kite.py b/crlcore/src/crlcore/helpers/kite.py similarity index 100% rename from crlcore/etc/helpers/kite.py rename to crlcore/src/crlcore/helpers/kite.py diff --git a/crlcore/etc/helpers/mauka.py b/crlcore/src/crlcore/helpers/mauka.py similarity index 100% rename from crlcore/etc/helpers/mauka.py rename to crlcore/src/crlcore/helpers/mauka.py diff --git a/crlcore/etc/helpers/misc.py b/crlcore/src/crlcore/helpers/misc.py similarity index 83% rename from crlcore/etc/helpers/misc.py rename to crlcore/src/crlcore/helpers/misc.py index 4823aaaf..75c1ba8b 100644 --- a/crlcore/etc/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.bug" ).setBool(False) Cfg.getParamBool("misc.logMode" ).setBool(True ) Cfg.getParamBool("misc.verboseLevel1").setBool(True ) Cfg.getParamBool("misc.verboseLevel2").setBool(False) @@ -20,6 +21,7 @@ layout.addTitle ( "Misc.", "Miscellaneous" ) 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 Info" , 0 ) +layout.addParameter ( "Misc.", "misc.info" , "Show Infos" , 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/etc/helpers/nimbus.py b/crlcore/src/crlcore/helpers/nimbus.py similarity index 100% rename from crlcore/etc/helpers/nimbus.py rename to crlcore/src/crlcore/helpers/nimbus.py diff --git a/crlcore/etc/helpers/stratus1.py b/crlcore/src/crlcore/helpers/stratus1.py similarity index 100% rename from crlcore/etc/helpers/stratus1.py rename to crlcore/src/crlcore/helpers/stratus1.py diff --git a/crlcore/src/cyclop/CMakeLists.txt b/crlcore/src/cyclop/CMakeLists.txt index 8c41910e..73b7ce58 100644 --- a/crlcore/src/cyclop/CMakeLists.txt +++ b/crlcore/src/cyclop/CMakeLists.txt @@ -2,7 +2,7 @@ include ( ${QT_USE_FILE} ) include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore ${HURRICANE_INCLUDE_DIR} - ${Boost_INCLUDE_DIRS} + ${Boost_INCLUDE_DIR} ) set ( mocincludes Cyclop.h @@ -34,6 +34,7 @@ ${PYTHON_LIBRARIES} -lutil ${LIBXML2_LIBRARIES} + ${LIBEXECINFO_LIBRARIES} ) install ( TARGETS cyclop DESTINATION bin ) diff --git a/crlcore/src/pyCRL/CMakeLists.txt b/crlcore/src/pyCRL/CMakeLists.txt index 0d34bebb..d183a4ff 100644 --- a/crlcore/src/pyCRL/CMakeLists.txt +++ b/crlcore/src/pyCRL/CMakeLists.txt @@ -18,6 +18,7 @@ ${CIF_INCLUDE_DIR} ${CONFIGURATION_INCLUDE_DIR} ${PYTHON_INCLUDE_PATH} + ${Boost_INCLUDE_DIR} ) add_definitions ( -DCORIOLIS_TOP="${CORIOLIS_TOP}" diff --git a/crlcore/src/x2y/CMakeLists.txt b/crlcore/src/x2y/CMakeLists.txt index 1277d054..4c11bee2 100644 --- a/crlcore/src/x2y/CMakeLists.txt +++ b/crlcore/src/x2y/CMakeLists.txt @@ -10,5 +10,7 @@ link_directories ( ${CRLCORE_BINARY_DIR}/src/ccore ) add_executable ( cx2y ${cpps} ) - target_link_libraries ( cx2y crlcore ) + target_link_libraries ( cx2y crlcore + ${LIBEXECINFO_LIBRARIES} + ) install ( TARGETS cx2y DESTINATION bin )
- -
  • STRATUS
    - Netlist Capture Language (Python) -
-
-
- + +
+
  • DpGen
    Stratus Extension for Data-Pathes
+
  • CrlCore
    + Coriolis Core, Interface Documentation +
- - +
  • Unicorn
    + Coriolis Main Application +
+
-