2010-03-09 09:20:13 -06:00
|
|
|
// -*- C++ -*-
|
|
|
|
//
|
|
|
|
// This file is part of the Coriolis Software.
|
2015-03-17 10:42:12 -05:00
|
|
|
// Copyright (c) UPMC 2008-2015, All Rights Reserved
|
2010-03-09 09:20:13 -06:00
|
|
|
//
|
2013-04-21 10:36:06 -05:00
|
|
|
// +-----------------------------------------------------------------+
|
2010-03-09 09:20:13 -06:00
|
|
|
// | C O R I O L I S |
|
|
|
|
// | C y c l o p - S i m p l e V i e w e r |
|
|
|
|
// | |
|
|
|
|
// | Author : Jean-Paul CHAPUT |
|
|
|
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
|
|
|
// | =============================================================== |
|
|
|
|
// | C++ Module : "./CyclopMain.cpp" |
|
2013-04-21 10:36:06 -05:00
|
|
|
// +-----------------------------------------------------------------+
|
|
|
|
|
2010-03-09 09:20:13 -06:00
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
#include <vector>
|
|
|
|
#include <algorithm>
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
#include <boost/program_options.hpp>
|
2010-07-01 06:48:16 -05:00
|
|
|
namespace boptions = boost::program_options;
|
|
|
|
|
2010-03-09 09:20:13 -06:00
|
|
|
#include <QtGui>
|
Update to Qt 5, requires cmake 2.8.9. New placer: Etesian.
Update to Qt 5:
* Change: Now requires at least cmake 2.8.9.
* Change: CMakeLists.txt needs small changes. Qt modules must be found
one by one (Core, Gui, Widgets). Must add "set(CMAKE_AUTOMOC ON)"
in the top file and replace "qt4" prefix in macros by "qt5".
Added simpler macro "setup_qt()" in FindBootstrap.cmake.
* Change: No longer need to include <QGtkStyle> is is choosen by default
according to the current desktop environment.
* Change: In <hurricane>, In HApplication, launch ExceptionWidget when
a std::exception is catched instead of silently discarting it.
New placer Tool: Etesian
* New: <etesian> analytical placer. Encapsulate Coloquinte from
Gabriel Gouvine.
* New: in <documentation>, add stub demonstration ToolEngine <smurf>.
Needs to be commented.
Miscellaneous:
* New: in <boostrap> and <unicorn>, added support for Etesian, the new
analytic placer. The tool itself will be added in the next commit.
* Bug: in <CellWidget>, when shifting the display buffer, we no longer
can copy the buffer on itself (we should never have). Now go through
a temporary one (PlaneId::AutoCopy) which is added to the
DrawingPlanes. Affect "goLeft()" and "goUp()".
* Bug: In <CellWidget>, remove the WA_PaintOnScreen flag/attribute.
When it's on, no PaintEvent is transmitted to the CellWidget
when it's the central widget of the <CellViewer> (QMainWindow).
It's something I still don't understand from the doc of Qt.
* Change: In <AreaCommand>, use the PlaneId enumeration instead of a
anonymous numerical index.
* Change: In <HApplication>, no longer catch and silently discard
standartd exceptions but launch the ExceptionWidget...
Suppress the now deprecated constructor with "Type" argument.
* Change: In <SelectionModel>, the "reset()" method is deprecated in
Qt5, instead enclose the "clear()" by a "beginResetModel()" and
"endResetModel()" pair.
* New: In <crlcore>, add support for ISPD05 benchmarks (in Bookshelf
format). Forked from ISPD04 and not finished yet.
* Change: In <Mauka>, distinguish the Action string identifier from
<Etesian>
* New: In <unicorn>, add entry for ISPD05 loader. Add entry for
<Etesian> analytic placer.
2014-03-22 05:50:36 -05:00
|
|
|
#if (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) and \
|
|
|
|
(QT_VERSION < QT_VERSION_CHECK(5,0,0)) and \
|
2014-07-23 09:53:43 -05:00
|
|
|
not defined (__APPLE__) and not defined (__CYGWIN__)
|
2010-03-26 13:05:17 -05:00
|
|
|
# include <QGtkStyle>
|
|
|
|
#endif
|
2010-03-09 09:20:13 -06:00
|
|
|
|
2013-04-21 10:36:06 -05:00
|
|
|
#include "vlsisapd/utilities/Path.h"
|
2010-03-09 09:20:13 -06:00
|
|
|
#include "hurricane/DataBase.h"
|
|
|
|
#include "hurricane/Technology.h"
|
|
|
|
#include "hurricane/Layer.h"
|
|
|
|
#include "hurricane/BasicLayer.h"
|
|
|
|
#include "hurricane/Cell.h"
|
|
|
|
#include "hurricane/Warning.h"
|
|
|
|
#include "hurricane/ExtensionGo.h"
|
|
|
|
#include "hurricane/Timer.h"
|
|
|
|
#include "hurricane/viewer/Graphics.h"
|
|
|
|
#include "hurricane/viewer/CellWidget.h"
|
|
|
|
#include "hurricane/viewer/HApplication.h"
|
|
|
|
using namespace Hurricane;
|
|
|
|
|
|
|
|
#include "DemoGo.h"
|
|
|
|
#include "Cyclop.h"
|
2014-12-09 16:49:46 -06:00
|
|
|
#include "crlcore/Utilities.h"
|
2010-03-09 09:20:13 -06:00
|
|
|
using namespace CRL;
|
|
|
|
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
// Function : "printHelp()".
|
|
|
|
|
2014-12-09 16:49:46 -06:00
|
|
|
// void printHelp ()
|
|
|
|
// {
|
|
|
|
// cout << endl;
|
|
|
|
// cout << "Usage: cyclop [-v|--verbose] [-V|--very-verbose] [-D|--core-dump] \\\n"
|
|
|
|
// << " [-l|--trace-level <traceLevel>] [-c|--cell <cellName>] \\\n"
|
|
|
|
// << endl;
|
|
|
|
// cout << "Options:\n"
|
|
|
|
// << " o [-v|--verbose] : First level of verbosity.\n"
|
|
|
|
// << " o [-V|--very-verbose] : Second level of verbosity (very talkative).\n"
|
|
|
|
// << " o [-D|--core-dump] : Enable core dumping.\n"
|
|
|
|
// << " o [-l|--trace-level <traceLevel>] :\n"
|
|
|
|
// << " Sets the level of trace, trace messages with a level superior to\n"
|
|
|
|
// << " <traceLevel> will be printed on <stderr>.\n"
|
|
|
|
// << " o [-c|--cell <cellName>] :\n"
|
|
|
|
// << " The name of the Cell to load, without extention.\n"
|
|
|
|
// << endl;
|
|
|
|
// }
|
2010-03-09 09:20:13 -06:00
|
|
|
|
|
|
|
|
|
|
|
} // End of anonymous namespace.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// x-----------------------------------------------------------------x
|
|
|
|
// | Fonctions Definitions |
|
|
|
|
// x-----------------------------------------------------------------x
|
|
|
|
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
// Function : "main()".
|
|
|
|
|
|
|
|
int main ( int argc, char *argv[] )
|
|
|
|
{
|
2010-07-01 06:48:16 -05:00
|
|
|
|
2010-03-09 09:20:13 -06:00
|
|
|
int returnCode = 0;
|
|
|
|
|
|
|
|
try {
|
|
|
|
unsigned int traceLevel;
|
|
|
|
bool verbose1;
|
|
|
|
bool verbose2;
|
|
|
|
bool coreDump;
|
|
|
|
bool textMode;
|
|
|
|
|
2010-07-01 06:48:16 -05:00
|
|
|
boptions::options_description options ("Command line arguments & options");
|
2010-03-09 09:20:13 -06:00
|
|
|
options.add_options()
|
|
|
|
( "help,h" , "Print this help." )
|
2010-07-01 06:48:16 -05:00
|
|
|
( "verbose,v" , boptions::bool_switch(&verbose1)->default_value(false)
|
2010-03-09 09:20:13 -06:00
|
|
|
, "First level of verbosity.")
|
2010-07-01 06:48:16 -05:00
|
|
|
( "very-verbose,V", boptions::bool_switch(&verbose2)->default_value(false)
|
2010-03-09 09:20:13 -06:00
|
|
|
, "Second level of verbosity.")
|
2010-07-01 06:48:16 -05:00
|
|
|
( "core-dump,D" , boptions::bool_switch(&coreDump)->default_value(false)
|
2010-03-09 09:20:13 -06:00
|
|
|
, "Enable core dumping.")
|
2010-07-01 06:48:16 -05:00
|
|
|
( "text,t" , boptions::bool_switch(&textMode)->default_value(false)
|
2010-03-09 09:20:13 -06:00
|
|
|
, "Run in pure text mode.")
|
2010-07-01 06:48:16 -05:00
|
|
|
( "trace-level,l" , boptions::value<unsigned int>(&traceLevel)->default_value(1000)
|
2010-03-09 09:20:13 -06:00
|
|
|
, "Set the level of trace, trace messages with a level superior to "
|
|
|
|
"<arg> will be printed on <stderr>." )
|
2010-07-01 06:48:16 -05:00
|
|
|
( "cell,c" , boptions::value<string>()
|
2010-03-09 09:20:13 -06:00
|
|
|
, "The name of the cell to load, whithout extension." );
|
|
|
|
|
2010-07-01 06:48:16 -05:00
|
|
|
boptions::variables_map arguments;
|
|
|
|
boptions::store ( boptions::parse_command_line(argc,argv,options), arguments );
|
|
|
|
boptions::notify ( arguments );
|
|
|
|
|
2013-04-21 10:36:06 -05:00
|
|
|
Utilities::Path userConfFile ( "ma/configuration" );
|
New Library Manager Widget. Access with Tools menu or CTRL+M.
* New: In CRL Core, created a LibraryManager widget. It provides a
composite information based on what is present, for each
Alliance library:
1. - A Cell in memory, without Catalog::State.
2. - A Catalog::State, with or whithout the Cell in memory.
3. - The files of the Cell in the librariy's directory.
4. - A file with a format referenced for one of the importers.
File type recognition is based *only* on the file extension,
so it may easily confused. Be careful about what you put in
the library's directory.
One of the big limitation is that it will not display Hurricane
libraries that do not have the AllianceLibrary extension.
This widget is put in a separate library <libmanager>, included
in the default CRLCORE_LIBRARIES.
* Change: In CRL Core, in State (through the loader), now sets the
InMemory flag (event if nobody uses it yet...). Display it in
the state _getString().
In AllianceFramework, new getAllianceLibraries() method.
In CatalogExtension, make the static method "get()" publicly
accessible, for sometimes we want the whole State.
* Bug: In vlsisapd, in Path, the pathcache was not rebuild when it
should, leading to incorrect results.
* New: In vlsisapd, in Path, added a listdir() method to access the
contents of a directory and a stat() method to poll the status
of a file/directory.
Rename the ".string()" method in ".toString()" to avoid
tricky name resolution with std::string, refactor in all the
other tools.
* Change: In Hurricane, in Controller, no longer oversize the fonts
of the table's headers.
* New: In Unicorn, in UnicornGui, integrate LibraryManager.
2015-05-09 10:03:17 -05:00
|
|
|
cerr << "Mark:" << userConfFile.toString() << endl;
|
2010-03-09 09:20:13 -06:00
|
|
|
|
|
|
|
if ( arguments.count("help") ) {
|
|
|
|
cout << options << endl;
|
|
|
|
exit ( 0 );
|
|
|
|
}
|
|
|
|
|
2010-06-22 08:55:37 -05:00
|
|
|
System::get()->setCatchCore ( not coreDump );
|
2013-12-03 19:47:34 -06:00
|
|
|
if (verbose1) mstream::enable ( mstream::Verbose0|mstream::Verbose1 );
|
|
|
|
if (verbose2) mstream::enable ( mstream::Verbose0|mstream::Verbose1|mstream::Verbose2 );
|
2010-03-09 09:20:13 -06:00
|
|
|
|
|
|
|
dbo_ptr<AllianceFramework> af ( AllianceFramework::create() );
|
|
|
|
|
* ./crlcore:
- New: In AllianceFramework constructor, now look for an XML configuration
file in the current directory (<cwd>/.environment.alliance.xml).
- New: DefParser, DefDriver & LefDriver are replaced by DefImport, DefExport
and LefExport (resp.). LEF/DEF parser/driver are no longer integrated
in among Alliance ones due to too much difference in data organisation.
Instead they are build as Import/Export utilities.
- New: Iccad04Lefdef import the ICCAD'04 benchmarks into the SxLib format
suitable for Knik/Kite. They are derived from the ISPD'98 (ibm01--ibm18)
benchmarks. Many corrections are applieds to ensure a more realistic
representation.
Generate a new library from the LEF file "on the fly".
- New: Ispd04Bookshelf import the ISPD'04 benchmarks in SxLib from bookshelf.
Thoses benchmarks can be placeds whith fastplace. Unfortunatly fastplace
do not manage blocks and reduce them to standard cell which is not
usable for detailed placement. Too bad, the parser exists still.
Make uses of the new vlsisapd/bookshelf parser. A whole library is
generated "on the fly" on the basis of "one node, one Cell" (so we have
a bijection between Cell and Instance). The result of this parsing is
different from the one of the stand-alone ispd04 binary in the sense it
fits the circuit to the SxLib gauge thus changing the routing capacity:
from 16 to 20.
- Change: In ApDriver, the lookup modify the lookup table for matching
Alliance layers against Hurricane ones, "OBSTACLEx" became "BLOCKAGEx".
- Change: In default <enviromnent.alliance.xml> adds the name of the
blockage net: "^obstacleNet$". Some work over the coherency of the
blockage managment remains to be done.
- Change: In AllianceFramework, partial rewrite of the get/creation of
AllianceLibrary to fit the requirements of the "on the fly" generation
from the benchmarks loaders. And correct some bugs by the way.
- Change: In Environment, suppress any reference to LEF technology as LEF/
DEF is now used as import/exports.
- Bug: In VstDriver, perform only one lookup for global signals among all
nets and not for each instance master cell. That was making the driver
quadratic! Now it's linear and reasonably fast.
2010-08-18 15:22:10 -05:00
|
|
|
Technology* technology = DataBase::getDB()->getTechnology();
|
2010-03-09 09:20:13 -06:00
|
|
|
// technology->setWorkingLayer ( "cut0" );
|
|
|
|
// technology->setWorkingLayer ( "cut1" );
|
|
|
|
// technology->setWorkingLayer ( "cut2" );
|
|
|
|
// technology->setWorkingLayer ( "cut3" );
|
|
|
|
// technology->setWorkingLayer ( "cut4" );
|
|
|
|
// technology->setWorkingLayer ( "cut5" );
|
|
|
|
// technology->setWorkingLayer ( "METAL1" );
|
|
|
|
// technology->setWorkingLayer ( "METAL2" );
|
|
|
|
// technology->setWorkingLayer ( "METAL3" );
|
|
|
|
// technology->setWorkingLayer ( "METAL4" );
|
|
|
|
// technology->setWorkingLayer ( "METAL5" );
|
|
|
|
// technology->setWorkingLayer ( "METAL6" );
|
|
|
|
// technology->setWorkingLayer ( "VIA12" );
|
|
|
|
// technology->setWorkingLayer ( "VIA23" );
|
|
|
|
// technology->setWorkingLayer ( "VIA34" );
|
|
|
|
// technology->setWorkingLayer ( "VIA45" );
|
|
|
|
// technology->setWorkingLayer ( "VIA56" );
|
|
|
|
|
* ./crlcore:
- New: In AllianceFramework constructor, now look for an XML configuration
file in the current directory (<cwd>/.environment.alliance.xml).
- New: DefParser, DefDriver & LefDriver are replaced by DefImport, DefExport
and LefExport (resp.). LEF/DEF parser/driver are no longer integrated
in among Alliance ones due to too much difference in data organisation.
Instead they are build as Import/Export utilities.
- New: Iccad04Lefdef import the ICCAD'04 benchmarks into the SxLib format
suitable for Knik/Kite. They are derived from the ISPD'98 (ibm01--ibm18)
benchmarks. Many corrections are applieds to ensure a more realistic
representation.
Generate a new library from the LEF file "on the fly".
- New: Ispd04Bookshelf import the ISPD'04 benchmarks in SxLib from bookshelf.
Thoses benchmarks can be placeds whith fastplace. Unfortunatly fastplace
do not manage blocks and reduce them to standard cell which is not
usable for detailed placement. Too bad, the parser exists still.
Make uses of the new vlsisapd/bookshelf parser. A whole library is
generated "on the fly" on the basis of "one node, one Cell" (so we have
a bijection between Cell and Instance). The result of this parsing is
different from the one of the stand-alone ispd04 binary in the sense it
fits the circuit to the SxLib gauge thus changing the routing capacity:
from 16 to 20.
- Change: In ApDriver, the lookup modify the lookup table for matching
Alliance layers against Hurricane ones, "OBSTACLEx" became "BLOCKAGEx".
- Change: In default <enviromnent.alliance.xml> adds the name of the
blockage net: "^obstacleNet$". Some work over the coherency of the
blockage managment remains to be done.
- Change: In AllianceFramework, partial rewrite of the get/creation of
AllianceLibrary to fit the requirements of the "on the fly" generation
from the benchmarks loaders. And correct some bugs by the way.
- Change: In Environment, suppress any reference to LEF technology as LEF/
DEF is now used as import/exports.
- Bug: In VstDriver, perform only one lookup for global signals among all
nets and not for each instance master cell. That was making the driver
quadratic! Now it's linear and reasonably fast.
2010-08-18 15:22:10 -05:00
|
|
|
Layer* contact = technology->getLayer("CONT_POLY");
|
|
|
|
cerr << "CONT_POLY Mask " << contact->getMask() << endl;
|
|
|
|
cerr << contact->getTop() << " is top of CONT_POLY" << endl;
|
|
|
|
cerr << contact->getBottom() << " is bottom of CONT_POLY" << endl;
|
|
|
|
|
2010-03-09 09:20:13 -06:00
|
|
|
// Layer* metal2 = technology->getLayer("METAL2");
|
|
|
|
// Layer* above = technology->getLayer("METAL2")->getMetalAbove();
|
|
|
|
// cerr << above << " is above METAL2" << endl;
|
|
|
|
|
|
|
|
// Layer* below = technology->getLayer("METAL2")->getMetalBelow();
|
|
|
|
// cerr << below << " is below METAL2" << endl;
|
|
|
|
|
|
|
|
// Layer* via = technology->getLayer("VIA23");
|
|
|
|
// cerr << via->getTop() << " is top of VIA23" << endl;
|
|
|
|
// cerr << via->getBottom() << " is bottom of VIA23" << endl;
|
|
|
|
|
|
|
|
// cerr << "VIA23 mask: " << via->getMask() << endl;
|
|
|
|
// cerr << technology->getViaBetween ( above, metal2 ) << " connects METAL2 & METAL3." << endl;
|
|
|
|
|
|
|
|
// cerr << technology->getNthMetal ( 4 ) << " is the fourth metal layer." << endl;
|
|
|
|
|
|
|
|
// Layer::Mask mask = 512;
|
|
|
|
// forEach ( Layer*, ilayer, getRangeCollection(&(technology->_getLayerMaskMap()),mask) ) {
|
|
|
|
// cerr << *ilayer << " Mask:" << (*ilayer)->getMask() << endl;
|
|
|
|
// //BasicLayer* basicLayer = dynamic_cast<BasicLayer*>(*ilayer);
|
|
|
|
// }
|
|
|
|
// af->loadLibraryCells ( "ramlib" );
|
|
|
|
|
|
|
|
Cell* cell = NULL;
|
|
|
|
|
|
|
|
if ( arguments.count("cell") ) {
|
|
|
|
cell = af->getCell (arguments["cell"].as<string>().c_str(), Catalog::State::Views );
|
2010-05-13 04:45:20 -05:00
|
|
|
if ( cell == NULL ) {
|
2010-03-09 09:20:13 -06:00
|
|
|
cerr << af->getPrint() << endl;
|
|
|
|
cerr << "[ERROR] Cell not found: " << arguments["cell"].as<string>().c_str() << endl;
|
|
|
|
exit ( -45 );
|
|
|
|
}
|
2010-05-13 04:45:20 -05:00
|
|
|
|
|
|
|
// Slot* slot = getSlot ( "_netMap", &(cell->_getNetMap()) );
|
|
|
|
// Record* record = slot->getDataRecord();
|
|
|
|
// cerr << "_netMap(0): " << record->getSlot(0)->getDataString() << endl;
|
2010-03-09 09:20:13 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( not textMode ) {
|
|
|
|
auto_ptr<QApplication> qa ( new HApplication(argc,argv) );
|
Update to Qt 5, requires cmake 2.8.9. New placer: Etesian.
Update to Qt 5:
* Change: Now requires at least cmake 2.8.9.
* Change: CMakeLists.txt needs small changes. Qt modules must be found
one by one (Core, Gui, Widgets). Must add "set(CMAKE_AUTOMOC ON)"
in the top file and replace "qt4" prefix in macros by "qt5".
Added simpler macro "setup_qt()" in FindBootstrap.cmake.
* Change: No longer need to include <QGtkStyle> is is choosen by default
according to the current desktop environment.
* Change: In <hurricane>, In HApplication, launch ExceptionWidget when
a std::exception is catched instead of silently discarting it.
New placer Tool: Etesian
* New: <etesian> analytical placer. Encapsulate Coloquinte from
Gabriel Gouvine.
* New: in <documentation>, add stub demonstration ToolEngine <smurf>.
Needs to be commented.
Miscellaneous:
* New: in <boostrap> and <unicorn>, added support for Etesian, the new
analytic placer. The tool itself will be added in the next commit.
* Bug: in <CellWidget>, when shifting the display buffer, we no longer
can copy the buffer on itself (we should never have). Now go through
a temporary one (PlaneId::AutoCopy) which is added to the
DrawingPlanes. Affect "goLeft()" and "goUp()".
* Bug: In <CellWidget>, remove the WA_PaintOnScreen flag/attribute.
When it's on, no PaintEvent is transmitted to the CellWidget
when it's the central widget of the <CellViewer> (QMainWindow).
It's something I still don't understand from the doc of Qt.
* Change: In <AreaCommand>, use the PlaneId enumeration instead of a
anonymous numerical index.
* Change: In <HApplication>, no longer catch and silently discard
standartd exceptions but launch the ExceptionWidget...
Suppress the now deprecated constructor with "Type" argument.
* Change: In <SelectionModel>, the "reset()" method is deprecated in
Qt5, instead enclose the "clear()" by a "beginResetModel()" and
"endResetModel()" pair.
* New: In <crlcore>, add support for ISPD05 benchmarks (in Bookshelf
format). Forked from ISPD04 and not finished yet.
* Change: In <Mauka>, distinguish the Action string identifier from
<Etesian>
* New: In <unicorn>, add entry for ISPD05 loader. Add entry for
<Etesian> analytic placer.
2014-03-22 05:50:36 -05:00
|
|
|
#if (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) and \
|
|
|
|
(QT_VERSION < QT_VERSION_CHECK(5,0,0)) and \
|
2014-07-23 09:53:43 -05:00
|
|
|
not defined (__APPLE__) and not defined (__CYGWIN__)
|
2010-03-26 13:05:17 -05:00
|
|
|
qa->setStyle ( new QGtkStyle() );
|
|
|
|
#endif
|
2010-03-09 09:20:13 -06:00
|
|
|
Graphics::enable ();
|
|
|
|
|
|
|
|
// Layer* layer = DataBase::getDB()->getTechnology()->getLayer("poly");
|
|
|
|
// if ( cell && cell->getName() == "inv_x1" ) {
|
|
|
|
// forEach ( Component*, icomponent, cell->getComponents(layer->getMask()) ) {
|
|
|
|
// Occurrence occurrence ( *icomponent );
|
|
|
|
// cyclop->select ( occurrence );
|
|
|
|
// cerr << "Selecting: " << occurrence << endl;
|
|
|
|
// }
|
|
|
|
// }
|
2010-04-28 10:41:35 -05:00
|
|
|
if ( cell && cell->getName() == "inv_x1" ) {
|
|
|
|
// Box box = cell->getAbutmentBox();
|
|
|
|
// DemoGo::create ( cell, box.inflate(DbU::lambda(2)) );
|
|
|
|
Reference::create ( cell, "Label", DbU::lambda(0.0), DbU::lambda(0.0), Reference::Label );
|
|
|
|
}
|
2010-03-09 09:20:13 -06:00
|
|
|
|
|
|
|
dbo_ptr<Cyclop> cyclop ( Cyclop::create() );
|
|
|
|
cmess1 << cyclop->getBanner() << endl;;
|
|
|
|
cmess2 << af->getPrint() << endl;
|
|
|
|
|
|
|
|
cyclop->setCell ( cell );
|
|
|
|
cyclop->show();
|
|
|
|
//cyclop->getCellWidget()->setLayerVisible ( Name("metal1"), false );
|
|
|
|
|
|
|
|
returnCode = qa->exec();
|
|
|
|
}
|
|
|
|
}
|
2010-07-01 06:48:16 -05:00
|
|
|
catch ( Error& e ) {
|
|
|
|
cerr << e.what() << endl;
|
|
|
|
exit ( 1 );
|
|
|
|
}
|
|
|
|
catch ( boptions::error& e ) {
|
2010-04-28 10:41:35 -05:00
|
|
|
cerr << "[ERROR] " << e.what() << endl;
|
|
|
|
exit ( 1 );
|
|
|
|
}
|
2010-07-01 06:48:16 -05:00
|
|
|
catch ( exception& e ) {
|
|
|
|
cerr << "[ERROR] " << e.what() << endl;
|
2010-03-09 09:20:13 -06:00
|
|
|
exit ( 1 );
|
|
|
|
}
|
|
|
|
catch ( ... ) {
|
|
|
|
cout << "[ERROR] Abnormal termination: unmanaged exception.\n" << endl;
|
|
|
|
exit ( 2 );
|
|
|
|
}
|
|
|
|
|
|
|
|
return returnCode;
|
|
|
|
}
|