2010-03-09 09:20:13 -06:00
|
|
|
// -*- C++ -*-
|
|
|
|
//
|
|
|
|
// This file is part of the Coriolis Software.
|
2016-01-20 17:41:19 -06:00
|
|
|
// Copyright (c) UPMC 2008-2016, 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 {
|
2016-05-17 16:00:06 -05:00
|
|
|
bool verbose1;
|
|
|
|
bool verbose2;
|
|
|
|
bool coreDump;
|
|
|
|
bool textMode;
|
2010-03-09 09:20:13 -06:00
|
|
|
|
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
|
|
|
( "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
|
|
|
|
Implementation of DataBase native save/restore in JSON (step 3).
* Test: post-receive hook on server should send mail [1].
* New: In VLSISAPD, in Parameter, callback have now a tag, which the
pointer to the caller. This allow for the callback removal when
the caller is destroyed.
* New: In VLSISAPD, in WidgetDescription, when associated to a parameter,
the destructor must remove the associated callback function on
the Parameter.
* New: In Hurricane, added JSON support for Configuration, separated
from vlsisapd, as the support is not available at this point.
JSON support for Configuration, Parameter & LayoutDescription.
* Change: In Hurricane, in JsonStack, the stack of JsonObjects has been
displaced here from HurricaneHandler. This way, all
JsonObject::toData() can access the JsonOjects in the context
of the parser.
* New: In Hurricane, in DBo::toJson() added support for Entity by
reference (ids).
* New: In Hurricane, added JSON support for all Layer sub-class types.
* New: In Hurricane, in Technology, export the Layers, but must be
sorted by increasing mask value.
* New: In Hurricane, in Entity, added support for Entity by reference (ids).
* New: In Hurricane, in DataBase, added technology full support.
* New: In Hurricane, In JsonNet, move the ring rebuild management from
JsonStack to JsonNet.
* New: In Hurricane, added JSON support for NetAlias, NetExternalcomponents
(not cleanly implemented as a Relation).
* New: In Hurricane, new method Cell::fromJson() to load a cell from
a JSON file.
* New: In Hurricane, In Graphics, make it an observable, for when JSON
fully reload the graphic state, it must be able to notify other
objects (namely the Controller).
* New: In Hurricane, in ControllerWidget, observe the Graphics to regenerate
the palette as needed. New method ControllerTab::graphicsUpdated().
* New: In Hurricane, in RawDrawingStyle added a destructor to release the
Qt pen/brush. Added JSON support for HSVr, DrawingStyle, DrawingGroup,
& DisplayStyle.
* New: In Hurricane, in GraphicsWidget, rewrite correctly the readGraphics()
to erase the previous widgets and re-create the new ones.
* New: In Hurricane, in PaletteWidget, correct re-creation of the layout/widgets
in case of Graphics change.
* New: In CRL Core, in System, register the parameters callbacks with
the address of the object, for later deletion.
* New: In CRL Core, in AllianceFramework, make it observable, to notify
library changes. For the AllianceFramework creation, now allow to
completly bypass the Python initialization system, when we expect
to restore it from a full blob. Added methods to sets the default
RoutingGauge & CellGauge.
* New: In CRL Core, added JSON suppport for CellGauge, RoutingLayerGauge
& RoutingGauge.
* New: In CRL Core, in LibraryManager, oberver AllianceFramework, to update
the list of libraries in case of change (for JSON full reload).
2016-02-20 14:24:44 -06:00
|
|
|
dbo_ptr<AllianceFramework> af ( AllianceFramework::get() );
|
2010-03-09 09:20:13 -06:00
|
|
|
|
* ./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;
|
|
|
|
}
|