Merge branch 'devel' into 'serge/changes'

# Conflicts:
#   Seabreeze/CMakeLists.txt
#   anabatic/CMakeLists.txt
#   anabatic/src/CMakeLists.txt
#   bootstrap/CMakeLists.txt
#   bora/CMakeLists.txt
#   crlcore/CMakeLists.txt
#   crlcore/src/cyclop/CMakeLists.txt
#   crlcore/src/pyCRL/CMakeLists.txt
#   crlcore/src/x2y/CMakeLists.txt
#   etesian/CMakeLists.txt
#   etesian/src/CMakeLists.txt
#   flute/CMakeLists.txt
#   flute/src/3.1/CMakeLists.txt
#   foehn/CMakeLists.txt
#   hurricane/CMakeLists.txt
#   hurricane/src/isobar/CMakeLists.txt
#   ispd/CMakeLists.txt
#   karakaze/CMakeLists.txt
#   katana/CMakeLists.txt
#   katana/src/CMakeLists.txt
#   oroshi/CMakeLists.txt
#   stratus1/CMakeLists.txt
#   tutorial/CMakeLists.txt
#   unicorn/CMakeLists.txt
#   unittests/CMakeLists.txt
This commit is contained in:
Serge Rabyking 2023-07-03 18:44:34 +00:00
commit 1ea1a402e6
43 changed files with 181 additions and 83 deletions

View File

@ -18,9 +18,9 @@
set_cmake_policies() set_cmake_policies()
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED) find_package(LEFDEF REQUIRED)
find_package(FLUTE REQUIRED) find_package(FLUTE REQUIRED)

View File

@ -18,8 +18,8 @@
set_cmake_policies() set_cmake_policies()
setup_boost() setup_boost()
setup_qt() setup_qt()
setup_python()
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(FLUTE REQUIRED) find_package(FLUTE REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)

View File

@ -3069,6 +3069,7 @@ namespace Anabatic {
if (wPitch > 1) segment->setFlags( SegWide ); if (wPitch > 1) segment->setFlags( SegWide );
if (source->canDrag() or target->canDrag()) segment->setFlags( SegDrag ); if (source->canDrag() or target->canDrag()) segment->setFlags( SegDrag );
if (dir & Flags::UseNonPref) segment->setFlags( SegNonPref ); if (dir & Flags::UseNonPref) segment->setFlags( SegNonPref );
if (dir.contains(Flags::UseNonPref|Flags::OnVSmall)) segment->setFlags( SegOnVSmall );
return segment; return segment;
} }

View File

