Re-activate the LEF/DEF symbolic exporter (for benchmarking).

* Change: In bootstrap, in FindLEFDEF.cmake, adds my personal path where
    the LEF/DEF libraries are to be found (~jpc/oa/lefdef/5.7-s038/).
* Change: In CRL Core, in LEF/DEF exporters, use the default routing
    gauge and cell gauge, instead of systematically requiring "sxlib".
      IMPORTANT: In order to build a *shared* library including the
    *static* LEF/DEF libraries, those libraries, even if static, must
    be build with the "-fPIC" flag (otherwise the compiler complains).
    I have done so on my 64 bit build of LEF/DEF, but it's a completly
    *local* patch. You may have to do it manually on your installations.
This commit is contained in:
Jean-Paul Chaput 2015-06-07 14:12:00 +02:00
parent 9ac199f11b
commit 2906d90b04
3 changed files with 36 additions and 30 deletions

View File

@ -38,43 +38,46 @@
# LEFDEF_ZLEF_LIBRARY_DEBUG # LEFDEF_ZLEF_LIBRARY_DEBUG
macro ( _find_lefdef_lib varname libname ) macro( _find_lefdef_lib varname libname )
find_library ( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} ) find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname} PATHS ${LEFDEF_LIBRARY_DIR} )
find_library ( LEFDEF_${varname}_LIBRARY_DEBUG NAMES ${libname}_Debug PATHS ${LEFDEF_LIBRARY_DIR} ) find_library( LEFDEF_${varname}_LIBRARY_DEBUG NAMES ${libname}_Debug PATHS ${LEFDEF_LIBRARY_DIR} )
if ( LEFDEF_${varname}_LIBRARY_RELEASE AND NOT LEFDEF_${varname}_LIBRARY_DEBUG ) if( LEFDEF_${varname}_LIBRARY_RELEASE AND NOT LEFDEF_${varname}_LIBRARY_DEBUG )
set ( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE ) set( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE )
endif ( LEFDEF_${varname}_LIBRARY_RELEASE AND NOT LEFDEF_${varname}_LIBRARY_DEBUG ) endif()
if ( LEFDEF_${varname}_LIBRARY_DEBUG AND NOT LEFDEF_${varname}_LIBRARY_RELEASE ) if( LEFDEF_${varname}_LIBRARY_DEBUG AND NOT LEFDEF_${varname}_LIBRARY_RELEASE )
set ( LEFDEF_${varname}_LIBRARY_RELEASE LEFDEF_${varname}_LIBRARY_DEBUG CACHE STRING "Path to a library" FORCE ) set( LEFDEF_${varname}_LIBRARY_RELEASE LEFDEF_${varname}_LIBRARY_DEBUG CACHE STRING "Path to a library" FORCE )
endif ( LEFDEF_${varname}_LIBRARY_DEBUG AND NOT LEFDEF_${varname}_LIBRARY_RELEASE ) endif()
if ( LEFDEF_${varname}_LIBRARY_RELEASE ) if( LEFDEF_${varname}_LIBRARY_RELEASE )
list ( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE} list( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE}
"debug" ${LEFDEF_${varname}_LIBRARY_DEBUG} ) "debug" ${LEFDEF_${varname}_LIBRARY_DEBUG} )
set ( LEFDEF_${varname}_LIBRARY_FOUND 1 ) set( LEFDEF_${varname}_LIBRARY_FOUND 1 )
mark_as_advanced ( LEFDEF_${varname}_LIBRARY_RELEASE mark_as_advanced( LEFDEF_${varname}_LIBRARY_RELEASE
LEFDEF_${varname}_LIBRARY_DEBUG ) LEFDEF_${varname}_LIBRARY_DEBUG )
else ( LEFDEF_${varname}_LIBRARY_RELEASE ) else()
set ( LEFDEF_FOUND "NO" ) set ( LEFDEF_FOUND "NO" )
endif ( LEFDEF_${varname}_LIBRARY_RELEASE ) endif()
endmacro ( _find_lefdef_lib ) endmacro()
set ( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" ) set( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" )
set ( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" ) set( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" )
set ( LEFDEF_DIR_MESSAGE "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" ) set( LEFDEF_DIR_MESSAGE "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
# Don't even bother under Win32 # Don't even bother under Win32
if ( UNIX ) if ( UNIX )
set ( LEFDEF_FOUND "YES" ) set ( LEFDEF_FOUND "YES" )
set ( LEFDEF_SEARCH_PATH $ENV{LEFDEF_TOP} set ( LEFDEF_SEARCH_PATH "$ENV{LEFDEF_TOP}"
"/usr" "/usr"
"/opt/lefdef-5.6" "/opt/lefdef-5.6"
"/opt/lefdef-5.7" "/opt/lefdef-5.7"
"/opt/lefdef") "/opt/lefdef"
"$ENV{HOME}/oa/lefdef/5.7-s038"
)
message( STATUS "LEFDEF_SEARCH_PATH: ${LEFDEF_SEARCH_PATH}" )
set ( LEFDEF_LIBRARIES "" ) set ( LEFDEF_LIBRARIES "" )
set ( LEFDEF_LIBRARY_SEARCH_PATH "" ) set ( LEFDEF_LIBRARY_SEARCH_PATH "" )
@ -83,11 +86,13 @@ if ( UNIX )
PATHS ${LEFDEF_SEARCH_PATH} PATHS ${LEFDEF_SEARCH_PATH}
PATH_SUFFIXES "include" "include/lefdef" PATH_SUFFIXES "include" "include/lefdef"
DOC "The ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" ) DOC "The ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" )
find_path ( LEFDEF_LIBRARY_DIR NAMES "libdef.a" "libdef_Debug.a" find_path ( LEFDEF_LIBRARY_DIR NAMES "libdef.a" "libdef_Debug.a"
PATHS ${LEFDEF_LIBRARY_SEARCH_PATH} PATHS ${LEFDEF_SEARCH_PATH}
PATH_SUFFIXES "lib${LIB_SUFFIX}" PATH_SUFFIXES "lib${LIB_SUFFIX}"
DOC "The ${LEFDEF_LIBRARY_DIR_DESCRIPTION}" ) DOC "The ${LEFDEF_LIBRARY_DIR_DESCRIPTION}" )
message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" )
if ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR ) if ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
_find_lefdef_lib ( "CDEF" "cdef" ) _find_lefdef_lib ( "CDEF" "cdef" )
@ -103,6 +108,7 @@ if ( UNIX )
endif ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR ) endif ( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
if ( LEFDEF_FOUND ) if ( LEFDEF_FOUND )
message ( STATUS "Found LEF/DEF" )
add_definitions ( -DHAVE_LEFDEF ) add_definitions ( -DHAVE_LEFDEF )
if ( NOT LEFDEF_FIND_QUIETLY ) if ( NOT LEFDEF_FIND_QUIETLY )
message ( STATUS "Found LEF/DEF" ) message ( STATUS "Found LEF/DEF" )

View File

@ -391,7 +391,7 @@ namespace {
Box abutmentBox ( cell->getAbutmentBox() ); Box abutmentBox ( cell->getAbutmentBox() );
const vector<RoutingLayerGauge*>& rg const vector<RoutingLayerGauge*>& rg
= AllianceFramework::get()->getRoutingGauge("sxlib")->getLayerGauges(); = AllianceFramework::get()->getRoutingGauge()->getLayerGauges();
int status = 0; int status = 0;
@ -652,7 +652,7 @@ namespace {
{ {
FILE* defStream = NULL; FILE* defStream = NULL;
try { try {
string designName = getString(cell->getName()) + "export"; string designName = getString(cell->getName()) + "_export";
string path = "./" + designName + ".def"; string path = "./" + designName + ".def";
cmess1 << " o Export DEF: <" << path << ">" << endl; cmess1 << " o Export DEF: <" << path << ">" << endl;

View File

@ -152,7 +152,7 @@ namespace {
{ {
if ( _framework == NULL ) { if ( _framework == NULL ) {
_framework = AllianceFramework::get (); _framework = AllianceFramework::get ();
CellGauge* cg = _framework->getCellGauge("sxlib"); CellGauge* cg = _framework->getCellGauge();
_sliceHeight = cg->getSliceHeight (); _sliceHeight = cg->getSliceHeight ();
_pitchWidth = cg->getPitch (); _pitchWidth = cg->getPitch ();
@ -500,7 +500,7 @@ namespace {
LefDriver* driver = (LefDriver*)udata; LefDriver* driver = (LefDriver*)udata;
Technology* technology = DataBase::getDB()->getTechnology(); Technology* technology = DataBase::getDB()->getTechnology();
const vector<RoutingLayerGauge*>& rg const vector<RoutingLayerGauge*>& rg
= driver->getFramework()->getRoutingGauge("sxlib")->getLayerGauges(); = driver->getFramework()->getRoutingGauge()->getLayerGauges();
int status = 0; int status = 0;
for ( size_t ilayer=0 ; ilayer<rg.size() ; ++ilayer ) { for ( size_t ilayer=0 ; ilayer<rg.size() ; ++ilayer ) {
@ -613,7 +613,7 @@ namespace {
LefDriver* driver = (LefDriver*)udata; LefDriver* driver = (LefDriver*)udata;
Technology* technology = DataBase::getDB()->getTechnology(); Technology* technology = DataBase::getDB()->getTechnology();
const vector<RoutingLayerGauge*>& rg const vector<RoutingLayerGauge*>& rg
= driver->getFramework()->getRoutingGauge("sxlib")->getLayerGauges(); = driver->getFramework()->getRoutingGauge()->getLayerGauges();
int status = 0; int status = 0;
for ( size_t ilayer=1 ; ilayer<rg.size() ; ++ilayer ) { for ( size_t ilayer=1 ; ilayer<rg.size() ; ++ilayer ) {
@ -722,7 +722,7 @@ namespace CRL {
set<Cell*> cells; set<Cell*> cells;
if ( cell != NULL ) { if ( cell != NULL ) {
libraryName = getString(cell->getName()) + "export"; libraryName = getString(cell->getName()) + "_export";
forEach ( Instance*, iinstance, cell->getInstances() ) { forEach ( Instance*, iinstance, cell->getInstances() ) {
cells.insert ( (*iinstance)->getMasterCell() ); cells.insert ( (*iinstance)->getMasterCell() );