@ -14,7 +14,6 @@ endif ( CHECK_DETERMINISM )
${QtX_INCLUDE_DIRS} ${QtX_INCLUDE_DIRS}
${Python_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}
) )
find_package (Python 3 COMPONENTS Interpreter Development.Module )
set( includes anabatic/Constants.h set( includes anabatic/Constants.h
anabatic/Configuration.h anabatic/Configuration.h
anabatic/Matrix.h anabatic/Matrix.h

View File

@ -132,6 +132,7 @@ namespace Anabatic {
const BaseFlags Flags::NoMinLength = (1L << 37); const BaseFlags Flags::NoMinLength = (1L << 37);
const BaseFlags Flags::NoSegExt = (1L << 38); const BaseFlags Flags::NoSegExt = (1L << 38);
const BaseFlags Flags::NullLength = (1L << 39); const BaseFlags Flags::NullLength = (1L << 39);
const BaseFlags Flags::OnVSmall = (1L << 40);
Flags::~Flags () Flags::~Flags ()

View File

@ -278,6 +278,8 @@ namespace Anabatic {
if (flags & (VSmall|UseNonPref)) { if (flags & (VSmall|UseNonPref)) {
cdebug_log(145,0) << "case: UseNonPref" << endl; cdebug_log(145,0) << "case: UseNonPref" << endl;
if (flags & VSmall)
useNonPref.reset( Flags::UseNonPref );
AutoContact* subContact1 = AutoContactTurn::create( gcell, rp->getNet(), Session::getBuildContactLayer(rpDepth+1) ); AutoContact* subContact1 = AutoContactTurn::create( gcell, rp->getNet(), Session::getBuildContactLayer(rpDepth+1) );
AutoSegment::create( rpSourceContact, subContact1, Flags::Vertical|useNonPref ); AutoSegment::create( rpSourceContact, subContact1, Flags::Vertical|useNonPref );
rpSourceContact = subContact1; rpSourceContact = subContact1;

View File

@ -109,6 +109,7 @@ namespace Anabatic {
static const uint64_t SegNonPref = (1L<<37); static const uint64_t SegNonPref = (1L<<37);
static const uint64_t SegAtMinArea = (1L<<38); static const uint64_t SegAtMinArea = (1L<<38);
static const uint64_t SegNoMoveUp = (1L<<39); static const uint64_t SegNoMoveUp = (1L<<39);
static const uint64_t SegOnVSmall = (1L<<40);
// Masks. // Masks.
static const uint64_t SegWeakTerminal = SegStrongTerminal|SegWeakTerminal1|SegWeakTerminal2; static const uint64_t SegWeakTerminal = SegStrongTerminal|SegWeakTerminal1|SegWeakTerminal2;
static const uint64_t SegNotAligned = SegNotSourceAligned|SegNotTargetAligned; static const uint64_t SegNotAligned = SegNotSourceAligned|SegNotTargetAligned;
@ -202,6 +203,7 @@ namespace Anabatic {
inline bool isTerminal () const; inline bool isTerminal () const;
inline bool isUnbreakable () const; inline bool isUnbreakable () const;
inline bool isNonPref () const; inline bool isNonPref () const;
inline bool isNonPrefOnVSmall () const;
inline bool isDrag () const; inline bool isDrag () const;
inline bool isAtMinArea () const; inline bool isAtMinArea () const;
inline bool isNotSourceAligned () const; inline bool isNotSourceAligned () const;
@ -536,6 +538,7 @@ namespace Anabatic {
inline bool AutoSegment::isLocal () const { return not (_flags & SegGlobal); } inline bool AutoSegment::isLocal () const { return not (_flags & SegGlobal); }
inline bool AutoSegment::isUnbreakable () const { return _flags & SegUnbreakable; } inline bool AutoSegment::isUnbreakable () const { return _flags & SegUnbreakable; }
inline bool AutoSegment::isNonPref () const { return _flags & SegNonPref; } inline bool AutoSegment::isNonPref () const { return _flags & SegNonPref; }
inline bool AutoSegment::isNonPrefOnVSmall () const { return (_flags & SegNonPref) and (_flags & SegOnVSmall); }
inline bool AutoSegment::isBipoint () const { return _flags & SegBipoint; } inline bool AutoSegment::isBipoint () const { return _flags & SegBipoint; }
inline bool AutoSegment::isWeakTerminal () const { return (_rpDistance < 2); } inline bool AutoSegment::isWeakTerminal () const { return (_rpDistance < 2); }
inline bool AutoSegment::isWeakTerminal1 () const { return (_rpDistance == 1); } inline bool AutoSegment::isWeakTerminal1 () const { return (_rpDistance == 1); }

View File

@ -110,6 +110,7 @@ namespace Anabatic {
static const BaseFlags NoMinLength ; static const BaseFlags NoMinLength ;
static const BaseFlags NoSegExt ; static const BaseFlags NoSegExt ;
static const BaseFlags NullLength ; static const BaseFlags NullLength ;
static const BaseFlags OnVSmall ;
public: public:
inline Flags ( uint64_t flags = NoFlags ); inline Flags ( uint64_t flags = NoFlags );
inline Flags ( const Hurricane::BaseFlags& ); inline Flags ( const Hurricane::BaseFlags& );

View File

@ -11,7 +11,6 @@
list(INSERT CMAKE_MODULE_PATH 0 "${Bootstrap_SOURCE_DIR}/cmake_modules/") list(INSERT CMAKE_MODULE_PATH 0 "${Bootstrap_SOURCE_DIR}/cmake_modules/")
find_package(Bootstrap REQUIRED) find_package(Bootstrap REQUIRED)
# find_package(Python 3 REQUIRED COMPONENTS Interpreter Development )
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module ) find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
print_cmake_module_path() print_cmake_module_path()

View File

@ -35,6 +35,7 @@ class Builder:
self._noCache = False self._noCache = False
self._ninja = False self._ninja = False
self._clang = False self._clang = False
self._manylinux = False
self._noSystemBoost = False self._noSystemBoost = False
self._macports = False self._macports = False
self._devtoolset = 0 self._devtoolset = 0
@ -62,6 +63,7 @@ class Builder:
elif attribute == "noCache": self._noCache = value elif attribute == "noCache": self._noCache = value
elif attribute == "ninja": self._ninja = value elif attribute == "ninja": self._ninja = value
elif attribute == "clang": self._clang = value elif attribute == "clang": self._clang = value
elif attribute == "manylinux": self._manylinux = value
elif attribute == "macports": elif attribute == "macports":
self._macports = value self._macports = value
if value: self._noSystemBoost = True if value: self._noSystemBoost = True
@ -177,6 +179,7 @@ class Builder:
if self._bfd: command += [ "-D", "USE_LIBBFD:STRING=%s" % self._bfd ] if self._bfd: command += [ "-D", "USE_LIBBFD:STRING=%s" % self._bfd ]
if self._qt4: command += [ "-D", "WITH_QT4:STRING=TRUE" ] if self._qt4: command += [ "-D", "WITH_QT4:STRING=TRUE" ]
if self._openmp: command += [ "-D", "WITH_OPENMP:STRING=TRUE" ] if self._openmp: command += [ "-D", "WITH_OPENMP:STRING=TRUE" ]
if self._manylinux: command += [ "-D", "USE_MANYLINUX:STRING=TRUE" ]
command += [ "-D", "CMAKE_BUILD_TYPE:STRING=%s" % self.buildMode command += [ "-D", "CMAKE_BUILD_TYPE:STRING=%s" % self.buildMode
#, "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared #, "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared
, "-D", "CMAKE_INSTALL_PREFIX:STRING=%s" % self.installDir , "-D", "CMAKE_INSTALL_PREFIX:STRING=%s" % self.installDir

View File

@ -211,6 +211,7 @@ parser.add_option ( "--bfd" , action="store_true" ,
parser.add_option ( "--openmp" , action="store_true" , dest="openmp" , help="Enable the use of OpenMP in Gcc." ) parser.add_option ( "--openmp" , action="store_true" , dest="openmp" , help="Enable the use of OpenMP in Gcc." )
parser.add_option ( "--ninja" , action="store_true" , dest="ninja" , help="Use Ninja instead of UNIX Makefile." ) parser.add_option ( "--ninja" , action="store_true" , dest="ninja" , help="Use Ninja instead of UNIX Makefile." )
parser.add_option ( "--clang" , action="store_true" , dest="clang" , help="Force use of Clang C/C++ compiler instead of system default." ) parser.add_option ( "--clang" , action="store_true" , dest="clang" , help="Force use of Clang C/C++ compiler instead of system default." )
parser.add_option ( "--manylinux" , action="store_true" , dest="manylinux" , help="Build target is manylinux (PyPY)." )
parser.add_option ( "--make" , action="store" , type="string", dest="makeArguments" , help="Arguments to pass to make (ex: \"-j4 install\")." ) parser.add_option ( "--make" , action="store" , type="string", dest="makeArguments" , help="Arguments to pass to make (ex: \"-j4 install\")." )
parser.add_option ( "--project" , action="append" , type="string", dest="projects" , help="The name of a project to build (may appears any number of time)." ) parser.add_option ( "--project" , action="append" , type="string", dest="projects" , help="The name of a project to build (may appears any number of time)." )
parser.add_option ( "-t", "--tool" , action="append" , type="string", dest="tools" , help="The name of a tool to build (may appears any number of time)." ) parser.add_option ( "-t", "--tool" , action="append" , type="string", dest="tools" , help="The name of a tool to build (may appears any number of time)." )
@ -282,6 +283,7 @@ else:
if options.llvmtoolset: builder.llvmtoolset = options.llvmtoolset if options.llvmtoolset: builder.llvmtoolset = options.llvmtoolset
if options.bfd: builder.bfd = "ON" if options.bfd: builder.bfd = "ON"
if options.qt4: builder.qt4 = True if options.qt4: builder.qt4 = True
if options.manylinux: builder.manylinux = True
if options.openmp: builder.openmp = True if options.openmp: builder.openmp = True
if options.makeArguments: builder.makeArguments = options.makeArguments if options.makeArguments: builder.makeArguments = options.makeArguments
#if options.svnMethod: builder.svnMethod = options.svnMethod #if options.svnMethod: builder.svnMethod = options.svnMethod

View File

@ -223,6 +223,20 @@ endif()
endmacro(setup_boost) endmacro(setup_boost)
#
# Setup Python, select detection depending on USE_MANYLINUX.
#
macro(setup_python)
set(pydevelArg "Development")
if (USE_MANYLINUX)
message(STATUS "Build for manylinux")
set(pydevelArg "Development.Module")
endif()
find_package(Python 3 REQUIRED COMPONENTS Interpreter ${pydevelArg} )
endmacro()
# #
# Find Qt, the union of all the modules we need for the whole project. # Find Qt, the union of all the modules we need for the whole project.
# #

View File

@ -18,9 +18,9 @@
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_qwt() setup_qwt()
setup_python()
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED) find_package(LEFDEF REQUIRED)
find_package(FLUTE REQUIRED) find_package(FLUTE REQUIRED)

View File

@ -21,6 +21,7 @@
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
cmake_policy(SET CMP0054 NEW) cmake_policy(SET CMP0054 NEW)
@ -28,7 +29,6 @@
find_package(Libbfd) find_package(Libbfd)
endif() endif()
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(BISON REQUIRED) find_package(BISON REQUIRED)
find_package(FLEX REQUIRED) find_package(FLEX REQUIRED)

View File

@ -11,6 +11,7 @@ from coriolis.CRL import AllianceFramework, Gds, LefImport, CellGa
RoutingGauge, RoutingLayerGauge RoutingGauge, RoutingLayerGauge
from coriolis.helpers import l, u, n, overlay, io, ndaTopDir from coriolis.helpers import l, u, n, overlay, io, ndaTopDir
from coriolis.helpers.overlay import CfgCache, UpdateSession from coriolis.helpers.overlay import CfgCache, UpdateSession
from coriolis.Anabatic import StyleFlags
__all__ = [ "setup" ] __all__ = [ "setup" ]
@ -27,7 +28,7 @@ def _routing ():
rg.setSymbolic( False ) rg.setSymbolic( False )
rg.addLayerGauge( rg.addLayerGauge(
RoutingLayerGauge.create( tech.getLayer( 'Metal1' ) # metal RoutingLayerGauge.create( tech.getLayer( 'Metal1' ) # metal
, RoutingLayerGauge.Vertical # preferred routing direction , RoutingLayerGauge.Horizontal # preferred routing direction
, RoutingLayerGauge.PinOnly # layer usage , RoutingLayerGauge.PinOnly # layer usage
, 0 # depth , 0 # depth
, 0.0 # density (deprecated) , 0.0 # density (deprecated)
@ -39,7 +40,7 @@ def _routing ():
, u(0.0 ) )) # obstacle dW , u(0.0 ) )) # obstacle dW
rg.addLayerGauge( rg.addLayerGauge(
RoutingLayerGauge.create( tech.getLayer( 'Metal2' ) # metal RoutingLayerGauge.create( tech.getLayer( 'Metal2' ) # metal
, RoutingLayerGauge.Horizontal # preferred routing direction , RoutingLayerGauge.Vertical # preferred routing direction
, RoutingLayerGauge.Default # layer usage , RoutingLayerGauge.Default # layer usage
, 1 # depth , 1 # depth
, 0.0 # density (deprecated) , 0.0 # density (deprecated)
@ -48,10 +49,10 @@ def _routing ():
, u(0.28) # wire width , u(0.28) # wire width
, u(0.28) # perpandicular wire width , u(0.28) # perpandicular wire width
, u(0.26) # VIA side , u(0.26) # VIA side
, u(0.0 ) )) # obstacle dW , u(0.0 ) )) # obstacle dW
rg.addLayerGauge( rg.addLayerGauge(
RoutingLayerGauge.create( tech.getLayer( 'Metal3' ) # metal RoutingLayerGauge.create( tech.getLayer( 'Metal3' ) # metal
, RoutingLayerGauge.Vertical # preferred routing direction , RoutingLayerGauge.Horizontal # preferred routing direction
, RoutingLayerGauge.Default # layer usage , RoutingLayerGauge.Default # layer usage
, 2 # depth , 2 # depth
, 0.0 # density (deprecated) , 0.0 # density (deprecated)
@ -63,7 +64,7 @@ def _routing ():
, u(0.0 ) )) # obstacle dW , u(0.0 ) )) # obstacle dW
rg.addLayerGauge( rg.addLayerGauge(
RoutingLayerGauge.create( tech.getLayer( 'Metal4' ) # metal RoutingLayerGauge.create( tech.getLayer( 'Metal4' ) # metal
, RoutingLayerGauge.Horizontal # preferred routing direction , RoutingLayerGauge.Vertical # preferred routing direction
, RoutingLayerGauge.Default # layer usage , RoutingLayerGauge.Default # layer usage
, 3 # depth , 3 # depth
, 0.0 # density (deprecated) , 0.0 # density (deprecated)
@ -75,7 +76,7 @@ def _routing ():
, u(0.0 ) )) # obstacle dW , u(0.0 ) )) # obstacle dW
rg.addLayerGauge( rg.addLayerGauge(
RoutingLayerGauge.create( tech.getLayer( 'Metal5' ) # metal RoutingLayerGauge.create( tech.getLayer( 'Metal5' ) # metal
, RoutingLayerGauge.Vertical # preferred routing direction , RoutingLayerGauge.Horizontal # preferred routing direction
, RoutingLayerGauge.Default # layer usage , RoutingLayerGauge.Default # layer usage
, 4 # depth , 4 # depth
, 0.0 # density (deprecated) , 0.0 # density (deprecated)
@ -87,7 +88,7 @@ def _routing ():
, u(0.0 ) )) # obstacle dW , u(0.0 ) )) # obstacle dW
rg.addLayerGauge( rg.addLayerGauge(
RoutingLayerGauge.create( tech.getLayer( 'MetalTop' ) # metal RoutingLayerGauge.create( tech.getLayer( 'MetalTop' ) # metal
, RoutingLayerGauge.Horizontal # preferred routing direction , RoutingLayerGauge.Vertical # preferred routing direction
, RoutingLayerGauge.PowerSupply # layer usage , RoutingLayerGauge.PowerSupply # layer usage
, 5 # depth , 5 # depth
, 0.0 # density (deprecated) , 0.0 # density (deprecated)
@ -161,7 +162,9 @@ def _routing ():
cfg.anabatic.globalIterations = [ 1, 100 ] cfg.anabatic.globalIterations = [ 1, 100 ]
cfg.anabatic.gcell.displayMode = 1 cfg.anabatic.gcell.displayMode = 1
cfg.anabatic.gcell.displayMode = (("Boundary", 1), ("Density", 2)) cfg.anabatic.gcell.displayMode = (("Boundary", 1), ("Density", 2))
cfg.katana.disableStackedVias = True cfg.anabatic.netBuilderStyle = 'VH,3RL+'
cfg.anabatic.routingStyle = StyleFlags.VH
cfg.katana.disableStackedVias = False
cfg.katana.hTracksReservedLocal = 4 cfg.katana.hTracksReservedLocal = 4
cfg.katana.hTracksReservedLocal = [0, 20] cfg.katana.hTracksReservedLocal = [0, 20]
cfg.katana.vTracksReservedLocal = 3 cfg.katana.vTracksReservedLocal = 3

View File

@ -80,20 +80,20 @@ def _setup_techno():
setEnclosures( CONT, Poly2 , u(0.07) ) setEnclosures( CONT, Poly2 , u(0.07) )
setEnclosures( CONT, Metal1, u(0.12) ) setEnclosures( CONT, Metal1, u(0.12) )
VIA12 = createVia( tech, 'VIA12', 'Metal1', 'Via1', 'Metal2', u(0.26) ) VIA12 = createVia( tech, 'VIA12', 'Metal1', 'Via1', 'Metal2', u(0.26) )
setEnclosures( VIA12, Metal1, u(0.06) ) setEnclosures( VIA12, Metal1, (u(0.06), u(0.00)) )
setEnclosures( VIA12, Metal2, u(0.06) ) setEnclosures( VIA12, Metal2, (u(0.06), u(0.01)) )
VIA23 = createVia( tech, 'VIA23', 'Metal2', 'Via2', 'Metal3', u(0.26) ) VIA23 = createVia( tech, 'VIA23', 'Metal2', 'Via2', 'Metal3', u(0.26) )
setEnclosures( VIA23, Metal2, u(0.06) ) setEnclosures( VIA23, Metal2, (u(0.06), u(0.01)) )
setEnclosures( VIA23, Metal3, u(0.06) ) setEnclosures( VIA23, Metal3, (u(0.01), u(0.06)) )
VIA34 = createVia( tech, 'VIA34', 'Metal3', 'Via3', 'Metal4', u(0.26) ) VIA34 = createVia( tech, 'VIA34', 'Metal3', 'Via3', 'Metal4', u(0.26) )
setEnclosures( VIA34, Metal3, u(0.06) ) setEnclosures( VIA34, Metal3, (u(0.01), u(0.06)) )
setEnclosures( VIA34, Metal4, u(0.06) ) setEnclosures( VIA34, Metal4, (u(0.06), u(0.01)) )
VIA45 = createVia( tech, 'VIA45', 'Metal4', 'Via4', 'Metal5', u(0.26) ) VIA45 = createVia( tech, 'VIA45', 'Metal4', 'Via4', 'Metal5', u(0.26) )
setEnclosures( VIA45, Metal4, u(0.06) ) setEnclosures( VIA45, Metal4, (u(0.06), u(0.01)) )
setEnclosures( VIA45, Metal5, u(0.06) ) setEnclosures( VIA45, Metal5, (u(0.01), u(0.06)) )
VIA5T = createVia( tech, 'VIA5T', 'Metal5', 'Via5', 'MetalTop', u(0.26) ) VIA5T = createVia( tech, 'VIA5T', 'Metal5', 'Via5', 'MetalTop', u(0.26) )
setEnclosures( VIA5T, Metal5 , u(0.06) ) setEnclosures( VIA5T, Metal5 , (u(0.01), u(0.06)) )
setEnclosures( VIA5T, MetalTop, u(0.06) ) setEnclosures( VIA5T, MetalTop, (u(0.06), u(0.01)) )
Border = createBL( tech, 'Border', BasicLayer.Material.other, gds2Layer=63 ) Border = createBL( tech, 'Border', BasicLayer.Material.other, gds2Layer=63 )

View File

@ -110,8 +110,8 @@ namespace {
inline int getNthRouting () const; inline int getNthRouting () const;
inline void incNthRouting (); inline void incNthRouting ();
inline RoutingGauge* getRoutingGauge () const; inline RoutingGauge* getRoutingGauge () const;
inline void addPinSegment ( string name, Segment* ); inline void addPinComponent ( string name, Component* );
inline void clearPinSegments (); inline void clearPinComponents ();
private: private:
static int _unitsCbk ( lefrCallbackType_e, lefiUnits* , lefiUserData ); static int _unitsCbk ( lefrCallbackType_e, lefiUnits* , lefiUserData );
static int _layerCbk ( lefrCallbackType_e, lefiLayer* , lefiUserData ); static int _layerCbk ( lefrCallbackType_e, lefiLayer* , lefiUserData );
@ -131,7 +131,7 @@ namespace {
Net* _net; Net* _net;
string _busBits; string _busBits;
double _unitsMicrons; double _unitsMicrons;
map< string, vector<Segment*> > _pinSegments; map< string, vector<Component*> > _pinComponents;
static map<string,Layer*> _layerLut; static map<string,Layer*> _layerLut;
vector<string> _unmatchedLayers; vector<string> _unmatchedLayers;
vector<string> _errors; vector<string> _errors;
@ -173,8 +173,8 @@ namespace {
inline const vector<string>& LefParser::getErrors () const { return _errors; } inline const vector<string>& LefParser::getErrors () const { return _errors; }
inline void LefParser::pushError ( const string& error ) { _errors.push_back(error); } inline void LefParser::pushError ( const string& error ) { _errors.push_back(error); }
inline void LefParser::clearErrors () { return _errors.clear(); } inline void LefParser::clearErrors () { return _errors.clear(); }
inline void LefParser::addPinSegment ( string name, Segment* s ) { _pinSegments[name].push_back(s); } inline void LefParser::addPinComponent ( string name, Component* comp ) { _pinComponents[name].push_back(comp); }
inline void LefParser::clearPinSegments () { _pinSegments.clear(); } inline void LefParser::clearPinComponents () { _pinComponents.clear(); }
Library* LefParser::_mergeLibrary = nullptr; Library* LefParser::_mergeLibrary = nullptr;
@ -520,6 +520,8 @@ namespace {
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint]) points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint])
, parser->fromUnitsMicrons(polygon->y[ipoint]) )); , parser->fromUnitsMicrons(polygon->y[ipoint]) ));
} }
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[0])
, parser->fromUnitsMicrons(polygon->y[0]) ));
Rectilinear::create( blockageNet, blockageLayer, points ); Rectilinear::create( blockageNet, blockageLayer, points );
continue; continue;
} }
@ -577,7 +579,7 @@ namespace {
if (not isPad) parser->_pinStdPostProcess(); if (not isPad) parser->_pinStdPostProcess();
else parser->_pinPadPostProcess(); else parser->_pinPadPostProcess();
parser->clearPinSegments(); parser->clearPinComponents();
cerr << " - " << cellName cerr << " - " << cellName
<< " " << DbU::getValueString(width) << " " << DbU::getValueString(height) << " " << DbU::getValueString(width) << " " << DbU::getValueString(height)
@ -667,7 +669,7 @@ namespace {
, parser->fromUnitsMicrons( r->yh ) , parser->fromUnitsMicrons( r->yh )
); );
} }
if (segment) parser->addPinSegment( pin->name(), segment ); if (segment) parser->addPinComponent( pin->name(), segment );
//cerr << " | " << segment << endl; //cerr << " | " << segment << endl;
continue; continue;
} }
@ -678,7 +680,10 @@ namespace {
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint]) points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint])
, parser->fromUnitsMicrons(polygon->y[ipoint]) )); , parser->fromUnitsMicrons(polygon->y[ipoint]) ));
} }
Rectilinear::create( net, layer, points ); points.push_back( Point( parser->fromUnitsMicrons(polygon->x[0])
, parser->fromUnitsMicrons(polygon->y[0]) ));
Rectilinear* rectilinear = Rectilinear::create( net, layer, points );
if (rectilinear) parser->addPinComponent( pin->name(), rectilinear );
continue; continue;
} }
if (geoms->itemType(igeom) == lefiGeomClassE) { if (geoms->itemType(igeom) == lefiGeomClassE) {
@ -722,20 +727,27 @@ namespace {
const RoutingLayerGauge* gaugeMetal2 = _routingGauge->getLayerGauge( 1 ); const RoutingLayerGauge* gaugeMetal2 = _routingGauge->getLayerGauge( 1 );
Box ab = _cell->getAbutmentBox(); Box ab = _cell->getAbutmentBox();
//cerr << " @ _pinStdPostProcess" << endl; cerr << " @ _pinStdPostProcess" << endl;
for ( auto element : _pinSegments ) { for ( auto element : _pinComponents ) {
string pinName = element.first; string pinName = element.first;
vector<Segment*>& segments = element.second; vector<Component*>& components = element.second;
vector<Segment*> ongrids; vector<Segment*> ongrids;
for ( Segment* segment : segments ) { for ( Component* component : components ) {
bool isWide = (segment->getWidth() >= getMinTerminalWidth()); Segment* segment = dynamic_cast<Segment*>( component );
if (segment) {
if (component->getNet()->isSupply()) continue;
bool isWide = (segment->getWidth() >= getMinTerminalWidth());
//cerr << " > " << segment << endl; cerr << " > " << segment << endl;
if (not isVH())
cerr << "NOT isVH()" << endl;
else
cerr << "isVH()" << endl;
if (not segment->getNet()->isSupply()) {
if (isVH() and (segment->getLayer()->getMask() == metal1->getMask())) { if (isVH() and (segment->getLayer()->getMask() == metal1->getMask())) {
cerr << "isVH()" << endl;
Vertical* v = dynamic_cast<Vertical*>( segment ); Vertical* v = dynamic_cast<Vertical*>( segment );
if (v) { if (v) {
DbU::Unit nearestX = gaugeMetal2->getTrackPosition( ab.getXMin() DbU::Unit nearestX = gaugeMetal2->getTrackPosition( ab.getXMin()
@ -746,7 +758,7 @@ namespace {
if (nearestX == v->getX()) { if (nearestX == v->getX()) {
} else { } else {
DbU::Unit neighbor = nearestX DbU::Unit neighbor = nearestX
+ ((nearestX > v->getX()) ? 1 : -1) * gaugeMetal2->getPitch(); + ((nearestX > v->getX()) ? 1 : -1) * gaugeMetal2->getPitch();
//cerr << " | X:" << DbU::getValueString(v->getX()) //cerr << " | X:" << DbU::getValueString(v->getX())
// << " nearestX:" << DbU::getValueString(nearestX) // << " nearestX:" << DbU::getValueString(nearestX)
@ -772,16 +784,67 @@ namespace {
} }
} }
} }
}
if (isWide) ongrids.push_back( segment ); if (isWide) ongrids.push_back( segment );
}
Rectilinear* rectilinear = dynamic_cast<Rectilinear*>( component );
if (not (rectilinear->getLayer()->getMask() == metal1->getMask()))
continue;
if (rectilinear) {
cerr << " > " << rectilinear << endl;
vector<Box> boxes;
rectilinear->getAsRectangles( boxes );
if (component->getNet()->isSupply()) {
ongrids.push_back( Horizontal::create( rectilinear->getNet()
, rectilinear->getLayer()
, boxes.front().getYCenter()
, boxes.front().getHeight()
, _cell->getAbutmentBox().getXMin()
, _cell->getAbutmentBox().getXMax()
)
);
} else {
for ( const Box& box : boxes ) {
DbU::Unit nearestX = gaugeMetal2->getTrackPosition( ab.getXMin()
, ab.getXMax()
, box.getXCenter()
, Constant::Nearest );
DbU::Unit xmin = std::min( box.getXMin(), nearestX - gaugeMetal2->getViaWidth()/2 );
DbU::Unit xmax = std::max( box.getXMax(), nearestX + gaugeMetal2->getViaWidth()/2 );
ongrids.push_back( Vertical::create( rectilinear->getNet()
, rectilinear->getLayer()
, (xmax+xmin)/2
, xmax-xmin
, box.getYMin()
, box.getYMax()
)
);
// DbU::Unit neighbor = nearestY
// + ((nearestY > box.getYCenter()) ? 1 : -1) * gaugeMetal2->getPitch();
// if ( (box.getYMin() > neighbor)
// or (box.getYMax() < neighbor) ) {
// ongrids.push_back( Vertical::create( rectilinear->getNet()
// , rectilinear->getLayer()
// , box.getXCenter()
// , box.getWidth()
// , box.getYMin()
// , box.getYMax()
// )
// );
// }
}
}
}
} }
if (ongrids.empty()) { if (ongrids.empty()) {
cerr << Warning( "LefParser::_pinStdPostProcess(): Pin \"%s\" has no terminal ongrid." cerr << Warning( "LefParser::_pinStdPostProcess(): Pin \"%s\" has no terminal ongrid."
, pinName.c_str() ) << endl; , pinName.c_str() ) << endl;
for ( Segment* segment : segments ) { for ( Component* component : components ) {
NetExternalComponents::setExternal( segment ); NetExternalComponents::setExternal( component );
} }
} else { } else {
for ( Segment* segment : ongrids ) { for ( Segment* segment : ongrids ) {
@ -797,10 +860,10 @@ namespace {
Box ab = getCell()->getAbutmentBox(); Box ab = getCell()->getAbutmentBox();
bool isCornerPad = (_cellGauge) and (_cellGauge->getSliceHeight() == _cellGauge->getSliceStep()); bool isCornerPad = (_cellGauge) and (_cellGauge->getSliceHeight() == _cellGauge->getSliceStep());
for ( auto element : _pinSegments ) { for ( auto element : _pinComponents ) {
string pinName = element.first; string pinName = element.first;
vector<Segment*>& segments = element.second; vector<Component*>& segments = element.second;
vector<Segment*> ongrids; vector<Segment*> ongrids;
if (segments.empty()) continue; if (segments.empty()) continue;

View File

@ -1,6 +1,5 @@
# -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/ccore/cyclop>" -*- # -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/ccore/cyclop>" -*-
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore
${HURRICANE_INCLUDE_DIR} ${HURRICANE_INCLUDE_DIR}
${UTILITIES_INCLUDE_DIR} ${UTILITIES_INCLUDE_DIR}

View File

@ -32,8 +32,6 @@
-lutil -lutil
) )
find_package (Python 3 COMPONENTS Interpreter Development.Module )
add_definitions( -DCORIOLIS_TOP="${CORIOLIS_TOP}" add_definitions( -DCORIOLIS_TOP="${CORIOLIS_TOP}"
-DSYS_CONF_DIR="${SYS_CONF_DIR}" -DSYS_CONF_DIR="${SYS_CONF_DIR}"
-DPYTHON_SITE_PACKAGES="${PYTHON_SITE_PACKAGES}" -DPYTHON_SITE_PACKAGES="${PYTHON_SITE_PACKAGES}"

View File

@ -1,7 +1,6 @@
# -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/x2y> -*- # -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/x2y> -*-
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore
${HURRICANE_INCLUDE_DIR} ${HURRICANE_INCLUDE_DIR}
${UTILITIES_INCLUDE_DIR} ${UTILITIES_INCLUDE_DIR}

View File

@ -17,8 +17,8 @@
set_cmake_policies() set_cmake_policies()
setup_boost(program_options) setup_boost(program_options)
setup_python()
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
#find_package(KATABATIC REQUIRED) #find_package(KATABATIC REQUIRED)

View File

@ -10,7 +10,6 @@
${Boost_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
${Python_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}
) )
find_package (Python 3 COMPONENTS Interpreter Development.Module )
set( includes etesian/Configuration.h set( includes etesian/Configuration.h
etesian/Placement.h etesian/Placement.h
etesian/FeedCells.h etesian/FeedCells.h

View File

@ -709,6 +709,7 @@ namespace Etesian {
cmess1 << " o Converting \"" << getCell()->getName() << "\" into Coloquinte." << endl; cmess1 << " o Converting \"" << getCell()->getName() << "\" into Coloquinte." << endl;
cmess1 << ::Dots::asString(" - H-pitch" , DbU::getValueString(hpitch)) << endl; cmess1 << ::Dots::asString(" - H-pitch" , DbU::getValueString(hpitch)) << endl;
cmess1 << ::Dots::asString(" - V-pitch" , DbU::getValueString(vpitch)) << endl; cmess1 << ::Dots::asString(" - V-pitch" , DbU::getValueString(vpitch)) << endl;
cmess1 << ::Dots::asString(" - Slice height" , DbU::getValueString(sliceHeight)) << endl;
if (isFlexLib) if (isFlexLib)
cmess1 << ::Dots::asString(" - Using patches for" , "\"FlexLib\"") << endl; cmess1 << ::Dots::asString(" - Using patches for" , "\"FlexLib\"") << endl;
cmess2 << " o Looking through the hierarchy." << endl; cmess2 << " o Looking through the hierarchy." << endl;
@ -749,11 +750,16 @@ namespace Etesian {
} }
} }
} }
_surface = new coloquinte::Rectangle( (int)(topAb.getXMin() / hpitch)
, (int)(topAb.getXMax() / hpitch)
, (int)(topAb.getYMin() / vpitch)
, (int)(topAb.getYMax() / vpitch)
);
for ( Occurrence occurrence : getCell()->getTerminalNetlistInstanceOccurrences(getBlockInstance()) ) { for ( Occurrence occurrence : getCell()->getTerminalNetlistInstanceOccurrences(getBlockInstance()) ) {
++instancesNb; ++instancesNb;
Instance* instance = static_cast<Instance*>(occurrence.getEntity()); Instance* instance = static_cast<Instance*>(occurrence.getEntity());
Box instanceAb = instance->getAbutmentBox(); Box instanceAb = _bloatCells.getAb( occurrence );
string masterName = getString( instance->getMasterCell()->getName() ); string masterName = getString( instance->getMasterCell()->getName() );
DbU::Unit length = (instanceAb.getHeight() / sliceHeight) * instanceAb.getWidth(); DbU::Unit length = (instanceAb.getHeight() / sliceHeight) * instanceAb.getWidth();
if (af->isRegister(masterName)) { if (af->isRegister(masterName)) {
@ -843,10 +849,10 @@ namespace Etesian {
} }
} }
// Compute the space margin from the row length computed earlier // Compute a bloat factor to be reach 1 - densityVariation density
double spaceMargin = (double) (totalLength - usedLength) / usedLength; double bloatFactor = std::max(1.0, (1.0 - getDensityVariation()) * totalLength / usedLength);
double densityVariation = getDensityVariation(); // Limit the maximum size of cells after bloat to avoid placement issues
double bloatFactor = 1.0 + std::max(spaceMargin - densityVariation, 0.0); int maxBloatSize = _surface->width() / 8;
if (bloatFactor != 1.0) { if (bloatFactor != 1.0) {
ostringstream bf; ostringstream bf;
bf << fixed << setprecision(2) << bloatFactor << "%"; bf << fixed << setprecision(2) << bloatFactor << "%";
@ -886,7 +892,7 @@ namespace Etesian {
++xsize; ++xsize;
// Take bloat into account to compute the size // Take bloat into account to compute the size
xsize *= bloatFactor; xsize = std::max(xsize, std::min(maxBloatSize, (int) (xsize * bloatFactor)));
cellX[instanceId] = xpos; cellX[instanceId] = xpos;
cellY[instanceId] = ypos; cellY[instanceId] = ypos;
@ -1032,11 +1038,6 @@ namespace Etesian {
if (_bloatCells.getSelected()->getName() != "disabled") if (_bloatCells.getSelected()->getName() != "disabled")
cmess2 << stdCellSizes.toString(1) << endl; cmess2 << stdCellSizes.toString(1) << endl;
_surface = new coloquinte::Rectangle( (int)(topAb.getXMin() / hpitch)
, (int)(topAb.getXMax() / hpitch)
, (int)(topAb.getYMin() / vpitch)
, (int)(topAb.getYMax() / vpitch)
);
_circuit->setupRows(*_surface, rowHeight); _circuit->setupRows(*_surface, rowHeight);
_circuit->check(); _circuit->check();
_placementLB = new coloquinte::PlacementSolution (); _placementLB = new coloquinte::PlacementSolution ();

View File

@ -16,8 +16,8 @@
set_cmake_policies() set_cmake_policies()
check_distribution() check_distribution()
setup_sysconfdir( "${CMAKE_INSTALL_PREFIX}" ) setup_sysconfdir( "${CMAKE_INSTALL_PREFIX}" )
setup_python()
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED) find_package(CORIOLIS REQUIRED)

View File

@ -6,7 +6,6 @@
${CONFIGURATION_INCLUDE_DIR} ${CONFIGURATION_INCLUDE_DIR}
${Python_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}
) )
find_package (Python 3 COMPONENTS Interpreter Development.Module )
set( includes flute.h set( includes flute.h
dl.h dl.h

View File

@ -18,9 +18,9 @@
set_cmake_policies() set_cmake_policies()
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED) find_package(LEFDEF REQUIRED)
find_package(FLUTE REQUIRED) find_package(FLUTE REQUIRED)

View File

@ -20,11 +20,11 @@
cmake_policy(SET CMP0054 NEW) cmake_policy(SET CMP0054 NEW)
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(BISON REQUIRED) find_package(BISON REQUIRED)
find_package(FLEX REQUIRED) find_package(FLEX REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
if (USE_LIBBFD) if (USE_LIBBFD)

View File

@ -8,7 +8,6 @@
${Boost_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
${Python_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}
) )
find_package (Python 3 COMPONENTS Interpreter Development.Module )
set( pyCpps ProxyProperty.cpp set( pyCpps ProxyProperty.cpp
PythonAttributes.cpp PythonAttributes.cpp
PyBreakpoint.cpp PyBreakpoint.cpp

View File

@ -14,10 +14,10 @@
set_cmake_policies() set_cmake_policies()
#setup_apple() #setup_apple()
setup_boost(program_options) setup_boost(program_options)
setup_python()
set(QT_USE_QTXML "true") set(QT_USE_QTXML "true")
find_package(Qt4 REQUIRED) find_package(Qt4 REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED) find_package(CORIOLIS REQUIRED)

View File

@ -15,7 +15,7 @@
check_distribution() check_distribution()
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module ) setup_python()
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED) find_package(CORIOLIS REQUIRED)

View File

@ -18,9 +18,9 @@
set_cmake_policies() set_cmake_policies()
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED) find_package(LEFDEF REQUIRED)
find_package(FLUTE REQUIRED) find_package(FLUTE REQUIRED)

View File

@ -12,7 +12,6 @@
${Boost_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
${Python_INCLUDE_DIRS} ${Python_INCLUDE_DIRS}
) )
find_package (Python 3 COMPONENTS Interpreter Development.Module )
set( includes katana/Constants.h set( includes katana/Constants.h
katana/Block.h katana/Block.h
katana/TrackCost.h katana/TrackCost.h

View File

@ -76,6 +76,16 @@ namespace {
cdebug_tabw(159,-1); cdebug_tabw(159,-1);
return; return;
} }
if (segment->isNonPrefOnVSmall()) {
cdebug_log(159,0) << "Infinite cost from (NonPref on VSmall): " << segment << endl;
cost.setInfinite ();
cost.setOverlap ();
cost.setHardOverlap();
cost.setBlockage ();
cdebug_tabw(159,-1);
return;
}
} }
if (cost.getInterval().getVMax() > intersect.getVMax()) cost.setLeftOverlap(); if (cost.getInterval().getVMax() > intersect.getVMax()) cost.setLeftOverlap();

View File

@ -152,6 +152,7 @@ namespace Katana {
bool TrackElement::isAnalog () const { return false; } bool TrackElement::isAnalog () const { return false; }
bool TrackElement::isWide () const { return false; } bool TrackElement::isWide () const { return false; }
bool TrackElement::isNonPref () const { return false; } bool TrackElement::isNonPref () const { return false; }
bool TrackElement::isNonPrefOnVSmall () const { return false; }
bool TrackElement::isShortNet () const { return false; } bool TrackElement::isShortNet () const { return false; }
// Predicates. // Predicates.
bool TrackElement::hasSymmetric () const { return false; } bool TrackElement::hasSymmetric () const { return false; }

View File

@ -195,6 +195,7 @@ namespace Katana {
bool TrackSegment::isWide () const { return _base->isWide(); } bool TrackSegment::isWide () const { return _base->isWide(); }
bool TrackSegment::isShortNet () const { return _base->isShortNet(); } bool TrackSegment::isShortNet () const { return _base->isShortNet(); }
bool TrackSegment::isPriorityLocked () const { return _flags & PriorityLocked; } bool TrackSegment::isPriorityLocked () const { return _flags & PriorityLocked; }
bool TrackSegment::isNonPrefOnVSmall () const { return _base->isNonPrefOnVSmall(); }
// Predicates. // Predicates.
bool TrackSegment::hasSymmetric () const { return _symmetric != NULL; } bool TrackSegment::hasSymmetric () const { return _symmetric != NULL; }
// Accessors. // Accessors.

View File

@ -106,6 +106,7 @@ namespace Katana {
virtual bool isVertical () const = 0; virtual bool isVertical () const = 0;
virtual bool isWide () const; virtual bool isWide () const;
virtual bool isNonPref () const; virtual bool isNonPref () const;
virtual bool isNonPrefOnVSmall () const;
virtual bool isUnbreakable () const; virtual bool isUnbreakable () const;
virtual bool isLocal () const; virtual bool isLocal () const;
virtual bool isGlobal () const; virtual bool isGlobal () const;

View File

@ -82,6 +82,7 @@ namespace Katana {
virtual bool isAnalog () const; virtual bool isAnalog () const;
virtual bool isWide () const; virtual bool isWide () const;
virtual bool isShortNet () const; virtual bool isShortNet () const;
virtual bool isNonPrefOnVSmall () const;
virtual bool isPriorityLocked () const; virtual bool isPriorityLocked () const;
// Predicates. // Predicates.
virtual bool hasSymmetric () const; virtual bool hasSymmetric () const;

View File

@ -14,11 +14,11 @@
set_cmake_policies() set_cmake_policies()
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
setup_boost(program_options) setup_boost(program_options)
setup_python()
if (USE_LIBBFD) if (USE_LIBBFD)
find_package(Libbfd) find_package(Libbfd)
endif() endif()
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED) find_package(CORIOLIS REQUIRED)

View File

@ -12,6 +12,7 @@
list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/") list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/")
find_package(Bootstrap REQUIRED) find_package(Bootstrap REQUIRED)
setup_project_paths(CORIOLIS) setup_project_paths(CORIOLIS)
setup_python()
find_package(Bootstrap REQUIRED) find_package(Bootstrap REQUIRED)
set_cmake_policies() set_cmake_policies()
@ -19,7 +20,6 @@
cmake_policy(SET CMP0002 OLD) cmake_policy(SET CMP0002 OLD)
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED) find_package(CORIOLIS REQUIRED)

View File

@ -17,8 +17,8 @@
set_cmake_policies() set_cmake_policies()
setup_boost() setup_boost()
setup_qt() setup_qt()
setup_python()
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED) find_package(CORIOLIS REQUIRED)

View File

@ -17,9 +17,9 @@
set_cmake_policies() set_cmake_policies()
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED) find_package(LEFDEF REQUIRED)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)

View File

@ -19,12 +19,12 @@
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
if (USE_LIBBFD) if (USE_LIBBFD)
find_package(Libbfd) find_package(Libbfd)
endif() endif()
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED) find_package(LEFDEF REQUIRED)
find_package(COLOQUINTE) find_package(COLOQUINTE)

View File

@ -21,13 +21,13 @@
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}") setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
setup_boost(program_options) setup_boost(program_options)
setup_qt() setup_qt()
setup_python()
if (USE_LIBBFD) if (USE_LIBBFD)
find_package(Libbfd) find_package(Libbfd)
endif() endif()
find_package(Libexecinfo REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
find_package(PythonSitePackages REQUIRED) find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF) find_package(LEFDEF)
find_package(HURRICANE REQUIRED) find_package(HURRICANE REQUIRED)