Compare commits
13 Commits
devel
...
serge/chan
Author | SHA1 | Date |
---|---|---|
|
1ea1a402e6 | |
|
d9c9945897 | |
|
5e5ae997f5 | |
|
626766e07c | |
|
60e7ba1d9b | |
|
d968eb3c81 | |
|
26f054eafa | |
|
4a547a1ade | |
|
a5ee874a35 | |
|
9b27806b65 | |
|
d21e80353a | |
|
2046a1501f | |
|
41e57a7512 |
|
@ -12,7 +12,7 @@ linux:
|
||||||
DOCKER_TLS_CERTDIR: ""
|
DOCKER_TLS_CERTDIR: ""
|
||||||
script:
|
script:
|
||||||
- curl -sSL https://get.docker.com/ | sh
|
- curl -sSL https://get.docker.com/ | sh
|
||||||
- python -m pip install cibuildwheel==2.11.3
|
- python -m pip install cibuildwheel #==2.11.3
|
||||||
- cibuildwheel --output-dir wheelhouse
|
- cibuildwheel --output-dir wheelhouse
|
||||||
parallel:
|
parallel:
|
||||||
matrix:
|
matrix:
|
||||||
|
|
|
@ -3,4 +3,3 @@
|
||||||
# url = git@github.com:Coloquinte/PlaceRoute.git
|
# url = git@github.com:Coloquinte/PlaceRoute.git
|
||||||
url = https://github.com/Coloquinte/PlaceRoute.git
|
url = https://github.com/Coloquinte/PlaceRoute.git
|
||||||
branch = coriolis-submodule
|
branch = coriolis-submodule
|
||||||
update = merge
|
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
project(coriolis)
|
||||||
|
|
||||||
|
if(NOT CMAKE_BUILD_PARALLEL_LEVEL)
|
||||||
|
cmake_host_system_information(RESULT Ncpu QUERY NUMBER_OF_LOGICAL_CORES)
|
||||||
|
math(EXPR CMAKE_BUILD_PARALLEL_LEVEL "${Ncpu}-1")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(USE_MANYLINUX ON)
|
||||||
|
set(CORIOLIS_TMP_INSTALL_DIR ${CMAKE_BINARY_DIR}/install)
|
||||||
|
|
||||||
|
set(ENV{CORIOLIS_TOP} ${CORIOLIS_TMP_INSTALL_DIR})
|
||||||
|
|
||||||
|
function (build_coriolis_module target)
|
||||||
|
message("---------- Start building ${target} ----------")
|
||||||
|
set(build_dir ${CMAKE_BINARY_DIR}/build_${target})
|
||||||
|
file(MAKE_DIRECTORY ${build_dir} ${build_dir}/build)
|
||||||
|
file(WRITE ${build_dir}/CMakeLists.txt "
|
||||||
|
cmake_minimum_required(VERSION ${CMAKE_VERSION})
|
||||||
|
|
||||||
|
project(build_${target})
|
||||||
|
|
||||||
|
set(USE_MANYLINUX ON)
|
||||||
|
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module)
|
||||||
|
|
||||||
|
set(POETRY TRUE) # this will prevent looking for python site-packages directory
|
||||||
|
# and next vars will not be overwritten
|
||||||
|
set(Python_CORIOLISARCH coriolis) # relative to install dir
|
||||||
|
set(Python_CORIOLISLIB coriolis) # relative to install dir
|
||||||
|
set(PYTHON_SITE_PACKAGES ..) # python packages directory (relative to coriolis python dir)
|
||||||
|
|
||||||
|
if(NOT Python_LIBRARIES)
|
||||||
|
set(Python_LIBRARIES \"-Wl,--unresolved-symbols=ignore-all\")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CXX_STANDARD \"-fPIC\")
|
||||||
|
|
||||||
|
if(NOT Python3_LIBRARIES)
|
||||||
|
set(Python3_LIBRARIES \"\${Python_LIBRARIES}\")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_SOURCE_DIR}/bootstrap/cmake_modules)
|
||||||
|
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${target} ${build_dir})
|
||||||
|
")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} ${build_dir}
|
||||||
|
-D CMAKE_BUILD_TYPE:STRING=Release
|
||||||
|
-D CMAKE_INSTALL_PREFIX:PATH=${CORIOLIS_TMP_INSTALL_DIR}
|
||||||
|
-D CMAKE_BUILD_RPATH_USE_ORIGIN:BOOL=TRUE
|
||||||
|
-D CMAKE_SKIP_BUILD_RPATH:BOOL=FALSE
|
||||||
|
-D CMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=FALSE
|
||||||
|
-D CMAKE_INSTALL_RPATH:STRING='$ORIGIN/libs:$ORIGIN'
|
||||||
|
-D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=TRUE
|
||||||
|
-G "${CMAKE_GENERATOR}"
|
||||||
|
WORKING_DIRECTORY ${build_dir}/build
|
||||||
|
RESULT_VARIABLE ${target}_setup_result
|
||||||
|
)
|
||||||
|
if(NOT ${${target}_setup_result} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to setup ${target} build\n")
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} --build . --parallel ${CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
WORKING_DIRECTORY ${build_dir}/build
|
||||||
|
RESULT_VARIABLE ${target}_build_result
|
||||||
|
)
|
||||||
|
if(NOT ${${target}_build_result} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "${target} build failed\n")
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} --install . --prefix "${CORIOLIS_TMP_INSTALL_DIR}"
|
||||||
|
WORKING_DIRECTORY ${build_dir}/build
|
||||||
|
RESULT_VARIABLE ${target}_install_result
|
||||||
|
)
|
||||||
|
if(NOT ${${target}_install_result} EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to installe ${target} into build environment\n")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
build_coriolis_module(lefdef)
|
||||||
|
build_coriolis_module(coloquinte)
|
||||||
|
build_coriolis_module(hurricane)
|
||||||
|
build_coriolis_module(crlcore)
|
||||||
|
build_coriolis_module(flute)
|
||||||
|
build_coriolis_module(etesian)
|
||||||
|
build_coriolis_module(anabatic)
|
||||||
|
build_coriolis_module(katana)
|
||||||
|
build_coriolis_module(equinox)
|
||||||
|
build_coriolis_module(solstice)
|
||||||
|
build_coriolis_module(oroshi)
|
||||||
|
build_coriolis_module(bora)
|
||||||
|
build_coriolis_module(karakaze)
|
||||||
|
#build_coriolis_module(knik)
|
||||||
|
build_coriolis_module(unicorn)
|
||||||
|
build_coriolis_module(tutorial)
|
||||||
|
build_coriolis_module(cumulus)
|
||||||
|
build_coriolis_module(stratus1)
|
||||||
|
##add_subdirectory(documentation)
|
||||||
|
#add_subdirectory(unittests)
|
||||||
|
|
||||||
|
file(GLOB SHARED_LIB_FILES LIST_DIRECTORIES false "${CORIOLIS_TMP_INSTALL_DIR}/lib/*.*")
|
||||||
|
|
||||||
|
install(FILES ${SHARED_LIB_FILES} DESTINATION coriolis/libs)
|
||||||
|
|
||||||
|
function(coriolis_install_folder dstdir srcdir)
|
||||||
|
file(GLOB_RECURSE files RELATIVE "${srcdir}" "${srcdir}/*.*")
|
||||||
|
foreach(name ${files})
|
||||||
|
if(NOT IS_DIRECTORY "${srcdir}/${name}")
|
||||||
|
get_filename_component(subdir ${name} DIRECTORY)
|
||||||
|
install(FILES "${srcdir}/${name}" DESTINATION ${dstdir}/${subdir})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
coriolis_install_folder(coriolis/share/flute ${CORIOLIS_TMP_INSTALL_DIR}/share/flute)
|
||||||
|
coriolis_install_folder(coriolis ${CORIOLIS_TMP_INSTALL_DIR}/coriolis)
|
||||||
|
|
||||||
|
set(CORIOLIS_EXTRAS_DIR ${CMAKE_BINARY_DIR}/extras)
|
||||||
|
file(MAKE_DIRECTORY ${CORIOLIS_EXTRAS_DIR})
|
||||||
|
|
||||||
|
# Put all extra python things into ${CORIOLIS_EXTRAS_DIR} directory
|
||||||
|
|
||||||
|
coriolis_install_folder(coriolis ${CORIOLIS_EXTRAS_DIR})
|
||||||
|
|
||||||
|
install(FILES "${CORIOLIS_TMP_INSTALL_DIR}/bin/cgt" DESTINATION coriolis RENAME __main__.py)
|
|
@ -14,9 +14,9 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ endif ( CHECK_DETERMINISM )
|
||||||
${QtX_LIBRARIES}
|
${QtX_LIBRARIES}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${LIBXML2_LIBRARIES}
|
${LIBXML2_LIBRARIES}
|
||||||
${Python3_LIBRARIES}
|
${Python_LIBRARIES}
|
||||||
-lutil
|
-lutil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,8 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
try:
|
try:
|
||||||
scriptPath = os.path.abspath( os.path.dirname(sys.argv[0]) )
|
scriptPath = os.path.abspath( os.path.dirname(sys.argv[0]) )
|
||||||
print 'buildCoriolis.py is run from:'
|
print('buildCoriolis.py is run from:')
|
||||||
print ' <%s>' % scriptPath
|
print(' <%s>' % scriptPath)
|
||||||
|
|
||||||
parser = optparse.OptionParser ()
|
parser = optparse.OptionParser ()
|
||||||
# Build relateds.
|
# Build relateds.
|
||||||
|
@ -80,11 +80,11 @@ if __name__ == "__main__":
|
||||||
elif options.doRpm: builder.doRpm ()
|
elif options.doRpm: builder.doRpm ()
|
||||||
elif options.doDeb: builder.doDeb ()
|
elif options.doDeb: builder.doDeb ()
|
||||||
else: builder.build ( tools=options.tools, projects=options.projects )
|
else: builder.build ( tools=options.tools, projects=options.projects )
|
||||||
except ErrorMessage, e:
|
except ErrorMessage as e:
|
||||||
print e
|
print(e)
|
||||||
sys.exit(e.code)
|
sys.exit(e.code)
|
||||||
#except Exception, e:
|
#except Exception as e:
|
||||||
# print e
|
# print(e)
|
||||||
# sys.exit(1)
|
# sys.exit(1)
|
||||||
|
|
||||||
sys.exit ( 0 )
|
sys.exit ( 0 )
|
||||||
|
|
|
@ -39,6 +39,8 @@ if(UNIX AND NOT POETRY)
|
||||||
mark_as_advanced(Python_CORIOLISLIB)
|
mark_as_advanced(Python_CORIOLISLIB)
|
||||||
mark_as_advanced(Python_SITELIB)
|
mark_as_advanced(Python_SITELIB)
|
||||||
|
|
||||||
|
set(PYTHON_SITE_PACKAGES "${Python_SITELIB}")
|
||||||
|
|
||||||
if(FindPythonSitePackages_FOUND)
|
if(FindPythonSitePackages_FOUND)
|
||||||
if(NOT FindPythonSitePackages_FIND_QUIETLY)
|
if(NOT FindPythonSitePackages_FIND_QUIETLY)
|
||||||
if(FindPythonSitePackages_FOUND)
|
if(FindPythonSitePackages_FOUND)
|
||||||
|
|
|
@ -39,7 +39,7 @@ try:
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
from email.mime.application import MIMEApplication
|
from email.mime.application import MIMEApplication
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
module = str(e).split()[-1]
|
module = str(e).split()[-1]
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class ErrorMessage ( Exception ):
|
||||||
return
|
return
|
||||||
|
|
||||||
def terminate ( self ):
|
def terminate ( self ):
|
||||||
print self
|
print(self)
|
||||||
sys.exit(self._code)
|
sys.exit(self._code)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -122,7 +122,7 @@ class Command ( object ):
|
||||||
self.fdLog = fdLog
|
self.fdLog = fdLog
|
||||||
|
|
||||||
if self.fdLog != None and not isinstance(self.fdLog,file):
|
if self.fdLog != None and not isinstance(self.fdLog,file):
|
||||||
print '[WARNING] Command.__init__(): <fdLog> is neither None or a file.'
|
print('[WARNING] Command.__init__(): <fdLog> is neither None or a file.')
|
||||||
return
|
return
|
||||||
|
|
||||||
def _argumentsToStr ( self, arguments ):
|
def _argumentsToStr ( self, arguments ):
|
||||||
|
@ -133,7 +133,7 @@ class Command ( object ):
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def log ( self, text ):
|
def log ( self, text ):
|
||||||
print text[:-1]
|
print(text[:-1])
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
if isinstance(self.fdLog,file):
|
if isinstance(self.fdLog,file):
|
||||||
|
@ -151,12 +151,12 @@ class Command ( object ):
|
||||||
if homeDir.startswith(homeDir):
|
if homeDir.startswith(homeDir):
|
||||||
workDir = '~' + workDir[ len(homeDir) : ]
|
workDir = '~' + workDir[ len(homeDir) : ]
|
||||||
user = 'root'
|
user = 'root'
|
||||||
if os.environ.has_key('USER'): user = os.environ['USER']
|
if 'USER' in os.environ: user = os.environ['USER']
|
||||||
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
|
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
|
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
|
||||||
print self.arguments
|
print(self.arguments)
|
||||||
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
|
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
@ -164,7 +164,7 @@ class Command ( object ):
|
||||||
if not line: break
|
if not line: break
|
||||||
|
|
||||||
self.log( line )
|
self.log( line )
|
||||||
except OSError, e:
|
except OSError as e:
|
||||||
raise BadBinary( self.arguments[0] )
|
raise BadBinary( self.arguments[0] )
|
||||||
|
|
||||||
(pid,status) = os.waitpid( child.pid, 0 )
|
(pid,status) = os.waitpid( child.pid, 0 )
|
||||||
|
@ -258,12 +258,12 @@ class GitRepository ( object ):
|
||||||
|
|
||||||
def removeLocalRepo ( self ):
|
def removeLocalRepo ( self ):
|
||||||
if os.path.isdir(self.localRepoDir):
|
if os.path.isdir(self.localRepoDir):
|
||||||
print 'Removing Git local repository: <%s>' % self.localRepoDir
|
print('Removing Git local repository: <%s>' % self.localRepoDir)
|
||||||
shutil.rmtree( self.localRepoDir )
|
shutil.rmtree( self.localRepoDir )
|
||||||
return
|
return
|
||||||
|
|
||||||
def clone ( self ):
|
def clone ( self ):
|
||||||
print 'Clone/pull from:', self.url
|
print('Clone/pull from:', self.url)
|
||||||
if not os.path.isdir(self.cloneDir):
|
if not os.path.isdir(self.cloneDir):
|
||||||
os.makedirs( self.cloneDir )
|
os.makedirs( self.cloneDir )
|
||||||
|
|
||||||
|
@ -329,12 +329,12 @@ class Configuration ( object ):
|
||||||
|
|
||||||
def __setattr__ ( self, attribute, value ):
|
def __setattr__ ( self, attribute, value ):
|
||||||
if attribute in Configuration.SecondaryNames:
|
if attribute in Configuration.SecondaryNames:
|
||||||
print ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute )
|
print(ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute ))
|
||||||
return
|
return
|
||||||
|
|
||||||
if attribute == 'masterHost' or attribute == '_masterHost':
|
if attribute == 'masterHost' or attribute == '_masterHost':
|
||||||
if value == 'lepka':
|
if value == 'lepka':
|
||||||
print 'Never touch the Git tree when running on <lepka>.'
|
print('Never touch the Git tree when running on <lepka>.')
|
||||||
self._rmSource = False
|
self._rmSource = False
|
||||||
self._rmBuild = False
|
self._rmBuild = False
|
||||||
self._doGit = False
|
self._doGit = False
|
||||||
|
@ -393,7 +393,7 @@ class Configuration ( object ):
|
||||||
while True:
|
while True:
|
||||||
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
|
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
|
||||||
if not os.path.isfile(logFile):
|
if not os.path.isfile(logFile):
|
||||||
print "Report log: <%s>" % logFile
|
print("Report log: <%s>" % logFile)
|
||||||
break
|
break
|
||||||
index += 1
|
index += 1
|
||||||
fd = open( logFile, "w" )
|
fd = open( logFile, "w" )
|
||||||
|
@ -506,7 +506,7 @@ class Report ( object ):
|
||||||
fd = open( logFile, 'rb' )
|
fd = open( logFile, 'rb' )
|
||||||
try:
|
try:
|
||||||
fd.seek( -1024*100, os.SEEK_END )
|
fd.seek( -1024*100, os.SEEK_END )
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
pass
|
pass
|
||||||
tailLines = ''
|
tailLines = ''
|
||||||
for line in fd.readlines()[1:]:
|
for line in fd.readlines()[1:]:
|
||||||
|
@ -525,8 +525,8 @@ class Report ( object ):
|
||||||
for attachement in self.attachements:
|
for attachement in self.attachements:
|
||||||
self.message.attach( attachement )
|
self.message.attach( attachement )
|
||||||
|
|
||||||
print "Sending mail report to:"
|
print("Sending mail report to:")
|
||||||
for receiver in self.conf.receivers: print ' <%s>' % receiver
|
for receiver in self.conf.receivers: print(' <%s>' % receiver)
|
||||||
session = smtplib.SMTP( 'localhost' )
|
session = smtplib.SMTP( 'localhost' )
|
||||||
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
|
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
|
||||||
session.quit()
|
session.quit()
|
||||||
|
@ -613,29 +613,29 @@ try:
|
||||||
for entry in os.listdir(conf.rootDir):
|
for entry in os.listdir(conf.rootDir):
|
||||||
if entry.startswith('Linux.'):
|
if entry.startswith('Linux.'):
|
||||||
buildDir = conf.rootDir+'/'+entry
|
buildDir = conf.rootDir+'/'+entry
|
||||||
print 'Removing OS build directory: <%s>' % buildDir
|
print('Removing OS build directory: <%s>' % buildDir)
|
||||||
shutil.rmtree( buildDir )
|
shutil.rmtree( buildDir )
|
||||||
|
|
||||||
commands = conf.getCommands( options.profile )
|
commands = conf.getCommands( options.profile )
|
||||||
for command in commands:
|
for command in commands:
|
||||||
if command.host:
|
if command.host:
|
||||||
print 'Executing command on remote host <%s>:' % host
|
print('Executing command on remote host <%s>:' % host)
|
||||||
else:
|
else:
|
||||||
print 'Executing command on *local* host:'
|
print('Executing command on *local* host:')
|
||||||
print ' %s' % str(command)
|
print(' %s' % str(command))
|
||||||
command.execute()
|
command.execute()
|
||||||
|
|
||||||
conf.closeLogs()
|
conf.closeLogs()
|
||||||
|
|
||||||
conf.success = True
|
conf.success = True
|
||||||
|
|
||||||
except ErrorMessage, e:
|
except ErrorMessage as e:
|
||||||
print e
|
print(e)
|
||||||
conf.closeLogs()
|
conf.closeLogs()
|
||||||
conf.success = False
|
conf.success = False
|
||||||
|
|
||||||
if showTrace:
|
if showTrace:
|
||||||
print '\nPython stack trace:'
|
print('\nPython stack trace:')
|
||||||
traceback.print_tb( sys.exc_info()[2] )
|
traceback.print_tb( sys.exc_info()[2] )
|
||||||
conf.rcode = e.code
|
conf.rcode = e.code
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ try:
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
from email.mime.application import MIMEApplication
|
from email.mime.application import MIMEApplication
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
module = str(e).split()[-1]
|
module = str(e).split()[-1]
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class ErrorMessage ( Exception ):
|
||||||
return
|
return
|
||||||
|
|
||||||
def terminate ( self ):
|
def terminate ( self ):
|
||||||
print self
|
print(self)
|
||||||
sys.exit(self._code)
|
sys.exit(self._code)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -122,7 +122,7 @@ class Command ( object ):
|
||||||
self.fdLog = fdLog
|
self.fdLog = fdLog
|
||||||
|
|
||||||
if self.fdLog != None and not isinstance(self.fdLog,file):
|
if self.fdLog != None and not isinstance(self.fdLog,file):
|
||||||
print '[WARNING] Command.__init__(): <fdLog> is neither None or a file.'
|
print('[WARNING] Command.__init__(): <fdLog> is neither None or a file.')
|
||||||
return
|
return
|
||||||
|
|
||||||
def _argumentsToStr ( self, arguments ):
|
def _argumentsToStr ( self, arguments ):
|
||||||
|
@ -133,7 +133,7 @@ class Command ( object ):
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def log ( self, text ):
|
def log ( self, text ):
|
||||||
print text[:-1]
|
print(text[:-1])
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
if isinstance(self.fdLog,file):
|
if isinstance(self.fdLog,file):
|
||||||
|
@ -151,12 +151,12 @@ class Command ( object ):
|
||||||
if homeDir.startswith(homeDir):
|
if homeDir.startswith(homeDir):
|
||||||
workDir = '~' + workDir[ len(homeDir) : ]
|
workDir = '~' + workDir[ len(homeDir) : ]
|
||||||
user = 'root'
|
user = 'root'
|
||||||
if os.environ.has_key('USER'): user = os.environ['USER']
|
if 'USER' in os.environ: user = os.environ['USER']
|
||||||
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
|
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
|
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
|
||||||
print self.arguments
|
print(self.arguments)
|
||||||
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
|
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
@ -164,7 +164,7 @@ class Command ( object ):
|
||||||
if not line: break
|
if not line: break
|
||||||
|
|
||||||
self.log( line )
|
self.log( line )
|
||||||
except OSError, e:
|
except OSError as e:
|
||||||
raise BadBinary( self.arguments[0] )
|
raise BadBinary( self.arguments[0] )
|
||||||
|
|
||||||
(pid,status) = os.waitpid( child.pid, 0 )
|
(pid,status) = os.waitpid( child.pid, 0 )
|
||||||
|
@ -251,12 +251,12 @@ class GitRepository ( object ):
|
||||||
|
|
||||||
def removeLocalRepo ( self ):
|
def removeLocalRepo ( self ):
|
||||||
if os.path.isdir(self.localRepoDir):
|
if os.path.isdir(self.localRepoDir):
|
||||||
print 'Removing Git local repository: <%s>' % self.localRepoDir
|
print('Removing Git local repository: <%s>' % self.localRepoDir)
|
||||||
shutil.rmtree( self.localRepoDir )
|
shutil.rmtree( self.localRepoDir )
|
||||||
return
|
return
|
||||||
|
|
||||||
def clone ( self ):
|
def clone ( self ):
|
||||||
print 'Clone/pull from:', self.url
|
print('Clone/pull from:', self.url)
|
||||||
if not os.path.isdir(self.cloneDir):
|
if not os.path.isdir(self.cloneDir):
|
||||||
os.makedirs( self.cloneDir )
|
os.makedirs( self.cloneDir )
|
||||||
|
|
||||||
|
@ -321,12 +321,12 @@ class Configuration ( object ):
|
||||||
|
|
||||||
def __setattr__ ( self, attribute, value ):
|
def __setattr__ ( self, attribute, value ):
|
||||||
if attribute in Configuration.SecondaryNames:
|
if attribute in Configuration.SecondaryNames:
|
||||||
print ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute )
|
print(ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute ))
|
||||||
return
|
return
|
||||||
|
|
||||||
if attribute == 'masterHost' or attribute == '_masterHost':
|
if attribute == 'masterHost' or attribute == '_masterHost':
|
||||||
if value == 'lepka':
|
if value == 'lepka':
|
||||||
print 'Never touch the Git tree when running on <lepka>.'
|
print('Never touch the Git tree when running on <lepka>.')
|
||||||
self._rmSource = False
|
self._rmSource = False
|
||||||
self._rmBuild = False
|
self._rmBuild = False
|
||||||
self._doGit = False
|
self._doGit = False
|
||||||
|
@ -384,7 +384,7 @@ class Configuration ( object ):
|
||||||
while True:
|
while True:
|
||||||
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
|
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
|
||||||
if not os.path.isfile(logFile):
|
if not os.path.isfile(logFile):
|
||||||
print "Report log: <%s>" % logFile
|
print("Report log: <%s>" % logFile)
|
||||||
break
|
break
|
||||||
index += 1
|
index += 1
|
||||||
fd = open( logFile, "w" )
|
fd = open( logFile, "w" )
|
||||||
|
@ -490,7 +490,7 @@ class Report ( object ):
|
||||||
fd = open( logFile, 'rb' )
|
fd = open( logFile, 'rb' )
|
||||||
try:
|
try:
|
||||||
fd.seek( -1024*100, os.SEEK_END )
|
fd.seek( -1024*100, os.SEEK_END )
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
pass
|
pass
|
||||||
tailLines = ''
|
tailLines = ''
|
||||||
for line in fd.readlines()[1:]:
|
for line in fd.readlines()[1:]:
|
||||||
|
@ -509,8 +509,8 @@ class Report ( object ):
|
||||||
for attachement in self.attachements:
|
for attachement in self.attachements:
|
||||||
self.message.attach( attachement )
|
self.message.attach( attachement )
|
||||||
|
|
||||||
print "Sending mail report to:"
|
print("Sending mail report to:")
|
||||||
for receiver in self.conf.receivers: print ' <%s>' % receiver
|
for receiver in self.conf.receivers: print(' <%s>' % receiver)
|
||||||
session = smtplib.SMTP( 'localhost' )
|
session = smtplib.SMTP( 'localhost' )
|
||||||
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
|
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
|
||||||
session.quit()
|
session.quit()
|
||||||
|
@ -594,29 +594,29 @@ try:
|
||||||
for entry in os.listdir(conf.rootDir):
|
for entry in os.listdir(conf.rootDir):
|
||||||
if entry.startswith('Linux.'):
|
if entry.startswith('Linux.'):
|
||||||
buildDir = conf.rootDir+'/'+entry
|
buildDir = conf.rootDir+'/'+entry
|
||||||
print 'Removing OS build directory: <%s>' % buildDir
|
print('Removing OS build directory: <%s>' % buildDir)
|
||||||
shutil.rmtree( buildDir )
|
shutil.rmtree( buildDir )
|
||||||
|
|
||||||
commands = conf.getCommands( options.profile )
|
commands = conf.getCommands( options.profile )
|
||||||
for command in commands:
|
for command in commands:
|
||||||
if command.host:
|
if command.host:
|
||||||
print 'Executing command on remote host <%s>:' % host
|
print('Executing command on remote host <%s>:' % host)
|
||||||
else:
|
else:
|
||||||
print 'Executing command on *local* host:'
|
print('Executing command on *local* host:')
|
||||||
print ' %s' % str(command)
|
print(' %s' % str(command))
|
||||||
command.execute()
|
command.execute()
|
||||||
|
|
||||||
conf.closeLogs()
|
conf.closeLogs()
|
||||||
|
|
||||||
conf.success = True
|
conf.success = True
|
||||||
|
|
||||||
except ErrorMessage, e:
|
except ErrorMessage as e:
|
||||||
print e
|
print(e)
|
||||||
conf.closeLogs()
|
conf.closeLogs()
|
||||||
conf.success = False
|
conf.success = False
|
||||||
|
|
||||||
if showTrace:
|
if showTrace:
|
||||||
print '\nPython stack trace:'
|
print('\nPython stack trace:')
|
||||||
traceback.print_tb( sys.exc_info()[2] )
|
traceback.print_tb( sys.exc_info()[2] )
|
||||||
conf.rcode = e.code
|
conf.rcode = e.code
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ try:
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
from email.mime.application import MIMEApplication
|
from email.mime.application import MIMEApplication
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
module = str(e).split()[-1]
|
module = str(e).split()[-1]
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class ErrorMessage ( Exception ):
|
||||||
return
|
return
|
||||||
|
|
||||||
def terminate ( self ):
|
def terminate ( self ):
|
||||||
print self
|
print(self)
|
||||||
sys.exit(self._code)
|
sys.exit(self._code)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -122,7 +122,7 @@ class Command ( object ):
|
||||||
self.fdLog = fdLog
|
self.fdLog = fdLog
|
||||||
|
|
||||||
if self.fdLog != None and not isinstance(self.fdLog,file):
|
if self.fdLog != None and not isinstance(self.fdLog,file):
|
||||||
print '[WARNING] Command.__init__(): <fdLog> is neither None or a file.'
|
print('[WARNING] Command.__init__(): <fdLog> is neither None or a file.')
|
||||||
return
|
return
|
||||||
|
|
||||||
def _argumentsToStr ( self, arguments ):
|
def _argumentsToStr ( self, arguments ):
|
||||||
|
@ -133,7 +133,7 @@ class Command ( object ):
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def log ( self, text ):
|
def log ( self, text ):
|
||||||
print text[:-1]
|
print(text[:-1])
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
if isinstance(self.fdLog,file):
|
if isinstance(self.fdLog,file):
|
||||||
|
@ -151,12 +151,12 @@ class Command ( object ):
|
||||||
if homeDir.startswith(homeDir):
|
if homeDir.startswith(homeDir):
|
||||||
workDir = '~' + workDir[ len(homeDir) : ]
|
workDir = '~' + workDir[ len(homeDir) : ]
|
||||||
user = 'root'
|
user = 'root'
|
||||||
if os.environ.has_key('USER'): user = os.environ['USER']
|
if 'USER' in os.environ: user = os.environ['USER']
|
||||||
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
|
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
|
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
|
||||||
print self.arguments
|
print(self.arguments)
|
||||||
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
|
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
@ -164,7 +164,7 @@ class Command ( object ):
|
||||||
if not line: break
|
if not line: break
|
||||||
|
|
||||||
self.log( line )
|
self.log( line )
|
||||||
except OSError, e:
|
except OSError as e:
|
||||||
raise BadBinary( self.arguments[0] )
|
raise BadBinary( self.arguments[0] )
|
||||||
|
|
||||||
(pid,status) = os.waitpid( child.pid, 0 )
|
(pid,status) = os.waitpid( child.pid, 0 )
|
||||||
|
@ -258,12 +258,12 @@ class GitRepository ( object ):
|
||||||
|
|
||||||
def removeLocalRepo ( self ):
|
def removeLocalRepo ( self ):
|
||||||
if os.path.isdir(self.localRepoDir):
|
if os.path.isdir(self.localRepoDir):
|
||||||
print 'Removing Git local repository: <%s>' % self.localRepoDir
|
print('Removing Git local repository: <%s>' % self.localRepoDir)
|
||||||
shutil.rmtree( self.localRepoDir )
|
shutil.rmtree( self.localRepoDir )
|
||||||
return
|
return
|
||||||
|
|
||||||
def clone ( self ):
|
def clone ( self ):
|
||||||
print 'Clone/pull from:', self.url
|
print('Clone/pull from:', self.url)
|
||||||
if not os.path.isdir(self.cloneDir):
|
if not os.path.isdir(self.cloneDir):
|
||||||
os.makedirs( self.cloneDir )
|
os.makedirs( self.cloneDir )
|
||||||
|
|
||||||
|
@ -329,12 +329,12 @@ class Configuration ( object ):
|
||||||
|
|
||||||
def __setattr__ ( self, attribute, value ):
|
def __setattr__ ( self, attribute, value ):
|
||||||
if attribute in Configuration.SecondaryNames:
|
if attribute in Configuration.SecondaryNames:
|
||||||
print ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute )
|
print(ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute ))
|
||||||
return
|
return
|
||||||
|
|
||||||
if attribute == 'masterHost' or attribute == '_masterHost':
|
if attribute == 'masterHost' or attribute == '_masterHost':
|
||||||
if value == 'lepka':
|
if value == 'lepka':
|
||||||
print 'Never touch the Git tree when running on <lepka>.'
|
print('Never touch the Git tree when running on <lepka>.')
|
||||||
self._rmSource = False
|
self._rmSource = False
|
||||||
self._rmBuild = False
|
self._rmBuild = False
|
||||||
self._doGit = False
|
self._doGit = False
|
||||||
|
@ -393,7 +393,7 @@ class Configuration ( object ):
|
||||||
while True:
|
while True:
|
||||||
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
|
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
|
||||||
if not os.path.isfile(logFile):
|
if not os.path.isfile(logFile):
|
||||||
print "Report log: <%s>" % logFile
|
print("Report log: <%s>" % logFile)
|
||||||
break
|
break
|
||||||
index += 1
|
index += 1
|
||||||
fd = open( logFile, "w" )
|
fd = open( logFile, "w" )
|
||||||
|
@ -506,7 +506,7 @@ class Report ( object ):
|
||||||
fd = open( logFile, 'rb' )
|
fd = open( logFile, 'rb' )
|
||||||
try:
|
try:
|
||||||
fd.seek( -1024*100, os.SEEK_END )
|
fd.seek( -1024*100, os.SEEK_END )
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
pass
|
pass
|
||||||
tailLines = ''
|
tailLines = ''
|
||||||
for line in fd.readlines()[1:]:
|
for line in fd.readlines()[1:]:
|
||||||
|
@ -525,8 +525,8 @@ class Report ( object ):
|
||||||
for attachement in self.attachements:
|
for attachement in self.attachements:
|
||||||
self.message.attach( attachement )
|
self.message.attach( attachement )
|
||||||
|
|
||||||
print "Sending mail report to:"
|
print("Sending mail report to:")
|
||||||
for receiver in self.conf.receivers: print ' <%s>' % receiver
|
for receiver in self.conf.receivers: print(' <%s>' % receiver)
|
||||||
session = smtplib.SMTP( 'localhost' )
|
session = smtplib.SMTP( 'localhost' )
|
||||||
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
|
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
|
||||||
session.quit()
|
session.quit()
|
||||||
|
@ -613,29 +613,29 @@ try:
|
||||||
for entry in os.listdir(conf.rootDir):
|
for entry in os.listdir(conf.rootDir):
|
||||||
if entry.startswith('Linux.'):
|
if entry.startswith('Linux.'):
|
||||||
buildDir = conf.rootDir+'/'+entry
|
buildDir = conf.rootDir+'/'+entry
|
||||||
print 'Removing OS build directory: <%s>' % buildDir
|
print('Removing OS build directory: <%s>' % buildDir)
|
||||||
shutil.rmtree( buildDir )
|
shutil.rmtree( buildDir )
|
||||||
|
|
||||||
commands = conf.getCommands( options.profile )
|
commands = conf.getCommands( options.profile )
|
||||||
for command in commands:
|
for command in commands:
|
||||||
if command.host:
|
if command.host:
|
||||||
print 'Executing command on remote host <%s>:' % host
|
print('Executing command on remote host <%s>:' % host)
|
||||||
else:
|
else:
|
||||||
print 'Executing command on *local* host:'
|
print('Executing command on *local* host:')
|
||||||
print ' %s' % str(command)
|
print(' %s' % str(command))
|
||||||
command.execute()
|
command.execute()
|
||||||
|
|
||||||
conf.closeLogs()
|
conf.closeLogs()
|
||||||
|
|
||||||
conf.success = True
|
conf.success = True
|
||||||
|
|
||||||
except ErrorMessage, e:
|
except ErrorMessage as e:
|
||||||
print e
|
print(e)
|
||||||
conf.closeLogs()
|
conf.closeLogs()
|
||||||
conf.success = False
|
conf.success = False
|
||||||
|
|
||||||
if showTrace:
|
if showTrace:
|
||||||
print '\nPython stack trace:'
|
print('\nPython stack trace:')
|
||||||
traceback.print_tb( sys.exc_info()[2] )
|
traceback.print_tb( sys.exc_info()[2] )
|
||||||
conf.rcode = e.code
|
conf.rcode = e.code
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,8 @@ def guessOs ():
|
||||||
uname = subprocess.Popen ( ["uname", "-sr"], stdout=subprocess.PIPE )
|
uname = subprocess.Popen ( ["uname", "-sr"], stdout=subprocess.PIPE )
|
||||||
osType = uname.stdout.readlines()[0][:-1]
|
osType = uname.stdout.readlines()[0][:-1]
|
||||||
|
|
||||||
#print "[WARNING] Unrecognized OS: \"%s\"." % lines[0][:-1]
|
#print("[WARNING] Unrecognized OS: \"%s\"." % lines[0][:-1])
|
||||||
#print " (using: \"%s\")" % osType
|
#print(" (using: \"%s\")" % osType)
|
||||||
|
|
||||||
return (osType,libDir)
|
return (osType,libDir)
|
||||||
|
|
||||||
|
@ -118,10 +118,10 @@ export PATH LD_LIBRARY_PATH PYTHONPATH BOOTSTRAP_TOP CORIOLIS_TOP MANGROVE_TOP;
|
||||||
hash -r
|
hash -r
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print shellScript % { "PATH" : strippedPath
|
print(shellScript % { "PATH" : strippedPath
|
||||||
, "LD_LIBRARY_PATH" : strippedLibraryPath
|
, "LD_LIBRARY_PATH" : strippedLibraryPath
|
||||||
, "PYTHONPATH" : strippedPythonPath
|
, "PYTHONPATH" : strippedPythonPath
|
||||||
, "CORIOLIS_TOP" : sysCoriolisTop
|
, "CORIOLIS_TOP" : sysCoriolisTop
|
||||||
, "MANGROVE_TOP" : mangroveTop
|
, "MANGROVE_TOP" : mangroveTop
|
||||||
, "buildDir" : buildDir
|
, "buildDir" : buildDir
|
||||||
}
|
})
|
||||||
|
|
|
@ -57,7 +57,7 @@ class Refactor:
|
||||||
|
|
||||||
m = refactorPattern.match( line )
|
m = refactorPattern.match( line )
|
||||||
if m:
|
if m:
|
||||||
print "o:\"%s\" r:\"%s\"" % ( m.group("orig"), m.group("replace") )
|
print("o:\"%s\" r:\"%s\"" % ( m.group("orig"), m.group("replace") ))
|
||||||
self._addRefactor( m.group("orig"), m.group("replace") )
|
self._addRefactor( m.group("orig"), m.group("replace") )
|
||||||
fd.close ()
|
fd.close ()
|
||||||
return
|
return
|
||||||
|
@ -92,7 +92,7 @@ if __name__ == '__main__' :
|
||||||
allFiles += rfiles
|
allFiles += rfiles
|
||||||
|
|
||||||
for file in allFiles:
|
for file in allFiles:
|
||||||
print file
|
print(file)
|
||||||
refactor.doFileRefactor( file )
|
refactor.doFileRefactor( file )
|
||||||
|
|
||||||
sys.exit( 0 )
|
sys.exit( 0 )
|
||||||
|
|
|
@ -313,7 +313,7 @@ class Configuration ( object ):
|
||||||
def __init__ ( self ):
|
def __init__ ( self ):
|
||||||
self._sender = 'Jean-Paul.Chaput@soc.lip6.fr'
|
self._sender = 'Jean-Paul.Chaput@soc.lip6.fr'
|
||||||
self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', ]
|
self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', ]
|
||||||
self._supportRepos = [ 'https://github.com/Tencent/rapidjson.git' ]
|
self._supportRepos = [ 'http://github.com/miloyip/rapidjson' ]
|
||||||
self._allianceRepo = 'https://gitlab.lip6.fr/jpc/alliance.git'
|
self._allianceRepo = 'https://gitlab.lip6.fr/jpc/alliance.git'
|
||||||
self._coriolisRepo = 'https://gitlab.lip6.fr/jpc/coriolis.git'
|
self._coriolisRepo = 'https://gitlab.lip6.fr/jpc/coriolis.git'
|
||||||
self._benchsRepo = 'https://gitlab.lip6.fr/jpc/alliance-check-toolkit.git'
|
self._benchsRepo = 'https://gitlab.lip6.fr/jpc/alliance-check-toolkit.git'
|
||||||
|
|
|
@ -12,7 +12,7 @@ soPathName = sys.argv[1]
|
||||||
soFileName = os.path.basename( soPathName )
|
soFileName = os.path.basename( soPathName )
|
||||||
profName = soFileName + '.profile'
|
profName = soFileName + '.profile'
|
||||||
if not os.path.isfile(profName):
|
if not os.path.isfile(profName):
|
||||||
print '[ERROR] No profile datas <%s>.' % profName
|
print('[ERROR] No profile datas <%s>.' % profName)
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
|
|
||||||
sprof = subprocess.Popen ( ['sprof'
|
sprof = subprocess.Popen ( ['sprof'
|
||||||
|
@ -30,8 +30,8 @@ for line in sprof.stdout.readlines():
|
||||||
, stdout=subprocess.PIPE )
|
, stdout=subprocess.PIPE )
|
||||||
symbol = cppfilt.stdout.readlines()[0][:-1]
|
symbol = cppfilt.stdout.readlines()[0][:-1]
|
||||||
|
|
||||||
print m.group('head'), symbol
|
print(m.group('head'), symbol)
|
||||||
else:
|
else:
|
||||||
print line[:-1]
|
print(line[:-1])
|
||||||
|
|
||||||
sys.exit( 0 )
|
sys.exit( 0 )
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 97bb781ba363303fd6b7254c717f621b137b89e3
|
Subproject commit 127cb78333be711eccffb848d00aad7144e2f890
|
|
@ -13,8 +13,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES socbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES socbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -282,8 +282,10 @@ def staticInitialization ( quiet=True ):
|
||||||
elif coriolisTop:
|
elif coriolisTop:
|
||||||
sysConfDir = os.path.join(coriolisTop,'etc/coriolis2')
|
sysConfDir = os.path.join(coriolisTop,'etc/coriolis2')
|
||||||
else:
|
else:
|
||||||
raise ErrorMessage( 1, [ 'Cannot locate the directoty holding the configuration files.'
|
import platformdirs
|
||||||
, 'The path is something ending by <.../etc/coriolis2>.'] )
|
sysConfDir = os.path.join(platformdirs.user_config_dir(), 'coriolis2')
|
||||||
|
#raise ErrorMessage( 1, [ 'Cannot locate the directoty holding the configuration files.'
|
||||||
|
# , 'The path is something ending by <.../etc/coriolis2>.'] )
|
||||||
if not quiet: print( ' - "{}"'.format( sysConfDir ))
|
if not quiet: print( ' - "{}"'.format( sysConfDir ))
|
||||||
initTechno( quiet )
|
initTechno( quiet )
|
||||||
return
|
return
|
||||||
|
@ -308,8 +310,10 @@ def setSysConfDir ( quiet=False ):
|
||||||
elif coriolisTop:
|
elif coriolisTop:
|
||||||
sysConfDir = os.path.join(coriolisTop,'etc/coriolis2')
|
sysConfDir = os.path.join(coriolisTop,'etc/coriolis2')
|
||||||
else:
|
else:
|
||||||
raise ErrorMessage( 1, [ 'Cannot locate the directoty holding the configuration files.'
|
import platformdirs
|
||||||
, 'The path is something ending by <.../etc/coriolis2>.'] )
|
sysConfDir = os.path.join(platformdirs.user_config_dir(), 'coriolis2')
|
||||||
|
#raise ErrorMessage( 1, [ 'Cannot locate the directoty holding the configuration files.'
|
||||||
|
# , 'The path is something ending by <.../etc/coriolis2>.'] )
|
||||||
if not quiet: print( ' - "{}"'.format( sysConfDir ))
|
if not quiet: print( ' - "{}"'.format( sysConfDir ))
|
||||||
sys.path.append( sysConfDir )
|
sys.path.append( sysConfDir )
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/__init__.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
import coriolis.Cfg as Cfg
|
|
||||||
from coriolis.helpers import truncPath, tagConfModules
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 1, ' o Loading "symbolic.lcmos" technology.' )
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from coriolis.Hurricane import DataBase
|
|
||||||
from coriolis.CRL import System
|
|
||||||
|
|
||||||
Cfg.Configuration.pushDefaultPriority( Cfg.Parameter.Priority.ConfigurationFile )
|
|
||||||
|
|
||||||
if not DataBase.getDB(): DataBase.create()
|
|
||||||
System.get()
|
|
||||||
|
|
||||||
from . import misc
|
|
||||||
from . import technology
|
|
||||||
from . import display
|
|
||||||
from . import analog
|
|
||||||
from . import alliance
|
|
||||||
from . import etesian
|
|
||||||
from . import kite
|
|
||||||
from . import plugins
|
|
||||||
from . import stratus1
|
|
||||||
|
|
||||||
Cfg.Configuration.popDefaultPriority()
|
|
||||||
|
|
||||||
tagConfModules()
|
|
|
@ -1,56 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/alliance.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
import os
|
|
||||||
import os.path
|
|
||||||
from coriolis.helpers import truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
|
|
||||||
|
|
||||||
from coriolis.CRL import Environment, AllianceFramework
|
|
||||||
|
|
||||||
allianceTop = None
|
|
||||||
if 'ALLIANCE_TOP' in os.environ:
|
|
||||||
allianceTop = os.environ['ALLIANCE_TOP']
|
|
||||||
if not os.path.isdir(allianceTop):
|
|
||||||
allianceTop = None
|
|
||||||
if not allianceTop: allianceTop = '/soc/alliance'
|
|
||||||
|
|
||||||
cellsTop = allianceTop+'/cells'
|
|
||||||
af = AllianceFramework.get()
|
|
||||||
env = af.getEnvironment()
|
|
||||||
|
|
||||||
env.setSCALE_X ( 100 )
|
|
||||||
env.setCATALOG ( 'CATAL' )
|
|
||||||
env.setIN_LO ( 'vst' )
|
|
||||||
env.setIN_PH ( 'ap' )
|
|
||||||
env.setOUT_LO ( 'vst' )
|
|
||||||
env.setOUT_PH ( 'ap' )
|
|
||||||
env.setPOWER ( 'vdd' )
|
|
||||||
env.setGROUND ( 'vss' )
|
|
||||||
env.setCLOCK ( '.*ck.*|.*nck.*' )
|
|
||||||
env.setBLOCKAGE ( 'blockage[Nn]et.*' )
|
|
||||||
env.setPad ( '.*_px$' )
|
|
||||||
env.setRegister ( 'sff.*' )
|
|
||||||
|
|
||||||
env.setWORKING_LIBRARY( '.' )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/sxlib' , mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/dp_sxlib', mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/ramlib' , mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/romlib' , mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/rflib' , mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/rf2lib' , mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/pxlib' , mode=Environment.Append )
|
|
||||||
env.addSYSTEM_LIBRARY ( library=cellsTop+'/padlib' , mode=Environment.Append )
|
|
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/analog.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
from coriolis.helpers import truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from ...common import analog
|
|
|
@ -1,474 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/display.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
from coriolis.helpers import truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
import coriolis.Cfg as Cfg
|
|
||||||
import coriolis.Viewer as Viewer
|
|
||||||
from coriolis.helpers import overlay, l, u, n
|
|
||||||
from coriolis.technos.common.colors import toRGB
|
|
||||||
from coriolis.technos.common.patterns import toHexa
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
|
|
||||||
def createStyles ( scale=1.0 ):
|
|
||||||
with overlay.CfgCache(priority=Cfg.Parameter.Priority.UserFile) as cfg:
|
|
||||||
cfg.viewer.minimumSize = 500
|
|
||||||
cfg.viewer.pixelThreshold = 5
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: Alliance.Coriolis [black].
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'Alliance.Coriolis [black]' )
|
|
||||||
style.setDescription( 'Alliance Coriolis Look - black background' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
style.addDrawingStyle( group='Viewer', name='fallback' , color=toRGB('Gray238' ), border=1, pattern='55AA55AA55AA55AA' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='background' , color=toRGB('Gray50' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='foreground' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='rubber' , color=toRGB('192,0,192' ), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='phantom' , color=toRGB('Seashell4' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='boundaries' , color=toRGB('208,199,192'), border=1, pattern='0000000000000000', threshold=0 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='marker' , color=toRGB('80,250,80' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionDraw' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionFill' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='grid' , color=toRGB('White' ), border=1, threshold=2.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='spot' , color=toRGB('White' ), border=2, threshold=6.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='ghost' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.ruler' , color=toRGB('White' ), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.instance' , color=toRGB('Black' ), border=1, threshold=4.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.reference' , color=toRGB('White' ), border=1, threshold=20.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='undef' , color=toRGB('Violet' ), border=0, pattern='2244118822441188' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='mauka.container', color=toRGB('Magenta4' ), border=4, pattern='0000000000000000', goMatched=False )
|
|
||||||
|
|
||||||
# Group: Active Layer.
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='nWell' , color=toRGB('Tan' ), pattern='55AA55AA55AA55AA' , threshold=1.5 *scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='pWell' , color=toRGB('LightYellow'), pattern='55AA55AA55AA55AA' , threshold=1.50*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='nImplant', color=toRGB('LawnGreen' ), pattern='55AA55AA55AA55AA' , threshold=1.50*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='pImplant', color=toRGB('Yellow' ), pattern='55AA55AA55AA55AA' , threshold=1.50*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='active' , color=toRGB('White' ), pattern=toHexa('antihash1.8'), threshold=1.50*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='poly' , color=toRGB('Red' ), pattern='55AA55AA55AA55AA' , threshold=1.50*scale )
|
|
||||||
|
|
||||||
# Group: Routing Layer.
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal1' , color=toRGB('Blue' ), pattern=toHexa('poids2.8' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal2' , color=toRGB('Aqua' ), pattern=toHexa('light_antihash0.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal3' , color=toRGB('LightPink'), pattern=toHexa('light_antihash1.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal4' , color=toRGB('Green' ), pattern=toHexa('light_antihash2.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal5' , color=toRGB('Yellow' ), pattern='1144114411441144' , threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal6' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal7' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal8' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal9' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal10', color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.02*scale )
|
|
||||||
|
|
||||||
# Group: Cuts (VIA holes).
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut0', color=toRGB('0,150,150'), threshold=1.50*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut1', color=toRGB('Aqua' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut2', color=toRGB('LightPink'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut3', color=toRGB('Green' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut4', color=toRGB('Yellow' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut5', color=toRGB('Violet' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut6', color=toRGB('Violet' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut7', color=toRGB('Violet' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut8', color=toRGB('Violet' ), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut9', color=toRGB('Violet' ), threshold=0.80*scale )
|
|
||||||
|
|
||||||
# Group: MIM6.
|
|
||||||
style.addDrawingStyle( group='MIM6', name='metbot_r', color=toRGB('Aqua' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='MIM6', name='cut6' , color=toRGB('LightPink'), pattern=toHexa('light_antihash1.8'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='MIM6', name='metal7' , color=toRGB('Green' ), pattern=toHexa('light_antihash2.8'), threshold=0.80*scale )
|
|
||||||
|
|
||||||
# Group: Blockages.
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage1' , color=toRGB('Blue' ), pattern='006070381c0e0703' , threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage2' , color=toRGB('Aqua' ), pattern='8103060c183060c0' , threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage3' , color=toRGB('LightPink'), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage4' , color=toRGB('Green' ), pattern=toHexa('light_antihash2.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage5' , color=toRGB('Yellow' ), pattern='1144114411441144' , threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage6' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage7' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage8' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage9' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage10', color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
|
|
||||||
# Group: Knik & Kite.
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='SPL1' , color=toRGB('Red' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='AutoLayer' , color=toRGB('Magenta' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalh' , color=toRGB('128,255,200'), pattern=toHexa('light_antihash0.8'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalv' , color=toRGB('200,200,255'), pattern=toHexa('light_antihash1.8'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gcut' , color=toRGB('255,255,190'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::Edge' , color=toRGB('255,255,190'), pattern='0000000000000000', threshold=0.02*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::GCell', color=toRGB('255,0,0' ), pattern='0000000000000000', threshold=0.02*scale, border=4 )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: Alliance.Coriolis [white].
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'Alliance.Coriolis [white]' )
|
|
||||||
style.inheritFrom( 'Alliance.Coriolis [black]' )
|
|
||||||
style.setDescription( 'Alliance Coriolis Look - white background' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
style.addDrawingStyle( group='Viewer', name='fallback' , color=toRGB('Gray238' ), border=1, pattern='55AA55AA55AA55AA' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='background' , color=toRGB('Gray50' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='foreground' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='rubber' , color=toRGB('192,0,192' ), border=4, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='phantom' , color=toRGB('Seashell4' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='boundaries' , color=toRGB('208,199,192'), border=1, pattern='0000000000000000', threshold=0 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='marker' , color=toRGB('80,250,80' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionDraw' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionFill' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='grid' , color=toRGB('White' ), border=1, threshold=2.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='spot' , color=toRGB('White' ), border=2, threshold=6.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='ghost' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.ruler' , color=toRGB('White' ), border=1, threshold=0.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.instance' , color=toRGB('White' ), border=1, threshold=400.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.reference', color=toRGB('White' ), border=1, threshold=200.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='undef' , color=toRGB('Violet' ), border=0, pattern='2244118822441188' )
|
|
||||||
|
|
||||||
# Active Layers.
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='nWell' , color=toRGB('Tan' ), pattern=toHexa('urgo.8' ), border=1, threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='pWell' , color=toRGB('LightYellow'), pattern=toHexa('urgo.8' ), border=1, threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='nImplant', color=toRGB('LawnGreen' ), pattern=toHexa('antihash0.8'), border=1, threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='pImplant', color=toRGB('Yellow' ), pattern=toHexa('antihash0.8'), border=1, threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='active' , color=toRGB('White' ), pattern=toHexa('antihash1.8'), border=1, threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='poly' , color=toRGB('Red' ), pattern=toHexa('poids2.8' ), border=1, threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layer', name='poly2' , color=toRGB('Orange' ), pattern=toHexa('poids2.8' ), border=1, threshold=0*scale )
|
|
||||||
|
|
||||||
# Routing Layers.
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal1' , color=toRGB('Blue' ), pattern=toHexa('slash.8' ), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal2' , color=toRGB('Aqua' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metcap' , color=toRGB('DarkTurquoise'), pattern=toHexa('poids2.8'), border=2, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal3' , color=toRGB('LightPink' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal4' , color=toRGB('Green' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal5' , color=toRGB('Yellow' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal6' , color=toRGB('Violet' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal7' , color=toRGB('Red' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal8' , color=toRGB('Blue' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal9' , color=toRGB('Blue' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layer', name='metal10', color=toRGB('Blue' ), pattern=toHexa('poids4.8'), border=1, threshold=0.0*scale )
|
|
||||||
|
|
||||||
|
|
||||||
# Cuts (VIA holes).
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut0', color=toRGB('0,150,150'), threshold=0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut1', color=toRGB('Aqua' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut2', color=toRGB('LightPink'), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut3', color=toRGB('Green' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut4', color=toRGB('Yellow' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut5', color=toRGB('Violet' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut6', color=toRGB('Red' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut7', color=toRGB('Blue' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut8', color=toRGB('Blue' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut9', color=toRGB('Blue' ), threshold=0.0*scale )
|
|
||||||
|
|
||||||
# MIM6.
|
|
||||||
style.addDrawingStyle( group='MIM6', name='metbot_r', color=toRGB('Aqua' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='MIM6', name='metal7' , color=toRGB('Green'), pattern=toHexa('light_antihash2.8'), threshold=0.80*scale )
|
|
||||||
|
|
||||||
# Blockages.
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage1' , color=toRGB('Blue' ), pattern=toHexa('light_antislash0.8'), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage2' , color=toRGB('Aqua' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage3' , color=toRGB('LightPink'), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage4' , color=toRGB('Green' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage5' , color=toRGB('Yellow' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage6' , color=toRGB('Violet' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage7' , color=toRGB('Red' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage8' , color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage9' , color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage10', color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
|
|
||||||
# Knick & Kite.
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='SPL1' , color=toRGB('Red' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='AutoLayer' , color=toRGB('Magenta' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalh' , color=toRGB('128,255,200'), pattern=toHexa('antislash2.32' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalv' , color=toRGB('200,200,255'), pattern=toHexa('light_antihash1.8'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gcut' , color=toRGB('255,255,190'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::Edge' , color=toRGB('255,255,190'), pattern='0000000000000000', border=4, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::GCell', color=toRGB('255,255,190'), pattern='0000000000000000', border=2, threshold=0.10*scale )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: Alliance.Classic [black]
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'Alliance.Classic [black]' )
|
|
||||||
style.setDescription( 'Alliance Classic Look - black background' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
# Viewer.
|
|
||||||
style.addDrawingStyle( group='Viewer', name='fallback' , color=toRGB('Gray238' ), border=1, pattern='55AA55AA55AA55AA' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='background' , color=toRGB('Gray50' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='foreground' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='rubber' , color=toRGB('192,0,192' ), border=4, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='phantom' , color=toRGB('Seashell4' ), border=1 )
|
|
||||||
#style.addDrawingStyle( group='Viewer', name='boundaries' , color=toRGB('208,199,192'), border=2, threshold=0 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='boundaries' , color=toRGB('wheat1') , border=2, pattern='0000000000000000', threshold=0 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='marker' , color=toRGB('80,250,80' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionDraw' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionFill' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='grid' , color=toRGB('White' ), border=1, threshold=8.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='spot' , color=toRGB('White' ), border=2, threshold=6.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='ghost' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.ruler' , color=toRGB('White' ), border=1, threshold= 0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.instance' , color=toRGB('White' ), border=1, threshold=400.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.reference', color=toRGB('White' ), border=1, threshold=200.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='undef' , color=toRGB('Violet' ), border=0, pattern='2244118822441188' )
|
|
||||||
|
|
||||||
# Active Layers.
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='nWell' , color=toRGB('Tan' ), pattern=toHexa('urgo.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='pWell' , color=toRGB('LightYellow'), pattern=toHexa('urgo.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='nImplant', color=toRGB('LawnGreen' ), pattern=toHexa('antihash0.8'), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='pImplant', color=toRGB('Yellow' ), pattern=toHexa('antihash0.8'), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='active' , color=toRGB('White' ), pattern='0000000000000000' , border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='poly' , color=toRGB('Red' ), pattern=toHexa('poids2.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='poly2' , color=toRGB('Orange' ), pattern=toHexa('poids2.8' ), border=1, threshold=0.00*scale )
|
|
||||||
|
|
||||||
# Routing Layers.
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal1' , color=toRGB('Blue' ), pattern=toHexa('slash.8' ), border=1, threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal2' , color=toRGB('Aqua' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metcap' , color=toRGB('DarkTurquoise'), pattern=toHexa('poids2.8' ), border=2, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal3' , color=toRGB('LightPink' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal4' , color=toRGB('Green' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal5' , color=toRGB('Yellow' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal6' , color=toRGB('Violet' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal7' , color=toRGB('Red' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal8' , color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal9' , color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal10', color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), border=1, threshold=0.00*scale )
|
|
||||||
|
|
||||||
# Cuts (VIA holes).
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut0', color=toRGB('0,150,150'), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut1', color=toRGB('Aqua' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut2', color=toRGB('LightPink'), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut3', color=toRGB('Green' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut4', color=toRGB('Yellow' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut5', color=toRGB('Violet' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut6', color=toRGB('Red' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut7', color=toRGB('Blue' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut8', color=toRGB('Blue' ), threshold=0.0*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut9', color=toRGB('Blue' ), threshold=0.0*scale )
|
|
||||||
|
|
||||||
# MIM6.
|
|
||||||
style.addDrawingStyle( group='MIMI6', name='metbot_r', color=toRGB('Aqua' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='MIMI6', name='metal7' , color=toRGB('Green'), pattern=toHexa('light_antihash2.8'), threshold=0.80*scale )
|
|
||||||
|
|
||||||
# Blockages.
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage1' , color=toRGB('Blue' ), pattern=toHexa('light_antislash0.8'), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage2' , color=toRGB('Aqua' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage3' , color=toRGB('LightPink'), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage4' , color=toRGB('Green' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage5' , color=toRGB('Yellow' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage6' , color=toRGB('Violet' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage7' , color=toRGB('Red' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage8' , color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage9' , color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage10', color=toRGB('Blue' ), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=4 )
|
|
||||||
|
|
||||||
# Knick & Kite.
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='SPL1' , color=toRGB('Red' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='AutoLayer' , color=toRGB('Magenta' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalh' , color=toRGB('128,255,200'), pattern=toHexa('antislash2.32' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalv' , color=toRGB('200,200,255'), pattern=toHexa('light_antihash1.8'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gcut' , color=toRGB('255,255,190'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::Edge' , color=toRGB('255,255,190'), pattern='0000000000000000' , border=4, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::GCell', color=toRGB('255,255,190'), pattern='0000000000000000' , border=2, threshold=0.10*scale )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: Alliance.Classic [white].
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'Alliance.Classic [white]' )
|
|
||||||
style.inheritFrom( 'Alliance.Classic [black]' )
|
|
||||||
style.setDescription( 'Alliance Classic Look - white background' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
# Group: Viewer.
|
|
||||||
style.addDrawingStyle( group='Viewer', name='fallback' , color=toRGB('Black'), border=1, pattern='55AA55AA55AA55AA' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='background' , color=toRGB('White'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='foreground' , color=toRGB('Black'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionDraw' , color=toRGB('Black'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionFill' , color=toRGB('Black'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='grid' , color=toRGB('Black'), border=1, threshold=6.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='spot' , color=toRGB('Black'), border=1, threshold=6.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='ghost' , color=toRGB('Black'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.ruler' , color=toRGB('Black'), border=1, threshold=0.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.instance' , color=toRGB('Black'), border=1, threshold=4.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.reference', color=toRGB('Black'), border=1, threshold=20.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='undef' , color=toRGB('Black'), border=0, pattern='2244118822441188' )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: Layout Design [black]
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'Layout Design [black]' )
|
|
||||||
style.inheritFrom( 'Alliance.Classic [black]' )
|
|
||||||
style.setDescription( 'Alliance Classic Look - white background' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
# Active Layers.
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='nWell' , color=toRGB('Tan' ), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='pWell' , color=toRGB('LightYellow'), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='nImplant', color=toRGB('LawnGreen' ), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='pImplant', color=toRGB('Yellow' ), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='active' , color=toRGB('White' ), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='poly' , color=toRGB('Red' ), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
|
|
||||||
# Routing Layers.
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal1' , color=toRGB('Blue' ), pattern='0000000000000000', threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal2' , color=toRGB('Aqua' ), pattern='0000000000000000', threshold=0.40*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal3' , color=toRGB('LightPink'), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal4' , color=toRGB('Green' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal5' , color=toRGB('Yellow' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal6' , color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal7' , color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal8' , color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal9' , color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal10', color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.02*scale, border=2 )
|
|
||||||
|
|
||||||
# Cuts (VIA holes).
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut0', color=toRGB('0,150,150'), pattern=toHexa('poids4.8'), threshold=1.50*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut1', color=toRGB('Aqua' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut2', color=toRGB('LightPink'), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut3', color=toRGB('Green' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut4', color=toRGB('Yellow' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut5', color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut6', color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut7', color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut8', color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut9', color=toRGB('Violet' ), pattern='0000000000000000', threshold=0.80*scale, border=1 )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: Layout Design [white]
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'Layout Design [white]' )
|
|
||||||
style.inheritFrom( 'Layout Design [black]' )
|
|
||||||
style.setDescription( 'Layout Design Look - white background' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
|
|
||||||
# Group: Viewer.
|
|
||||||
style.addDrawingStyle( group='Viewer', name='background' , color=toRGB('White'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='grid' , color=toRGB('Black'), border=1, threshold=2.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='spot' , color=toRGB('Black'), border=1, threshold=2.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.ruler' , color=toRGB('Black'), border=1, threshold=0.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.reference', color=toRGB('Black'), border=1, threshold=20.0*scale )
|
|
||||||
|
|
||||||
# Group: Active Layers.
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='active', color=toRGB('175,175,175'), pattern='0000000000000000', threshold=1.50*scale, border=2 )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Style: For Printers [white]
|
|
||||||
|
|
||||||
style = Viewer.DisplayStyle( 'For Printers' )
|
|
||||||
style.setDescription( 'For Printers' )
|
|
||||||
style.setDarkening ( Viewer.DisplayStyle.HSVr(1.0, 3.0, 2.5) )
|
|
||||||
|
|
||||||
# Group: Viewer.
|
|
||||||
style.addDrawingStyle( group='Viewer', name='fallback' , color=toRGB('Gray238' ), border=1, pattern='55AA55AA55AA55AA' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='background' , color=toRGB('White' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='foreground' , color=toRGB('Black' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='rubber' , color=toRGB('192,0,192'), border=4, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='phantom' , color=toRGB('Seashell4'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='boundaries' , color=toRGB('Black' ), border=1, pattern='0000000000000000', threshold=0 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='marker' , color=toRGB('80,250,80'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionDraw' , color=toRGB('Black' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='selectionFill' , color=toRGB('Black' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='grid' , color=toRGB('Black' ), border=1, threshold=2.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='spot' , color=toRGB('Black' ), border=2, threshold=6.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='ghost' , color=toRGB('Black' ), border=1 )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.ruler' , color=toRGB('Black' ), border=1, threshold=0.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.instance' , color=toRGB('Black' ), border=1, threshold=4.0 *scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='text.reference' , color=toRGB('Black' ), border=1, threshold=20.0*scale )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='undef' , color=toRGB('Violet' ), border=0, pattern='2244118822441188' )
|
|
||||||
style.addDrawingStyle( group='Viewer', name='mauka.container', color=toRGB('Magenta4' ), border=4, pattern='0000000000000000', goMatched=False )
|
|
||||||
|
|
||||||
# Group: Active Layers.
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='nWell' , color=toRGB('Tan' ), pattern=toHexa('urgo.32' ), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='pWell' , color=toRGB('LightYellow'), pattern=toHexa('antipoids2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='nImplant', color=toRGB('LawnGreen' ), pattern=toHexa('diffusion.32' ), border=0, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='pImplant', color=toRGB('Yellow' ), pattern=toHexa('diffusion.32' ), border=0, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='active' , color=toRGB('White' ), pattern=toHexa('active.32' ), border=0, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='poly' , color=toRGB('Red' ), pattern=toHexa('antipoids2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Active Layers', name='poly2' , color=toRGB('Orange' ), pattern=toHexa('antipoids2.32'), border=1, threshold=0.02*scale )
|
|
||||||
|
|
||||||
# Group: Routing Layers.
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal1' , color=toRGB('Blue' ), pattern=toHexa('slash.32' ), border=4, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal2' , color=toRGB('Aqua' ), pattern=toHexa('antislash2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metcap' , color=toRGB('DarkTurquoise'), pattern=toHexa('poids2.32' ), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal3' , color=toRGB('LightPink' ), pattern=toHexa('antislash3.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal4' , color=toRGB('Green' ), pattern=toHexa('antislash4.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal5' , color=toRGB('Yellow' ), pattern=toHexa('antislash5.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal6' , color=toRGB('Violet' ), pattern=toHexa('antislash2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal7' , color=toRGB('Violet' ), pattern=toHexa('antislash2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal8' , color=toRGB('Violet' ), pattern=toHexa('antislash2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal9' , color=toRGB('Violet' ), pattern=toHexa('antislash2.32'), border=1, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Routing Layers', name='metal10', color=toRGB('Violet' ), pattern=toHexa('antislash2.32'), border=1, threshold=0.02*scale )
|
|
||||||
|
|
||||||
# Group: Cuts (VIA holes)
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut0', color=toRGB('Blue' ), pattern=toHexa('poids2.8' ), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut1', color=toRGB('Aqua' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut2', color=toRGB('LightPink'), pattern=toHexa('poids2.8' ), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut3', color=toRGB('Green' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut4', color=toRGB('Yellow' ), pattern=toHexa('poids2.8' ), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut5', color=toRGB('Violet' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut6', color=toRGB('Violet' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut7', color=toRGB('Violet' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut8', color=toRGB('Violet' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
style.addDrawingStyle( group='Cuts (VIA holes)', name='cut9', color=toRGB('Violet' ), pattern=toHexa('antipoids2.8'), border=2, threshold=0.02*scale )
|
|
||||||
|
|
||||||
# Group: MIM6.
|
|
||||||
style.addDrawingStyle( group='MIM6', name='metbot_r', color=toRGB('Aqua' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='MIM6', name='cut6' , color=toRGB('LightPink'), pattern=toHexa('light_antihash1.8'), threshold=0.80*scale )
|
|
||||||
style.addDrawingStyle( group='MIM6', name='metal7' , color=toRGB('Green' ), pattern=toHexa('light_antihash2.8'), threshold=0.80*scale )
|
|
||||||
|
|
||||||
# Group: Blockages.
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage1' , color=toRGB('Blue' ), pattern='006070381c0e0703' , threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage2' , color=toRGB('Aqua' ), pattern='8103060c183060c0' , threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage3' , color=toRGB('LightPink'), pattern=toHexa('poids4.8' ), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage4' , color=toRGB('Green' ), pattern=toHexa('light_antihash2.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage5' , color=toRGB('Yellow' ), pattern='1144114411441144' , threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage6' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage7' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage8' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage9' , color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
style.addDrawingStyle( group='Blockages', name='blockage10', color=toRGB('Violet' ), pattern=toHexa('light_antihash0.8'), threshold=0.80*scale, border=2 )
|
|
||||||
|
|
||||||
# Group: Knik & Kite.
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='SPL1' , color=toRGB('Red' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='AutoLayer' , color=toRGB('Magenta' ) )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalh' , color=toRGB('128,255,200'), pattern=toHexa('light_antihash0.8') , border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gmetalv' , color=toRGB('200,200,255'), pattern=toHexa('light_antihash1.8') , border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='gcut' , color=toRGB('255,255,190'), border=1 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::Edge' , color=toRGB('255,255,190'), pattern='0000000000000000', border=2 )
|
|
||||||
style.addDrawingStyle( group='Knik & Kite', name='Anabatic::GCell', color=toRGB('Black' ), pattern='0000000000000000', border=2, threshold=0.80*scale )
|
|
||||||
|
|
||||||
Viewer.Graphics.addStyle( style )
|
|
||||||
|
|
||||||
|
|
||||||
Viewer.Graphics.setStyle( 'Alliance.Classic [black]' )
|
|
||||||
|
|
||||||
createStyles( scale=1.0 )
|
|
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/etesian.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
from coriolis.helpers import truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from ...common import etesian
|
|
|
@ -1,194 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/kite.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
import coriolis.Cfg as Cfg
|
|
||||||
from coriolis.Hurricane import DataBase
|
|
||||||
from coriolis.CRL import AllianceFramework, RoutingGauge, \
|
|
||||||
RoutingLayerGauge, CellGauge
|
|
||||||
from coriolis.helpers import truncPath, l, u, n
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from ...common import kite
|
|
||||||
|
|
||||||
|
|
||||||
p = Cfg.getParamDouble ( 'lefImport.minTerminalWidth' ).setDouble ( 0.0 )
|
|
||||||
p = Cfg.getParamString ( 'katabatic.routingGauge' ).setString ( 'sxlib' )
|
|
||||||
p = Cfg.getParamInt ( "katabatic.globalLengthThreshold" ).setInt ( 1450 )
|
|
||||||
p = Cfg.getParamPercentage( "katabatic.saturateRatio" ).setPercentage( 80 )
|
|
||||||
p = Cfg.getParamInt ( "katabatic.saturateRp" ).setInt ( 8 )
|
|
||||||
p = Cfg.getParamString ( 'katabatic.topRoutingLayer' ).setString ( 'METAL5' )
|
|
||||||
|
|
||||||
# Kite parameters.
|
|
||||||
p = Cfg.getParamInt( "kite.hTracksReservedLocal" ); p.setInt( 3 ); p.setMin( 0 ); p.setMax( 20 )
|
|
||||||
p = Cfg.getParamInt( "kite.vTracksReservedLocal" ); p.setInt( 3 ); p.setMin( 0 ); p.setMax( 20 )
|
|
||||||
p = Cfg.getParamInt( "kite.eventsLimit" ); p.setInt( 4000002 )
|
|
||||||
p = Cfg.getParamInt( "kite.ripupCost" ); p.setInt( 3 ); p.setMin( 0 )
|
|
||||||
p = Cfg.getParamInt( "kite.strapRipupLimit" ); p.setInt( 16 ); p.setMin( 1 )
|
|
||||||
p = Cfg.getParamInt( "kite.localRipupLimit" ); p.setInt( 9 ); p.setMin( 1 )
|
|
||||||
p = Cfg.getParamInt( "kite.globalRipupLimit" ); p.setInt( 5 ); p.setMin( 1 )
|
|
||||||
p = Cfg.getParamInt( "kite.longGlobalRipupLimit" ); p.setInt( 5 ); p.setMin( 1 )
|
|
||||||
|
|
||||||
# Anabatic & Katana parameters are temporarily hosted here.
|
|
||||||
p = Cfg.getParamString ( 'anabatic.routingGauge' ); p.setString ( 'sxlib' )
|
|
||||||
p = Cfg.getParamInt ( "anabatic.globalLengthThreshold" ); p.setInt ( 1450 )
|
|
||||||
p = Cfg.getParamPercentage( "anabatic.saturateRatio" ); p.setPercentage( 80 )
|
|
||||||
p = Cfg.getParamInt ( "anabatic.saturateRp" ); p.setInt ( 8 )
|
|
||||||
p = Cfg.getParamString ( 'anabatic.topRoutingLayer' ); p.setString ( 'METAL5' )
|
|
||||||
p = Cfg.getParamInt ( "anabatic.edgeLength" ); p.setInt ( 24 )
|
|
||||||
p = Cfg.getParamInt ( "anabatic.edgeWidth" ); p.setInt ( 4 )
|
|
||||||
p = Cfg.getParamDouble ( "anabatic.edgeCostH" ); p.setDouble ( 19.0 )
|
|
||||||
p = Cfg.getParamDouble ( "anabatic.edgeCostK" ); p.setDouble ( -60.0 )
|
|
||||||
p = Cfg.getParamDouble ( "anabatic.edgeHScaling" ); p.setDouble ( 1.0 )
|
|
||||||
p = Cfg.getParamInt ( "anabatic.globalIterations" ); p.setInt ( 10 ); p.setMin(1); p.setMax(100)
|
|
||||||
p = Cfg.getParamEnumerate ( "anabatic.gcell.displayMode" ); p.setInt ( 1 )
|
|
||||||
p.addValue( "Boundary", 1 )
|
|
||||||
p.addValue( "Density" , 2 )
|
|
||||||
|
|
||||||
p = Cfg.getParamBool ( "katana.useGlobalEstimate" ); p.setBool ( False );
|
|
||||||
p = Cfg.getParamInt ( "katana.hTracksReservedLocal" ); p.setInt ( 3 ); p.setMin(0); p.setMax(20)
|
|
||||||
p = Cfg.getParamInt ( "katana.vTracksReservedLocal" ); p.setInt ( 3 ); p.setMin(0); p.setMax(20)
|
|
||||||
p = Cfg.getParamInt ( "katana.hTracksReservedMin" ); p.setInt ( 1 ); p.setMin(0); p.setMax(20)
|
|
||||||
p = Cfg.getParamInt ( "katana.vTracksReservedMin" ); p.setInt ( 1 ); p.setMin(0); p.setMax(20)
|
|
||||||
p = Cfg.getParamInt ( "katana.termSatReservedLocal" ); p.setInt ( 8 )
|
|
||||||
p = Cfg.getParamInt ( "katana.termSatThreshold" ); p.setInt ( 9 )
|
|
||||||
p = Cfg.getParamInt ( "katana.eventsLimit" ); p.setInt ( 4000002 )
|
|
||||||
p = Cfg.getParamInt ( "katana.ripupCost" ); p.setInt ( 3 ); p.setMin(0)
|
|
||||||
p = Cfg.getParamInt ( "katana.strapRipupLimit" ); p.setInt ( 16 ); p.setMin(1)
|
|
||||||
p = Cfg.getParamInt ( "katana.localRipupLimit" ); p.setInt ( 9 ); p.setMin(1)
|
|
||||||
p = Cfg.getParamInt ( "katana.globalRipupLimit" ); p.setInt ( 5 ); p.setMin(1)
|
|
||||||
p = Cfg.getParamInt ( "katana.longGlobalRipupLimit" ); p.setInt ( 5 ); p.setMin(1)
|
|
||||||
p = Cfg.getParamString( 'chip.padCoreSide' ); p.setString( 'South' )
|
|
||||||
|
|
||||||
|
|
||||||
tech = DataBase.getDB().getTechnology()
|
|
||||||
af = AllianceFramework.get()
|
|
||||||
rg = RoutingGauge.create( 'sxlib' )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL1') # metal.
|
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.PinOnly # layer usage.
|
|
||||||
, 0 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA12).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL2') # metal.
|
|
||||||
, RoutingLayerGauge.Horizontal # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.Default # layer usage.
|
|
||||||
, 1 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA23).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL3') # metal.
|
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.Default # layer usage.
|
|
||||||
, 2 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA34).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL4') # metal.
|
|
||||||
, RoutingLayerGauge.Horizontal # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.Default # layer usage.
|
|
||||||
, 3 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA23).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL5') # metal.
|
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.Default # layer usage.
|
|
||||||
, 4 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA23).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
af.addRoutingGauge( rg )
|
|
||||||
|
|
||||||
rg = RoutingGauge.create( 'sxlib-2M' )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL1') # metal.
|
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.PinOnly # layer usage.
|
|
||||||
, 0 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA12).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
rg.addLayerGauge( RoutingLayerGauge.create( tech.getLayer('METAL2') # metal.
|
|
||||||
, RoutingLayerGauge.Horizontal # preferred routing direction.
|
|
||||||
, RoutingLayerGauge.Default # layer usage.
|
|
||||||
, 1 # depth.
|
|
||||||
, 0.0 # density (deprecated).
|
|
||||||
, l(0) # track offset from AB.
|
|
||||||
, l(5) # track pitch.
|
|
||||||
, l(2) # wire width.
|
|
||||||
, 0 # perpandicular wire width.
|
|
||||||
, l(1) # VIA side (that is VIA23).
|
|
||||||
, l(4) # obstacle dW.
|
|
||||||
) )
|
|
||||||
|
|
||||||
af.addRoutingGauge( rg )
|
|
||||||
af.setRoutingGauge( 'sxlib' )
|
|
||||||
|
|
||||||
# Gauge for standard cells.
|
|
||||||
cg = CellGauge.create( 'sxlib'
|
|
||||||
, 'metal2' # pin layer name.
|
|
||||||
, l( 5.0) # pitch.
|
|
||||||
, l( 50.0) # cell slice height.
|
|
||||||
, l( 5.0) # cell slice step.
|
|
||||||
)
|
|
||||||
af.addCellGauge( cg )
|
|
||||||
|
|
||||||
# Gauge for Alliance symbolic I/O pads.
|
|
||||||
cg = CellGauge.create( 'pxlib'
|
|
||||||
, 'metal2' # pin layer name.
|
|
||||||
, l( 5.0) # pitch.
|
|
||||||
, l(400.0) # cell slice height.
|
|
||||||
, l(200.0) # cell slice step.
|
|
||||||
)
|
|
||||||
af.addCellGauge( cg )
|
|
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/misc.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
from coriolis.helpers import truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from ...common import misc
|
|
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/patterns.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
from coriolis.helpers import truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from ...common import patterns
|
|
|
@ -1,32 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/plugins.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
import coriolis.Cfg as Cfg
|
|
||||||
from coriolis.helpers import truncPath, l, u, n
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
Cfg.getParamInt ( "chip.block.rails.count" ).setInt ( 5 )
|
|
||||||
Cfg.getParamInt ( "chip.block.rails.hWidth" ).setInt ( l( 12) )
|
|
||||||
Cfg.getParamInt ( "chip.block.rails.vWidth" ).setInt ( l( 12) )
|
|
||||||
Cfg.getParamInt ( "chip.block.rails.hSpacing" ).setInt ( l( 3) )
|
|
||||||
Cfg.getParamInt ( "chip.block.rails.vSpacing" ).setInt ( l( 3) )
|
|
||||||
Cfg.getParamBool ( "chip.useAbstractPads" ).setBool ( True )
|
|
||||||
Cfg.getParamInt ( 'clockTree.minimumSide' ).setInt ( l(600) )
|
|
||||||
Cfg.getParamString( 'clockTree.buffer' ).setString( 'buf_x2')
|
|
||||||
Cfg.getParamString( 'clockTree.placerEngine' ).setString( 'Etesian')
|
|
||||||
Cfg.getParamInt ( 'block.spareSide' ).setInt ( 10 )
|
|
||||||
Cfg.getParamString( 'spares.buffer' ).setString( 'buf_x8')
|
|
||||||
Cfg.getParamInt ( 'spares.maxSinks' ).setInt ( 31 )
|
|
|
@ -1,26 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/stratus1.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
import os.path
|
|
||||||
import coriolis.Cfg as Cfg
|
|
||||||
from coriolis.helpers import sysConfDir, truncPath
|
|
||||||
from coriolis.helpers.io import vprint
|
|
||||||
vprint( 2, ' - "%s".' % truncPath(__file__) )
|
|
||||||
|
|
||||||
from ...common import stratus1
|
|
||||||
|
|
||||||
Cfg.getParamString( "stratus1.format" ).setString( "vst" )
|
|
||||||
Cfg.getParamString( "stratus1.simulator" ).setString( "asimut" )
|
|
||||||
Cfg.getParamString( "stratus1.mappingName" ).setString( os.path.join(sysConfDir,'symbolic/cmos/stratus2sxlib.xml') )
|
|
|
@ -1,401 +0,0 @@
|
||||||
|
|
||||||
# This file is part of the Coriolis Software.
|
|
||||||
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
|
|
||||||
#
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
# | C O R I O L I S |
|
|
||||||
# | Alliance / Hurricane Interface |
|
|
||||||
# | |
|
|
||||||
# | Author : Jean-Paul CHAPUT |
|
|
||||||
# | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
||||||
# | =============================================================== |
|
|
||||||
# | Python : "./etc/symbolic/lcmos/technology.py" |
|
|
||||||
# +-----------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
from coriolis.helpers import l, u, n, truncPath
|
|
||||||
from coriolis.helpers.io import WarningMessage, vprint
|
|
||||||
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
|
|
||||||
|
|
||||||
from coriolis.Hurricane import DbU, DataBase, Technology, Layer, BasicLayer, \
|
|
||||||
DiffusionLayer, TransistorLayer, \
|
|
||||||
RegularLayer, ContactLayer, ViaLayer
|
|
||||||
|
|
||||||
|
|
||||||
def createBL ( layerName, material ):
|
|
||||||
global tech
|
|
||||||
return BasicLayer.create( tech, layerName, BasicLayer.Material(material) )
|
|
||||||
|
|
||||||
|
|
||||||
tech = DataBase.getDB().getTechnology()
|
|
||||||
if tech:
|
|
||||||
print( WarningMessage( 'lcmos.technology: Technology already exists, "{}"'.format(tech.getName()) ))
|
|
||||||
else:
|
|
||||||
tech = Technology.create( DataBase.getDB(), 'lcmos' )
|
|
||||||
|
|
||||||
DbU.setPrecision ( 2 )
|
|
||||||
DbU.setPhysicalsPerGrid ( 0.5, DbU.UnitPowerMicro )
|
|
||||||
DbU.setGridsPerLambda ( 2 )
|
|
||||||
DbU.setSymbolicSnapGridStep( DbU.fromLambda(1.0) )
|
|
||||||
DbU.setPolygonStep ( DbU.fromGrid (2.0) )
|
|
||||||
|
|
||||||
|
|
||||||
from ...common import loadGdsLayers
|
|
||||||
|
|
||||||
|
|
||||||
nWell = createBL( 'nWell' , BasicLayer.Material.nWell ) # Non-Routing Layers.
|
|
||||||
pWell = createBL( 'pWell' , BasicLayer.Material.pWell )
|
|
||||||
nImplant = createBL( 'nImplant' , BasicLayer.Material.nImplant )
|
|
||||||
pImplant = createBL( 'pImplant' , BasicLayer.Material.pImplant )
|
|
||||||
active = createBL( 'active' , BasicLayer.Material.active )
|
|
||||||
poly = createBL( 'poly' , BasicLayer.Material.poly )
|
|
||||||
poly2 = createBL( 'poly2' , BasicLayer.Material.poly )
|
|
||||||
cut0 = createBL( 'cut0' , BasicLayer.Material.cut ) # Routing Layers & VIA Cuts.
|
|
||||||
metal1 = createBL( 'metal1' , BasicLayer.Material.metal ) # WARNING: order *is* meaningful.
|
|
||||||
cut1 = createBL( 'cut1' , BasicLayer.Material.cut )
|
|
||||||
metal2 = createBL( 'metal2' , BasicLayer.Material.metal )
|
|
||||||
metcap = createBL( 'metcap' , BasicLayer.Material.other )
|
|
||||||
cut2 = createBL( 'cut2' , BasicLayer.Material.cut )
|
|
||||||
metal3 = createBL( 'metal3' , BasicLayer.Material.metal )
|
|
||||||
cut3 = createBL( 'cut3' , BasicLayer.Material.cut )
|
|
||||||
metal4 = createBL( 'metal4' , BasicLayer.Material.metal )
|
|
||||||
cut4 = createBL( 'cut4' , BasicLayer.Material.cut )
|
|
||||||
metal5 = createBL( 'metal5' , BasicLayer.Material.metal )
|
|
||||||
cut5 = createBL( 'cut5' , BasicLayer.Material.cut )
|
|
||||||
metal6 = createBL( 'metal6' , BasicLayer.Material.metal )
|
|
||||||
cut6 = createBL( 'cut6' , BasicLayer.Material.cut )
|
|
||||||
metal7 = createBL( 'metal7' , BasicLayer.Material.metal )
|
|
||||||
cut7 = createBL( 'cut7' , BasicLayer.Material.cut )
|
|
||||||
metal8 = createBL( 'metal8' , BasicLayer.Material.metal )
|
|
||||||
cut8 = createBL( 'cut8' , BasicLayer.Material.cut )
|
|
||||||
metal9 = createBL( 'metal9' , BasicLayer.Material.metal )
|
|
||||||
cut9 = createBL( 'cut9' , BasicLayer.Material.cut )
|
|
||||||
metal10 = createBL( 'metal10' , BasicLayer.Material.metal )
|
|
||||||
|
|
||||||
blockage1 = createBL( 'blockage1' , BasicLayer.Material.blockage )
|
|
||||||
blockage2 = createBL( 'blockage2' , BasicLayer.Material.blockage )
|
|
||||||
blockage3 = createBL( 'blockage3' , BasicLayer.Material.blockage )
|
|
||||||
blockage4 = createBL( 'blockage4' , BasicLayer.Material.blockage )
|
|
||||||
blockage5 = createBL( 'blockage5' , BasicLayer.Material.blockage )
|
|
||||||
blockage6 = createBL( 'blockage6' , BasicLayer.Material.blockage )
|
|
||||||
blockage7 = createBL( 'blockage7' , BasicLayer.Material.blockage )
|
|
||||||
blockage8 = createBL( 'blockage8' , BasicLayer.Material.blockage )
|
|
||||||
blockage9 = createBL( 'blockage9' , BasicLayer.Material.blockage )
|
|
||||||
blockage10 = createBL( 'blockage10', BasicLayer.Material.blockage )
|
|
||||||
|
|
||||||
metal1 .setBlockageLayer( blockage1 )
|
|
||||||
metal2 .setBlockageLayer( blockage2 )
|
|
||||||
metal3 .setBlockageLayer( blockage3 )
|
|
||||||
metal4 .setBlockageLayer( blockage4 )
|
|
||||||
metal5 .setBlockageLayer( blockage5 )
|
|
||||||
metal6 .setBlockageLayer( blockage6 )
|
|
||||||
metal7 .setBlockageLayer( blockage7 )
|
|
||||||
metal8 .setBlockageLayer( blockage8 )
|
|
||||||
metal9 .setBlockageLayer( blockage9 )
|
|
||||||
metal10.setBlockageLayer( blockage10 )
|
|
||||||
|
|
||||||
textCell = createBL( 'text.cell' , BasicLayer.Material.other ) # Misc. non-physical layers.
|
|
||||||
textInst = createBL( 'text.instance', BasicLayer.Material.other ) # Used by the software for visualization
|
|
||||||
SPL1 = createBL( 'SPL1' , BasicLayer.Material.other ) # purposes only.
|
|
||||||
AutoLayer = createBL( 'AutoLayer' , BasicLayer.Material.other )
|
|
||||||
gmetalh = createBL( 'gmetalh' , BasicLayer.Material.metal ) # Special BasicLayers for Knik & Kite Routers.
|
|
||||||
gcut = createBL( 'gcut' , BasicLayer.Material.cut ) # *Must be after all others*
|
|
||||||
gmetalv = createBL( 'gmetalv' , BasicLayer.Material.metal )
|
|
||||||
|
|
||||||
# VIAs for real technologies.
|
|
||||||
via12 = ViaLayer.create( tech, 'via12' , metal1, cut1, metal2 )
|
|
||||||
via23 = ViaLayer.create( tech, 'via23' , metal2, cut2, metal3 )
|
|
||||||
via34 = ViaLayer.create( tech, 'via34' , metal3, cut3, metal4 )
|
|
||||||
via45 = ViaLayer.create( tech, 'via45' , metal4, cut4, metal5 )
|
|
||||||
via56 = ViaLayer.create( tech, 'via56' , metal5, cut5, metal6 )
|
|
||||||
via67 = ViaLayer.create( tech, 'via67' , metal6, cut6, metal7 )
|
|
||||||
via78 = ViaLayer.create( tech, 'via78' , metal7, cut7, metal8 )
|
|
||||||
via89 = ViaLayer.create( tech, 'via89' , metal8, cut8, metal9 )
|
|
||||||
via910 = ViaLayer.create( tech, 'via910', metal9, cut9, metal10 )
|
|
||||||
|
|
||||||
# Composite/Symbolic layers.
|
|
||||||
NWELL = RegularLayer .create( tech, 'NWELL' , nWell )
|
|
||||||
PWELL = RegularLayer .create( tech, 'PWELL' , pWell )
|
|
||||||
NTIE = DiffusionLayer .create( tech, 'NTIE' , nImplant , active, nWell)
|
|
||||||
PTIE = DiffusionLayer .create( tech, 'PTIE' , pImplant , active, pWell)
|
|
||||||
NDIF = DiffusionLayer .create( tech, 'NDIF' , nImplant , active, None )
|
|
||||||
PDIF = DiffusionLayer .create( tech, 'PDIF' , pImplant , active, None )
|
|
||||||
GATE = DiffusionLayer .create( tech, 'GATE' , poly , active, None )
|
|
||||||
NTRANS = TransistorLayer.create( tech, 'NTRANS' , nImplant , active, poly, None )
|
|
||||||
PTRANS = TransistorLayer.create( tech, 'PTRANS' , pImplant , active, poly, None )
|
|
||||||
POLY = RegularLayer .create( tech, 'POLY' , poly )
|
|
||||||
POLY2 = RegularLayer .create( tech, 'POLY2' , poly2 )
|
|
||||||
METAL1 = RegularLayer .create( tech, 'METAL1' , metal1 )
|
|
||||||
METAL2 = RegularLayer .create( tech, 'METAL2' , metal2 )
|
|
||||||
metcapdum = RegularLayer .create( tech, 'metcapdum' , metcap )
|
|
||||||
metbot = RegularLayer .create( tech, 'metbot' , metal2 )
|
|
||||||
METAL3 = RegularLayer .create( tech, 'METAL3' , metal3 )
|
|
||||||
METAL4 = RegularLayer .create( tech, 'METAL4' , metal4 )
|
|
||||||
METAL5 = RegularLayer .create( tech, 'METAL5' , metal5 )
|
|
||||||
METAL6 = RegularLayer .create( tech, 'METAL6' , metal6 )
|
|
||||||
METAL7 = RegularLayer .create( tech, 'METAL7' , metal7 )
|
|
||||||
METAL8 = RegularLayer .create( tech, 'METAL8' , metal8 )
|
|
||||||
METAL9 = RegularLayer .create( tech, 'METAL9' , metal9 )
|
|
||||||
METAL10 = RegularLayer .create( tech, 'METAL10' , metal10 )
|
|
||||||
CONT_BODY_N = ContactLayer .create( tech, 'CONT_BODY_N', nImplant , cut0, active, metal1, None )
|
|
||||||
CONT_BODY_P = ContactLayer .create( tech, 'CONT_BODY_P', pImplant , cut0, active, metal1, None )
|
|
||||||
CONT_DIF_N = ContactLayer .create( tech, 'CONT_DIF_N' , nImplant , cut0, active, metal1, None )
|
|
||||||
CONT_DIF_P = ContactLayer .create( tech, 'CONT_DIF_P' , pImplant , cut0, active, metal1, None )
|
|
||||||
CONT_POLY = ViaLayer .create( tech, 'CONT_POLY' , poly , cut0, metal1 )
|
|
||||||
|
|
||||||
# VIAs for symbolic technologies.
|
|
||||||
VIA12 = ViaLayer .create( tech, 'VIA12' , metal1, cut1, metal2 )
|
|
||||||
VIA23 = ViaLayer .create( tech, 'VIA23' , metal2, cut2, metal3 )
|
|
||||||
VIA23cap = ViaLayer .create( tech, 'VIA23cap' , metcap, cut2, metal3 )
|
|
||||||
VIA34 = ViaLayer .create( tech, 'VIA34' , metal3, cut3, metal4 )
|
|
||||||
VIA45 = ViaLayer .create( tech, 'VIA45' , metal4, cut4, metal5 )
|
|
||||||
VIA56 = ViaLayer .create( tech, 'VIA56' , metal5, cut5, metal6 )
|
|
||||||
VIA67 = ViaLayer .create( tech, 'VIA67' , metal6, cut6, metal7 )
|
|
||||||
VIA78 = ViaLayer .create( tech, 'VIA78' , metal7, cut7, metal8 )
|
|
||||||
VIA89 = ViaLayer .create( tech, 'VIA89' , metal8, cut8, metal9 )
|
|
||||||
VIA910 = ViaLayer .create( tech, 'VIA910' , metal9, cut9, metal10 )
|
|
||||||
BLOCKAGE1 = RegularLayer.create( tech, 'BLOCKAGE1' , blockage1 )
|
|
||||||
BLOCKAGE2 = RegularLayer.create( tech, 'BLOCKAGE2' , blockage2 )
|
|
||||||
BLOCKAGE3 = RegularLayer.create( tech, 'BLOCKAGE3' , blockage3 )
|
|
||||||
BLOCKAGE4 = RegularLayer.create( tech, 'BLOCKAGE4' , blockage4 )
|
|
||||||
BLOCKAGE5 = RegularLayer.create( tech, 'BLOCKAGE5' , blockage5 )
|
|
||||||
BLOCKAGE6 = RegularLayer.create( tech, 'BLOCKAGE6' , blockage6 )
|
|
||||||
BLOCKAGE7 = RegularLayer.create( tech, 'BLOCKAGE7' , blockage7 )
|
|
||||||
BLOCKAGE8 = RegularLayer.create( tech, 'BLOCKAGE8' , blockage8 )
|
|
||||||
BLOCKAGE9 = RegularLayer.create( tech, 'BLOCKAGE9' , blockage9 )
|
|
||||||
BLOCKAGE10 = RegularLayer.create( tech, 'BLOCKAGE10', blockage10 )
|
|
||||||
gcontact = ViaLayer .create( tech, 'gcontact' , gmetalh , gcut, gmetalv )
|
|
||||||
|
|
||||||
tech.setSymbolicLayer( CONT_BODY_N.getName() )
|
|
||||||
tech.setSymbolicLayer( CONT_BODY_P.getName() )
|
|
||||||
tech.setSymbolicLayer( CONT_DIF_N .getName() )
|
|
||||||
tech.setSymbolicLayer( CONT_DIF_P .getName() )
|
|
||||||
tech.setSymbolicLayer( CONT_POLY .getName() )
|
|
||||||
tech.setSymbolicLayer( POLY .getName() )
|
|
||||||
tech.setSymbolicLayer( POLY2 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL1 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL2 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL3 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL4 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL5 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL6 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL7 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL8 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL9 .getName() )
|
|
||||||
tech.setSymbolicLayer( METAL10 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE1 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE2 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE3 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE4 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE5 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE6 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE7 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE8 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE9 .getName() )
|
|
||||||
tech.setSymbolicLayer( BLOCKAGE10 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA12 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA23 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA34 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA45 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA56 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA67 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA78 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA89 .getName() )
|
|
||||||
tech.setSymbolicLayer( VIA910 .getName() )
|
|
||||||
tech.setSymbolicLayer( gcut .getName() )
|
|
||||||
tech.setSymbolicLayer( gmetalh .getName() )
|
|
||||||
tech.setSymbolicLayer( gmetalv .getName() )
|
|
||||||
tech.setSymbolicLayer( gcontact .getName() )
|
|
||||||
|
|
||||||
NWELL.setExtentionCap ( nWell, l(2.0) )
|
|
||||||
NWELL.setExtentionWidth( nWell, l(0.0) )
|
|
||||||
PWELL.setExtentionCap ( pWell, l(2.0) )
|
|
||||||
PWELL.setExtentionWidth( nWell, l(0.0) )
|
|
||||||
|
|
||||||
NTIE.setMinimalSize ( l(3.0) )
|
|
||||||
NTIE.setExtentionCap ( nWell , l(2.0) )
|
|
||||||
NTIE.setExtentionWidth( nWell , l(2.5) )
|
|
||||||
NTIE.setExtentionCap ( nImplant, l(1.5) )
|
|
||||||
NTIE.setExtentionWidth( nImplant, l(0.0) )
|
|
||||||
NTIE.setExtentionCap ( active , l(0.0) )
|
|
||||||
NTIE.setExtentionWidth( active , l(0.0) )
|
|
||||||
|
|
||||||
PTIE.setMinimalSize ( l(3.0) )
|
|
||||||
PTIE.setExtentionCap ( pWell , l(2.0) )
|
|
||||||
PTIE.setExtentionWidth( pWell , l(2.5) )
|
|
||||||
PTIE.setExtentionCap ( pImplant, l(1.5) )
|
|
||||||
PTIE.setExtentionWidth( pImplant, l(0.0) )
|
|
||||||
PTIE.setExtentionCap ( active , l(0.0) )
|
|
||||||
PTIE.setExtentionWidth( active , l(0.0) )
|
|
||||||
|
|
||||||
NDIF.setMinimalSize ( l(3.0) )
|
|
||||||
NDIF.setExtentionCap ( nImplant, l(0.5) )
|
|
||||||
NDIF.setExtentionWidth( nImplant, l(0.0) )
|
|
||||||
NDIF.setExtentionCap ( active , l(0.5) )
|
|
||||||
NDIF.setExtentionWidth( active , l(0.0) )
|
|
||||||
|
|
||||||
PDIF.setMinimalSize ( l(3.0) )
|
|
||||||
PDIF.setExtentionCap ( pImplant, l(0.5) )
|
|
||||||
PDIF.setExtentionWidth( pImplant, l(0.0) )
|
|
||||||
PDIF.setExtentionCap ( active , l(0.5) )
|
|
||||||
PDIF.setExtentionWidth( active , l(0.0) )
|
|
||||||
|
|
||||||
GATE.setMinimalSize ( l(1.0) )
|
|
||||||
GATE.setExtentionCap ( poly , l(1.5) )
|
|
||||||
|
|
||||||
NTRANS.setMinimalSize ( l( 1.0) )
|
|
||||||
NTRANS.setExtentionCap ( nImplant, l(-1.5) )
|
|
||||||
NTRANS.setExtentionWidth( nImplant, l( 3.0) )
|
|
||||||
NTRANS.setExtentionCap ( active , l(-1.5) )
|
|
||||||
NTRANS.setExtentionWidth( active , l( 2.0) )
|
|
||||||
|
|
||||||
PTRANS.setMinimalSize ( l( 1.0) )
|
|
||||||
PTRANS.setExtentionCap ( nWell , l(-1.5) )
|
|
||||||
PTRANS.setExtentionWidth( nWell , l( 2.5) )
|
|
||||||
PTRANS.setExtentionCap ( pImplant, l(-1.5) )
|
|
||||||
PTRANS.setExtentionWidth( pImplant, l( 2.5) )
|
|
||||||
PTRANS.setExtentionCap ( active , l(-1.5) )
|
|
||||||
PTRANS.setExtentionWidth( active , l( 2.5) )
|
|
||||||
|
|
||||||
POLY .setMinimalSize ( l(1.0) )
|
|
||||||
POLY .setExtentionCap ( poly , l(0.5) )
|
|
||||||
POLY2.setMinimalSize ( l(1.0) )
|
|
||||||
POLY2.setExtentionCap ( poly , l(0.5) )
|
|
||||||
|
|
||||||
METAL1 .setMinimalSize ( l(1.0) )
|
|
||||||
METAL1 .setExtentionCap ( metal1 , l(1.0) )
|
|
||||||
METAL2 .setMinimalSize ( l(1.0) )
|
|
||||||
METAL2 .setExtentionCap ( metal2 , l(1.0) )
|
|
||||||
METAL3 .setMinimalSize ( l(1.0) )
|
|
||||||
METAL3 .setExtentionCap ( metal3 , l(1.0) )
|
|
||||||
METAL4 .setMinimalSize ( l(1.0) )
|
|
||||||
METAL4 .setExtentionCap ( metal4 , l(1.0) )
|
|
||||||
METAL4 .setMinimalSpacing( l(3.0) )
|
|
||||||
METAL5 .setMinimalSize ( l(2.0) )
|
|
||||||
METAL5 .setExtentionCap ( metal5 , l(1.0) )
|
|
||||||
METAL6 .setMinimalSize ( l(2.0) )
|
|
||||||
METAL6 .setExtentionCap ( metal6 , l(1.0) )
|
|
||||||
METAL7 .setMinimalSize ( l(2.0) )
|
|
||||||
METAL7 .setExtentionCap ( metal7 , l(1.0) )
|
|
||||||
METAL8 .setMinimalSize ( l(2.0) )
|
|
||||||
METAL8 .setExtentionCap ( metal8 , l(1.0) )
|
|
||||||
METAL9 .setMinimalSize ( l(2.0) )
|
|
||||||
METAL9 .setExtentionCap ( metal9 , l(1.0) )
|
|
||||||
METAL10.setMinimalSize ( l(2.0) )
|
|
||||||
METAL10.setExtentionCap ( metal10 , l(1.0) )
|
|
||||||
|
|
||||||
# Contacts (i.e. Active <--> Metal) (symbolic).
|
|
||||||
CONT_BODY_N.setMinimalSize( l( 1.0) )
|
|
||||||
#CONT_BODY_N.setEnclosure ( nWell , l( 1.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_N.setEnclosure ( nImplant, l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_N.setEnclosure ( cut0 , l( 0.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_N.setEnclosure ( active , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_N.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
|
|
||||||
CONT_BODY_P.setMinimalSize( l( 1.0) )
|
|
||||||
#CONT_BODY_P.setEnclosure ( pWell , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_P.setEnclosure ( pImplant, l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_P.setEnclosure ( cut0 , l( 0.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_P.setEnclosure ( active , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_BODY_P.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
|
|
||||||
CONT_DIF_N.setMinimalSize( l( 1.0) )
|
|
||||||
CONT_DIF_N.setEnclosure ( nImplant, l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_DIF_N.setEnclosure ( cut0 , l( 0.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_DIF_N.setEnclosure ( active , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_DIF_N.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
|
|
||||||
CONT_DIF_P.setMinimalSize( l( 1.0) )
|
|
||||||
CONT_DIF_P.setEnclosure ( pImplant, l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_DIF_P.setEnclosure ( cut0 , l( 0.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_DIF_P.setEnclosure ( active , l( 1.0), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_DIF_P.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
|
|
||||||
CONT_POLY.setMinimalSize( l( 1.0) )
|
|
||||||
CONT_POLY.setEnclosure ( poly , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
CONT_POLY.setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
|
|
||||||
# VIAs (i.e. Metal <--> Metal) (symbolic).
|
|
||||||
VIA12 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA12 .setEnclosure ( metal1 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA12 .setEnclosure ( metal2 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA12 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA23 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA23 .setEnclosure ( metal2 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA23 .setEnclosure ( metal3 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA23 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA34 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA34 .setEnclosure ( metal3 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA34 .setEnclosure ( metal4 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA34 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA45 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA45 .setEnclosure ( metal4 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA45 .setEnclosure ( metal5 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA45 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA56 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA56 .setEnclosure ( metal5 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA56 .setEnclosure ( metal6 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA56 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA67 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA67 .setEnclosure ( metal6 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA67 .setEnclosure ( metal7 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA67 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA78 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA78 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA78 .setEnclosure ( metal7 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA78 .setEnclosure ( metal8 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA78 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA89 .setMinimalSize ( l( 1.0) )
|
|
||||||
VIA89 .setEnclosure ( metal8 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA89 .setEnclosure ( metal9 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA89 .setMinimalSpacing( l( 4.0) )
|
|
||||||
VIA910.setMinimalSize ( l( 1.0) )
|
|
||||||
VIA910.setEnclosure ( metal9 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA910.setEnclosure ( metal10 , l( 0.5), Layer.EnclosureH|Layer.EnclosureV )
|
|
||||||
VIA910.setMinimalSpacing( l( 4.0) )
|
|
||||||
|
|
||||||
# Blockages (symbolic).
|
|
||||||
BLOCKAGE1 .setMinimalSize ( l( 1.0) )
|
|
||||||
BLOCKAGE1 .setExtentionCap( blockage1 , l( 0.5) )
|
|
||||||
BLOCKAGE2 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE2 .setExtentionCap( blockage2 , l( 0.5) )
|
|
||||||
BLOCKAGE3 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE3 .setExtentionCap( blockage3 , l( 0.5) )
|
|
||||||
BLOCKAGE4 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE4 .setExtentionCap( blockage4 , l( 0.5) )
|
|
||||||
BLOCKAGE5 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE5 .setExtentionCap( blockage5 , l( 1.0) )
|
|
||||||
BLOCKAGE6 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE6 .setExtentionCap( blockage6 , l( 1.0) )
|
|
||||||
BLOCKAGE7 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE7 .setExtentionCap( blockage7 , l( 1.0) )
|
|
||||||
BLOCKAGE8 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE8 .setExtentionCap( blockage8 , l( 1.0) )
|
|
||||||
BLOCKAGE9 .setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE9 .setExtentionCap( blockage9 , l( 1.0) )
|
|
||||||
BLOCKAGE10.setMinimalSize ( l( 2.0) )
|
|
||||||
BLOCKAGE10.setExtentionCap( blockage10, l( 1.0) )
|
|
||||||
|
|
||||||
|
|
||||||
gdsLayersTable = \
|
|
||||||
[ ("nWell" , "LNWELL" , 1, 0)
|
|
||||||
, ("nImplant", "LNIF" , 3, 0)
|
|
||||||
, ("pImplant", "LPDIF" , 4, 0)
|
|
||||||
, ("active" , "LACTIVE" , 2, 0)
|
|
||||||
, ("poly" , "LPOLY" , 7, 0)
|
|
||||||
, ("cut0" , "LCONT" , 10, 0)
|
|
||||||
, ("metal1" , "LALU1" , 11, 0)
|
|
||||||
, ("cut1" , "LVIA" , 14, 0)
|
|
||||||
, ("metal2" , "LALU2" , 16, 0)
|
|
||||||
, ("cut2" , "LVIA2" , 18, 0)
|
|
||||||
, ("metal3" , "LALU3" , 19, 0)
|
|
||||||
, ("cut3" , "LVIA3" , 21, 0)
|
|
||||||
, ("metal4" , "LALU4" , 22, 0)
|
|
||||||
, ("cut4" , "LVIA4" , 25, 0)
|
|
||||||
, ("metal5" , "LALU5" , 26, 0)
|
|
||||||
, ("cut5" , "LVIA5" , 28, 0)
|
|
||||||
, ("metal6" , "LALU6" , 29, 0)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
loadGdsLayers( gdsLayersTable )
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
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_SITELIB}"
|
-DPYTHON_SITE_PACKAGES="${PYTHON_SITE_PACKAGES}"
|
||||||
)
|
)
|
||||||
|
|
||||||
set ( includes crlcore/Utilities.h
|
set ( includes crlcore/Utilities.h
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
${HURRICANE_LIBRARIES}
|
${HURRICANE_LIBRARIES}
|
||||||
${LEFDEF_LIBRARIES}
|
${LEFDEF_LIBRARIES}
|
||||||
${QtX_LIBRARIES}
|
${QtX_LIBRARIES}
|
||||||
${Python3_LIBRARIES}
|
${Python_LIBRARIES}
|
||||||
-lutil
|
-lutil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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)
|
||||||
|
|
|
@ -82,46 +82,6 @@ def setupCMOS ( checkToolkit=None ):
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
def setupLCMOS ( checkToolkit=None ):
|
|
||||||
Where( checkToolkit )
|
|
||||||
ShellEnv().export()
|
|
||||||
|
|
||||||
from .. import Cfg
|
|
||||||
from .. import Viewer
|
|
||||||
from .. import CRL
|
|
||||||
from ..helpers import overlay, l, u, n
|
|
||||||
from .yosys import Yosys
|
|
||||||
import coriolis.technos.symbolic.lcmos
|
|
||||||
|
|
||||||
with overlay.CfgCache(priority=Cfg.Parameter.Priority.UserFile) as cfg:
|
|
||||||
cfg.misc.catchCore = False
|
|
||||||
cfg.misc.info = False
|
|
||||||
cfg.misc.paranoid = False
|
|
||||||
cfg.misc.bug = False
|
|
||||||
cfg.misc.logMode = True
|
|
||||||
cfg.misc.verboseLevel1 = True
|
|
||||||
cfg.misc.verboseLevel2 = True
|
|
||||||
cfg.misc.minTraceLevel = 1900
|
|
||||||
cfg.misc.maxTraceLevel = 3000
|
|
||||||
cfg.katana.eventsLimit = 1000000
|
|
||||||
cfg.katana.termSatReservedLocal = 6
|
|
||||||
cfg.katana.termSatThreshold = 9
|
|
||||||
Viewer.Graphics.setStyle( 'Alliance.Classic [black]' )
|
|
||||||
af = CRL.AllianceFramework.get()
|
|
||||||
env = af.getEnvironment()
|
|
||||||
env.setCLOCK( '^ck$|m_clock|^clk$' )
|
|
||||||
|
|
||||||
Yosys.setLiberty( Where.checkToolkit / 'cells' / 'lsxlib' / 'lsxlib.lib' )
|
|
||||||
ShellEnv.RDS_TECHNO_NAME = (Where.allianceTop / 'etc' / 'cmos.rds').as_posix()
|
|
||||||
|
|
||||||
path = None
|
|
||||||
for pathVar in [ 'PATH', 'path' ]:
|
|
||||||
if pathVar in os.environ:
|
|
||||||
path = os.environ[ pathVar ]
|
|
||||||
os.environ[ pathVar ] = path + ':' + (Where.allianceTop / 'bin').as_posix()
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
def setupCMOS45 ( useNsxlib=False, checkToolkit=None, cellsTop=None ):
|
def setupCMOS45 ( useNsxlib=False, checkToolkit=None, cellsTop=None ):
|
||||||
from .. import Cfg
|
from .. import Cfg
|
||||||
from .. import Viewer
|
from .. import Viewer
|
||||||
|
|
|
@ -16,7 +16,7 @@ try:
|
||||||
import Viewer
|
import Viewer
|
||||||
import CRL
|
import CRL
|
||||||
import plugins.rsave
|
import plugins.rsave
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
catch( e )
|
catch( e )
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ try:
|
||||||
import helpers
|
import helpers
|
||||||
from helpers import trace
|
from helpers import trace
|
||||||
from helpers.io import ErrorMessage
|
from helpers.io import ErrorMessage
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
serror = str(e)
|
serror = str(e)
|
||||||
if serror.startswith('No module named'):
|
if serror.startswith('No module named'):
|
||||||
module = serror.split()[-1]
|
module = serror.split()[-1]
|
||||||
|
@ -46,7 +46,7 @@ except ImportError, e:
|
||||||
print( ' Under RHEL 6, you must be under devtoolset-2.' )
|
print( ' Under RHEL 6, you must be under devtoolset-2.' )
|
||||||
print( ' (scl enable devtoolset-2 bash)' )
|
print( ' (scl enable devtoolset-2 bash)' )
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print( '[ERROR] A strange exception occurred while loading the basic Coriolis/Python' )
|
print( '[ERROR] A strange exception occurred while loading the basic Coriolis/Python' )
|
||||||
print( ' modules. Something may be wrong at Python/C API level.\n' )
|
print( ' modules. Something may be wrong at Python/C API level.\n' )
|
||||||
print( ' {}'.format(e) )
|
print( ' {}'.format(e) )
|
||||||
|
@ -120,7 +120,7 @@ def px2mpx ( editor, pxCell ):
|
||||||
if pxCell == None:
|
if pxCell == None:
|
||||||
raise ErrorMessage( 3, 'px2mpx.px2mpx(): Mandatory pxCell argument is None.' )
|
raise ErrorMessage( 3, 'px2mpx.px2mpx(): Mandatory pxCell argument is None.' )
|
||||||
mpxCell = None
|
mpxCell = None
|
||||||
print '\nProcessing', pxCell
|
print('\nProcessing', pxCell)
|
||||||
|
|
||||||
UpdateSession.open()
|
UpdateSession.open()
|
||||||
try:
|
try:
|
||||||
|
@ -163,7 +163,7 @@ def px2mpx ( editor, pxCell ):
|
||||||
layer = component.getLayer()
|
layer = component.getLayer()
|
||||||
dupComponent = None
|
dupComponent = None
|
||||||
|
|
||||||
print ' Processing', component
|
print(' Processing', component)
|
||||||
|
|
||||||
if isinstance(component,Contact):
|
if isinstance(component,Contact):
|
||||||
dupComponent = Contact.create( mpxNet
|
dupComponent = Contact.create( mpxNet
|
||||||
|
@ -183,21 +183,21 @@ def px2mpx ( editor, pxCell ):
|
||||||
if component.getSourceX() > component.getTargetX(): component.invert()
|
if component.getSourceX() > component.getTargetX(): component.invert()
|
||||||
if isinstance(layer,RegularLayer):
|
if isinstance(layer,RegularLayer):
|
||||||
if layer.getBasicLayer().getMaterial().getCode() == BasicLayer.Material.blockage:
|
if layer.getBasicLayer().getMaterial().getCode() == BasicLayer.Material.blockage:
|
||||||
print ' Blockage BB:%s vs. AB:%s' % (bb, ab)
|
print(' Blockage BB:%s vs. AB:%s' % (bb, ab))
|
||||||
if layer.getName()[-1] == '2' or layer.getName()[-1] == '4':
|
if layer.getName()[-1] == '2' or layer.getName()[-1] == '4':
|
||||||
state = 0
|
state = 0
|
||||||
if bb.getXMin() <= ab.getXMin(): state |= Left
|
if bb.getXMin() <= ab.getXMin(): state |= Left
|
||||||
if bb.getXMax() >= ab.getXMax(): state |= Right
|
if bb.getXMax() >= ab.getXMax(): state |= Right
|
||||||
|
|
||||||
if not (state&Left):
|
if not (state&Left):
|
||||||
print ' Shrink left.'
|
print(' Shrink left.')
|
||||||
dLLeft = dL - DbU.fromLambda( 1.5 )
|
dLLeft = dL - DbU.fromLambda( 1.5 )
|
||||||
if not(state&Right):
|
if not(state&Right):
|
||||||
print ' Shrink right.'
|
print(' Shrink right.')
|
||||||
dLRight = dL - DbU.fromLambda( 1.5 )
|
dLRight = dL - DbU.fromLambda( 1.5 )
|
||||||
|
|
||||||
if layer.getName()[-1] == '4' and state == AllSpan:
|
if layer.getName()[-1] == '4' and state == AllSpan:
|
||||||
print ' Skipping component.'
|
print(' Skipping component.')
|
||||||
skipComponent = True
|
skipComponent = True
|
||||||
|
|
||||||
width = mW
|
width = mW
|
||||||
|
@ -213,9 +213,9 @@ def px2mpx ( editor, pxCell ):
|
||||||
, component.getDxSource()*2 - dLLeft
|
, component.getDxSource()*2 - dLLeft
|
||||||
, component.getDxTarget()*2 + dLRight
|
, component.getDxTarget()*2 + dLRight
|
||||||
)
|
)
|
||||||
print ' Copy:', dupComponent
|
print(' Copy:', dupComponent)
|
||||||
else:
|
else:
|
||||||
print ' Horizontal component too small *or* skipped, not converted'
|
print(' Horizontal component too small *or* skipped, not converted')
|
||||||
|
|
||||||
elif isinstance(component,Vertical):
|
elif isinstance(component,Vertical):
|
||||||
dL, dW, mW = getDeltas( component.getLayer() )
|
dL, dW, mW = getDeltas( component.getLayer() )
|
||||||
|
@ -245,7 +245,7 @@ def px2mpx ( editor, pxCell ):
|
||||||
|
|
||||||
if layer.getName()[-1] == '5':
|
if layer.getName()[-1] == '5':
|
||||||
if state == AllSpan:
|
if state == AllSpan:
|
||||||
print ' Skipping component.'
|
print(' Skipping component.')
|
||||||
skipComponent = True
|
skipComponent = True
|
||||||
else:
|
else:
|
||||||
dLTop = DbU.fromLambda(120.0) - component.getDyTarget()*2
|
dLTop = DbU.fromLambda(120.0) - component.getDyTarget()*2
|
||||||
|
@ -263,20 +263,20 @@ def px2mpx ( editor, pxCell ):
|
||||||
, component.getDyTarget()*2 + dLTop
|
, component.getDyTarget()*2 + dLTop
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
print ' Vertical component too small *or* skipped, not converted'
|
print(' Vertical component too small *or* skipped, not converted')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print '[WARNING] Unchanged component:', component
|
print('[WARNING] Unchanged component:', component)
|
||||||
|
|
||||||
if dupComponent and NetExternalComponents.isExternal( component ):
|
if dupComponent and NetExternalComponents.isExternal( component ):
|
||||||
NetExternalComponents.setExternal( dupComponent )
|
NetExternalComponents.setExternal( dupComponent )
|
||||||
|
|
||||||
if editor: editor.fit()
|
if editor: editor.fit()
|
||||||
|
|
||||||
except ErrorMessage, e:
|
except ErrorMessage as e:
|
||||||
print e; errorCode = e.code
|
print(e); errorCode = e.code
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print '\n\n', e; errorCode = 1
|
print('\n\n', e); errorCode = 1
|
||||||
traceback.print_tb(sys.exc_info()[2])
|
traceback.print_tb(sys.exc_info()[2])
|
||||||
|
|
||||||
UpdateSession.close()
|
UpdateSession.close()
|
||||||
|
@ -297,7 +297,7 @@ def scriptMain ( **kw ):
|
||||||
editor = None
|
editor = None
|
||||||
if kw.has_key('editor') and kw['editor']:
|
if kw.has_key('editor') and kw['editor']:
|
||||||
editor = kw['editor']
|
editor = kw['editor']
|
||||||
print ' o Editor detected, running in graphic mode.'
|
print(' o Editor detected, running in graphic mode.')
|
||||||
if pxCell == None: pxCell = editor.getCell()
|
if pxCell == None: pxCell = editor.getCell()
|
||||||
|
|
||||||
if pxCell:
|
if pxCell:
|
||||||
|
@ -306,7 +306,7 @@ def scriptMain ( **kw ):
|
||||||
pxlibDir = '/dsk/l1/jpc/alliance/Linux.slsoc6x/install/cells/pxlib'
|
pxlibDir = '/dsk/l1/jpc/alliance/Linux.slsoc6x/install/cells/pxlib'
|
||||||
|
|
||||||
if os.path.isdir(pxlibDir):
|
if os.path.isdir(pxlibDir):
|
||||||
print ' o <%s> found.' % pxlibDir
|
print(' o <%s> found.' % pxlibDir)
|
||||||
for viewFile in os.listdir( pxlibDir ):
|
for viewFile in os.listdir( pxlibDir ):
|
||||||
if viewFile == 'padreal.ap':
|
if viewFile == 'padreal.ap':
|
||||||
pxCell = framework.getCell( viewFile[:-3], CRL.Catalog.State.Views )
|
pxCell = framework.getCell( viewFile[:-3], CRL.Catalog.State.Views )
|
||||||
|
@ -323,7 +323,7 @@ def scriptMain ( **kw ):
|
||||||
mpxCell = px2mpx( editor, pxCell )
|
mpxCell = px2mpx( editor, pxCell )
|
||||||
framework.saveCell( mpxCell, CRL.Catalog.State.Physical )
|
framework.saveCell( mpxCell, CRL.Catalog.State.Physical )
|
||||||
else:
|
else:
|
||||||
print '[WARNING] <%s> not found.' % pxlibDir
|
print('[WARNING] <%s> not found.' % pxlibDir)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
rcode = yosys.run( options.design, top=options.top )
|
rcode = yosys.run( options.design, top=options.top )
|
||||||
|
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
catch( e )
|
catch( e )
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
|
@ -209,10 +209,10 @@ class Environment ( object ):
|
||||||
libPath, mode = libraryEntry
|
libPath, mode = libraryEntry
|
||||||
self.mbkEnv['MBK_CATA_LIB'].add( libPath, mode )
|
self.mbkEnv['MBK_CATA_LIB'].add( libPath, mode )
|
||||||
|
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
e = ErrorMessage( e )
|
e = ErrorMessage( e )
|
||||||
e.addMessage( 'In %s:<Alliance> at index %d.' % (allianceFile,entryNo) )
|
e.addMessage( 'In %s:<Alliance> at index %d.' % (allianceFile,entryNo) )
|
||||||
print e
|
print(e)
|
||||||
|
|
||||||
self.mbkEnv[ 'LD_LIBRARY_PATH' ] = self.mbkEnv[ 'ALLIANCE_TOP' ] + '/lib'
|
self.mbkEnv[ 'LD_LIBRARY_PATH' ] = self.mbkEnv[ 'ALLIANCE_TOP' ] + '/lib'
|
||||||
return
|
return
|
||||||
|
@ -226,7 +226,7 @@ class Environment ( object ):
|
||||||
env = os.environ
|
env = os.environ
|
||||||
for key in self.mbkEnv.keys():
|
for key in self.mbkEnv.keys():
|
||||||
if not self.mbkEnv[key]:
|
if not self.mbkEnv[key]:
|
||||||
print WarningMessage( 'Environment variable <%s> is not set.' % key )
|
print(WarningMessage( 'Environment variable <%s> is not set.' % key ))
|
||||||
continue
|
continue
|
||||||
env[ key ] = str(self.mbkEnv[ key ])
|
env[ key ] = str(self.mbkEnv[ key ])
|
||||||
return env
|
return env
|
||||||
|
@ -314,7 +314,7 @@ class ReportLog ( object ):
|
||||||
while True:
|
while True:
|
||||||
self._reportFile = "./%s-%s-%02d.log" % (self._reportBase,timeTag,index)
|
self._reportFile = "./%s-%s-%02d.log" % (self._reportBase,timeTag,index)
|
||||||
if not os.path.isfile(self._reportFile):
|
if not os.path.isfile(self._reportFile):
|
||||||
print "Report log: <%s>" % self._reportFile
|
print("Report log: <%s>" % self._reportFile)
|
||||||
break
|
break
|
||||||
index += 1
|
index += 1
|
||||||
return
|
return
|
||||||
|
@ -353,31 +353,31 @@ def staticInitialization ():
|
||||||
symbol = 'allianceConfig'
|
symbol = 'allianceConfig'
|
||||||
|
|
||||||
if not os.path.isfile(confFile):
|
if not os.path.isfile(confFile):
|
||||||
print '[ERROR] Missing mandatory Coriolis2 system file:'
|
print('[ERROR] Missing mandatory Coriolis2 system file:')
|
||||||
print ' <%s>' % confFile
|
print(' <%s>' % confFile)
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
|
|
||||||
try:
|
try:
|
||||||
print ' o Running configuration hook: Alliance.staticInitialization().'
|
print(' o Running configuration hook: Alliance.staticInitialization().')
|
||||||
print ' - Loading \"%s\".' % helpers.truncPath(confFile)
|
print(' - Loading \"%s\".' % helpers.truncPath(confFile))
|
||||||
exec( open(confFile).read() ) #, moduleGlobals )
|
exec( open(confFile).read() ) #, moduleGlobals )
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print '[ERROR] An exception occured while loading the configuration file:'
|
print('[ERROR] An exception occured while loading the configuration file:')
|
||||||
print ' <%s>\n' % (confFile)
|
print(' <%s>\n' % (confFile))
|
||||||
print ' You should check for simple python errors in this file.'
|
print(' You should check for simple python errors in this file.')
|
||||||
print ' Error was:'
|
print(' Error was:')
|
||||||
print ' %s\n' % e
|
print(' %s\n' % e)
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
|
|
||||||
if moduleGlobals.has_key(symbol):
|
if moduleGlobals.has_key(symbol):
|
||||||
env.load( moduleGlobals[symbol], confFile )
|
env.load( moduleGlobals[symbol], confFile )
|
||||||
del moduleGlobals[symbol]
|
del moduleGlobals[symbol]
|
||||||
else:
|
else:
|
||||||
print '[ERROR] Mandatory symbol <%s> is missing in system configuration file:' % symbol
|
print('[ERROR] Mandatory symbol <%s> is missing in system configuration file:' % symbol)
|
||||||
print ' <%s>' % confFile
|
print(' <%s>' % confFile)
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
|
|
||||||
print
|
print()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -453,7 +453,7 @@ class Node ( EnvironmentWrapper ):
|
||||||
if self._dependencies == []:
|
if self._dependencies == []:
|
||||||
raise ErrorMessage( 1, 'Node.setDefaultTargetName(): node is neither used nor have dependencies.' )
|
raise ErrorMessage( 1, 'Node.setDefaultTargetName(): node is neither used nor have dependencies.' )
|
||||||
self.setTarget( self.getDependency(0)._targetName+'_'+self.toolName.lower() )
|
self.setTarget( self.getDependency(0)._targetName+'_'+self.toolName.lower() )
|
||||||
print WarningMessage( 'Node.setDefaultTargetName(): Node is not affected, using: <%s>' % self.targetName )
|
print(WarningMessage( 'Node.setDefaultTargetName(): Node is not affected, using: <%s>' % self.targetName ))
|
||||||
return
|
return
|
||||||
|
|
||||||
def addDependency ( self, dependency ):
|
def addDependency ( self, dependency ):
|
||||||
|
@ -492,21 +492,21 @@ class Node ( EnvironmentWrapper ):
|
||||||
error = ErrorMessage( 1, 'File <%s> of node <%s> has not been created.'
|
error = ErrorMessage( 1, 'File <%s> of node <%s> has not been created.'
|
||||||
% (self.fileName,self._targetName) )
|
% (self.fileName,self._targetName) )
|
||||||
if errorMessage:
|
if errorMessage:
|
||||||
print
|
print()
|
||||||
for line in errorMessage: print line
|
for line in errorMessage: print(line)
|
||||||
if hardStop:
|
if hardStop:
|
||||||
raise error
|
raise error
|
||||||
else:
|
else:
|
||||||
print error
|
print(error)
|
||||||
return
|
return
|
||||||
|
|
||||||
def isUptodate ( self ):
|
def isUptodate ( self ):
|
||||||
depsMTime = 0
|
depsMTime = 0
|
||||||
#print ' Target: %-30s %d' % (self.fileName, self.mtime)
|
#print(' Target: %-30s %d' % (self.fileName, self.mtime))
|
||||||
for dependency in self.getDependencies():
|
for dependency in self.getDependencies():
|
||||||
dependency.checkFile()
|
dependency.checkFile()
|
||||||
depsMTime = max( depsMTime, dependency.mtime )
|
depsMTime = max( depsMTime, dependency.mtime )
|
||||||
#print ' | Dep: %-31s %d' % (dependency.fileName, dependency.mtime)
|
#print(' | Dep: %-31s %d' % (dependency.fileName, dependency.mtime))
|
||||||
return depsMTime <= self.mtime
|
return depsMTime <= self.mtime
|
||||||
|
|
||||||
def setActive ( self ):
|
def setActive ( self ):
|
||||||
|
@ -522,7 +522,7 @@ class Node ( EnvironmentWrapper ):
|
||||||
if not isinstance(self,Source) \
|
if not isinstance(self,Source) \
|
||||||
and not isinstance(self,Probe) \
|
and not isinstance(self,Probe) \
|
||||||
and not isinstance(self,Rule):
|
and not isinstance(self,Rule):
|
||||||
print 'Clean | %-30s| rm %s' % ( "<%s>"%self.ruleName, self.fileName )
|
print('Clean | %-30s| rm %s' % ( "<%s>"%self.ruleName, self.fileName ))
|
||||||
|
|
||||||
report.open()
|
report.open()
|
||||||
report.write( 'Clean <%s>: (%s)\n' % (self.ruleName, self.fileName) )
|
report.write( 'Clean <%s>: (%s)\n' % (self.ruleName, self.fileName) )
|
||||||
|
@ -622,7 +622,7 @@ class Command ( Node ):
|
||||||
|
|
||||||
if self.isActive() and (not self.isUptodate() or flags & ForceRun):
|
if self.isActive() and (not self.isUptodate() or flags & ForceRun):
|
||||||
if flags & ShowCommand:
|
if flags & ShowCommand:
|
||||||
print "Executing | %-30s%s" % (ruleName,Command.indent(command,42))
|
print("Executing | %-30s%s" % (ruleName,Command.indent(command,42)))
|
||||||
child = subprocess.Popen( command
|
child = subprocess.Popen( command
|
||||||
, env=self.env.toSystemEnv()
|
, env=self.env.toSystemEnv()
|
||||||
, stdout=subprocess.PIPE
|
, stdout=subprocess.PIPE
|
||||||
|
@ -639,7 +639,7 @@ class Command ( Node ):
|
||||||
if not line: break
|
if not line: break
|
||||||
|
|
||||||
if flags & ShowLog:
|
if flags & ShowLog:
|
||||||
print "%s" % (line[:-1])
|
print("%s" % (line[:-1]))
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
elif flags & ShowDots:
|
elif flags & ShowDots:
|
||||||
dots.dot()
|
dots.dot()
|
||||||
|
@ -661,8 +661,8 @@ class Command ( Node ):
|
||||||
(pid,status) = os.waitpid(child.pid, 0)
|
(pid,status) = os.waitpid(child.pid, 0)
|
||||||
status >>= 8
|
status >>= 8
|
||||||
if status != 0:
|
if status != 0:
|
||||||
print
|
print()
|
||||||
for line in errorLines: print line
|
for line in errorLines: print(line)
|
||||||
raise ErrorMessage( 1, "%s returned status:%d." % (self.toolName,status) )
|
raise ErrorMessage( 1, "%s returned status:%d." % (self.toolName,status) )
|
||||||
if checkFile:
|
if checkFile:
|
||||||
self.checkFile( hardStop=True, errorMessage=errorLines )
|
self.checkFile( hardStop=True, errorMessage=errorLines )
|
||||||
|
@ -670,7 +670,7 @@ class Command ( Node ):
|
||||||
if self.isActive(): action = 'Up to date'
|
if self.isActive(): action = 'Up to date'
|
||||||
else: action = 'Inactive'
|
else: action = 'Inactive'
|
||||||
if flags & ShowCommand:
|
if flags & ShowCommand:
|
||||||
print "%-10s| %-30s%s" % (action,ruleName,Command.indent(command,42))
|
print("%-10s| %-30s%s" % (action,ruleName,Command.indent(command,42)))
|
||||||
|
|
||||||
report.open()
|
report.open()
|
||||||
report.write( '%s command:\n' % action )
|
report.write( '%s command:\n' % action )
|
||||||
|
@ -1443,23 +1443,23 @@ class Tools ( object ):
|
||||||
if node: node.setActive()
|
if node: node.setActive()
|
||||||
|
|
||||||
if commandFlags & ShowCommand and not (commandFlags & ShowLog):
|
if commandFlags & ShowCommand and not (commandFlags & ShowLog):
|
||||||
print "==========+===============================+============================================"
|
print("==========+===============================+============================================")
|
||||||
print " ACTION | TARGET/RULE | COMMAND"
|
print(" ACTION | TARGET/RULE | COMMAND")
|
||||||
print "==========+===============================+============================================"
|
print("==========+===============================+============================================")
|
||||||
|
|
||||||
if doClean:
|
if doClean:
|
||||||
Node.allClean()
|
Node.allClean()
|
||||||
if commandFlags & ShowCommand and not (commandFlags & ShowLog):
|
if commandFlags & ShowCommand and not (commandFlags & ShowLog):
|
||||||
print "----------+-------------------------------+--------------------------------------------"
|
print("----------+-------------------------------+--------------------------------------------")
|
||||||
|
|
||||||
for node in tool._staticOrder:
|
for node in tool._staticOrder:
|
||||||
#for dep in node.getDependencies():
|
#for dep in node.getDependencies():
|
||||||
# print dep.name
|
# print(dep.name)
|
||||||
# print dep.fileName
|
# print(dep.fileName)
|
||||||
if not isinstance(node,Source) and not isinstance(node,Rule):
|
if not isinstance(node,Source) and not isinstance(node,Rule):
|
||||||
if node._run(): break
|
if node._run(): break
|
||||||
|
|
||||||
if commandFlags & ShowCommand and not (commandFlags & ShowLog):
|
if commandFlags & ShowCommand and not (commandFlags & ShowLog):
|
||||||
print "----------+-------------------------------+--------------------------------------------"
|
print("----------+-------------------------------+--------------------------------------------")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -219,8 +219,8 @@ def pyAlimVerticalRail ( cell, xcoord ) :
|
||||||
else :
|
else :
|
||||||
raise ErrorMessage(2,"AlimVerticalRail : Strawberry.")
|
raise ErrorMessage(2,"AlimVerticalRail : Strawberry.")
|
||||||
|
|
||||||
# print "Placement of vertical rail"
|
# print("Placement of vertical rail")
|
||||||
# print "Reference ", reference
|
# print("Reference ", reference)
|
||||||
|
|
||||||
power_cell = CRL.AllianceFramework.get().getCell ( "powmid_x0", CRL.Catalog.State.Views )
|
power_cell = CRL.AllianceFramework.get().getCell ( "powmid_x0", CRL.Catalog.State.Views )
|
||||||
|
|
||||||
|
@ -1977,16 +1977,16 @@ def affichePad ( cell ) :
|
||||||
global pad_north, pad_south, pad_east, pad_west
|
global pad_north, pad_south, pad_east, pad_west
|
||||||
|
|
||||||
print( "Pads in the north are :" )
|
print( "Pads in the north are :" )
|
||||||
for pad in pad_north : print cell.getInstance ( pad.getName() ).getMasterCell().getName()
|
for pad in pad_north : print(cell.getInstance ( pad.getName() ).getMasterCell().getName())
|
||||||
|
|
||||||
print( "Pads in the south are :" )
|
print( "Pads in the south are :" )
|
||||||
for pad in pad_south : print cell.getInstance ( pad.getName() ).getMasterCell().getName()
|
for pad in pad_south : print(cell.getInstance ( pad.getName() ).getMasterCell().getName())
|
||||||
|
|
||||||
print( "Pads in the east are :" )
|
print( "Pads in the east are :" )
|
||||||
for pad in pad_east : print cell.getInstance ( pad.getName() ).getMasterCell().getName()
|
for pad in pad_east : print(cell.getInstance ( pad.getName() ).getMasterCell().getName())
|
||||||
|
|
||||||
print( "Pads in the west are :" )
|
print( "Pads in the west are :" )
|
||||||
for pad in pad_west : print cell.getInstance ( pad.getName() ).getMasterCell().getName()
|
for pad in pad_west : print(cell.getInstance ( pad.getName() ).getMasterCell().getName())
|
||||||
|
|
||||||
############
|
############
|
||||||
def searchVddVss ( cell, *args ) :
|
def searchVddVss ( cell, *args ) :
|
||||||
|
@ -2108,7 +2108,7 @@ def createGrid ( my_tuple ) :
|
||||||
#_Xmax = None
|
#_Xmax = None
|
||||||
#_Ymax = None
|
#_Ymax = None
|
||||||
coreBox = cell.getInstance('core').getAbutmentBox()
|
coreBox = cell.getInstance('core').getAbutmentBox()
|
||||||
#print coreBox
|
#print(coreBox)
|
||||||
_Xmin = coreBox.getXMin()
|
_Xmin = coreBox.getXMin()
|
||||||
_Ymin = coreBox.getYMin()
|
_Ymin = coreBox.getYMin()
|
||||||
_Xmax = coreBox.getXMax()
|
_Xmax = coreBox.getXMax()
|
||||||
|
@ -2350,7 +2350,7 @@ def getNetInstances ( cell, net, transformation) :
|
||||||
_x = ins_transformation.getX ( segment.getSourceX(), segment.getSourceY() )
|
_x = ins_transformation.getX ( segment.getSourceX(), segment.getSourceY() )
|
||||||
_y = ins_transformation.getY ( segment.getSourceX(), segment.getSourceY() )
|
_y = ins_transformation.getY ( segment.getSourceX(), segment.getSourceY() )
|
||||||
|
|
||||||
#print ins, ":", segment, ",", nbSeg, ",", _x, ",", _y
|
#print(ins, ":", segment, ",", nbSeg, ",", _x, ",", _y)
|
||||||
nbSeg += 1
|
nbSeg += 1
|
||||||
ck_contact_list_to_create.append ( (_x, _y) )
|
ck_contact_list_to_create.append ( (_x, _y) )
|
||||||
|
|
||||||
|
@ -2363,9 +2363,9 @@ def getNetInstances ( cell, net, transformation) :
|
||||||
Ymin = newbox.getYMin()
|
Ymin = newbox.getYMin()
|
||||||
Xmax = newbox.getXMax()
|
Xmax = newbox.getXMax()
|
||||||
Ymax = newbox.getYMax()
|
Ymax = newbox.getYMax()
|
||||||
#print " placer contact in ", _x, " ", _y , " in the net ", plug.getMasterNet().getName() ,
|
#print(" placer contact in ", _x, " ", _y , " in the net ", plug.getMasterNet().getName())
|
||||||
#print " of instance ", plug.getInstance().getName() , " in ", Xmin , " ", Ymin ,
|
#print(" of instance ", plug.getInstance().getName() , " in ", Xmin , " ", Ymin)
|
||||||
#print " of model ", plug.getInstance().getMasterCell().getName(), "\n"
|
#print(" of model ", plug.getInstance().getMasterCell().getName(), "\n")
|
||||||
|
|
||||||
# Positionner la grille
|
# Positionner la grille
|
||||||
if ( Xmin < _Xmin ) or ( _Xmin == None ) : _Xmin = Xmin
|
if ( Xmin < _Xmin ) or ( _Xmin == None ) : _Xmin = Xmin
|
||||||
|
|
|
@ -333,8 +333,8 @@ class Side ( object ):
|
||||||
# , height
|
# , height
|
||||||
# ) )
|
# ) )
|
||||||
# if not connecteds:
|
# if not connecteds:
|
||||||
# print WarningMessage( 'Cannot find a suitable connector for <%s> on pad <%s>'
|
# print(WarningMessage( 'Cannot find a suitable connector for <%s> on pad <%s>'
|
||||||
# % (net.getName(),pad.getName()) )
|
# % (net.getName(),pad.getName()) ))
|
||||||
#
|
#
|
||||||
# trace( 550, '-' )
|
# trace( 550, '-' )
|
||||||
# return
|
# return
|
||||||
|
@ -348,7 +348,7 @@ class Side ( object ):
|
||||||
# and masterCell.getName() != self._corona.pvddeckName \
|
# and masterCell.getName() != self._corona.pvddeckName \
|
||||||
# and masterCell.getName() != self._corona.pvsseckName:
|
# and masterCell.getName() != self._corona.pvsseckName:
|
||||||
# continue
|
# continue
|
||||||
# #print 'Power pad:', pad
|
# #print('Power pad:', pad)
|
||||||
# self._createPowerContacts( pad, self._corona.vddi )
|
# self._createPowerContacts( pad, self._corona.vddi )
|
||||||
# self._createPowerContacts( pad, self._corona.vssi )
|
# self._createPowerContacts( pad, self._corona.vssi )
|
||||||
# if self._corona.useClockTree:
|
# if self._corona.useClockTree:
|
||||||
|
@ -1281,7 +1281,7 @@ class Corona ( object ):
|
||||||
# if not net:
|
# if not net:
|
||||||
# net = self.cell.getNet( masterNet.getName() )
|
# net = self.cell.getNet( masterNet.getName() )
|
||||||
# if not net:
|
# if not net:
|
||||||
# print ErrorMessage( 1, 'Missing global net <%s> at chip level.' % masterNet.getName() )
|
# print(ErrorMessage( 1, 'Missing global net <%s> at chip level.' % masterNet.getName() ))
|
||||||
# continue
|
# continue
|
||||||
#
|
#
|
||||||
# for component in masterNet.getExternalComponents():
|
# for component in masterNet.getExternalComponents():
|
||||||
|
@ -1297,17 +1297,17 @@ class Corona ( object ):
|
||||||
# self._powerRails.sort( key=itemgetter(2) )
|
# self._powerRails.sort( key=itemgetter(2) )
|
||||||
#
|
#
|
||||||
# #for rail in self._powerRails:
|
# #for rail in self._powerRails:
|
||||||
# # print 'Pad rail %s @%d width:%d layer:%s' % ( str(rail[0].getName())
|
# # print('Pad rail %s @%d width:%d layer:%s' % ( str(rail[0].getName())
|
||||||
# # , DbU.toLambda(rail[2])
|
# # , DbU.toLambda(rail[2])
|
||||||
# # , DbU.toLambda(rail[3])
|
# # , DbU.toLambda(rail[3])
|
||||||
# # , str(rail[1].getName())
|
# # , str(rail[1].getName())
|
||||||
# # )
|
# # ))
|
||||||
# return
|
# return
|
||||||
#
|
#
|
||||||
# def _guessPadHvLayers ( self ):
|
# def _guessPadHvLayers ( self ):
|
||||||
# if not self.powerPad:
|
# if not self.powerPad:
|
||||||
# print ErrorMessage( 1, 'There must be at least one pad of model "%s" to guess the pad power terminals.' \
|
# print(ErrorMessage( 1, 'There must be at least one pad of model "%s" to guess the pad power terminals.' \
|
||||||
# % self.pvddick )
|
# % self.pvddick ))
|
||||||
# return False
|
# return False
|
||||||
#
|
#
|
||||||
# availableDepths = set()
|
# availableDepths = set()
|
||||||
|
@ -1316,7 +1316,7 @@ class Corona ( object ):
|
||||||
# if component.getBoundingBox().getYMin() <= masterCell.getAbutmentBox().getYMin():
|
# if component.getBoundingBox().getYMin() <= masterCell.getAbutmentBox().getYMin():
|
||||||
# availableDepths.add( self.routingGauge.getLayerDepth(component.getLayer()) )
|
# availableDepths.add( self.routingGauge.getLayerDepth(component.getLayer()) )
|
||||||
#
|
#
|
||||||
# #print 'available depth:', availableDepths
|
# #print('available depth:', availableDepths)
|
||||||
#
|
#
|
||||||
# self._horizontalPadDepth = 0
|
# self._horizontalPadDepth = 0
|
||||||
# self._verticalPadDepth = 0
|
# self._verticalPadDepth = 0
|
||||||
|
@ -1328,8 +1328,8 @@ class Corona ( object ):
|
||||||
# if self.routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Vertical:
|
# if self.routingGauge.getLayerGauge(depth).getDirection() == RoutingLayerGauge.Vertical:
|
||||||
# self._verticalPadDepth = depth
|
# self._verticalPadDepth = depth
|
||||||
#
|
#
|
||||||
# #print 'h:', self._horizontalPadDepth
|
# #print('h:', self._horizontalPadDepth)
|
||||||
# #print 'v:', self._verticalPadDepth
|
# #print('v:', self._verticalPadDepth)
|
||||||
# return
|
# return
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -587,9 +587,9 @@ def computeAbutmentBox ( cell, spaceMargin, aspectRatio, cellGauge ):
|
||||||
# if math.trunc(columns) != columns: columns = math.trunc(columns) + 1
|
# if math.trunc(columns) != columns: columns = math.trunc(columns) + 1
|
||||||
# else: columns = math.trunc(columns)
|
# else: columns = math.trunc(columns)
|
||||||
#
|
#
|
||||||
# print ' o Creating abutment box (margin:%.1f%%, aspect ratio:%.1f%%, g-length:%.1fl)' \
|
# print(' o Creating abutment box (margin:%.1f%%, aspect ratio:%.1f%%, g-length:%.1fl)' \
|
||||||
# % (spaceMargin*100.0,aspectRatio*100.0,(cellLength//sliceHeight))
|
# % (spaceMargin*100.0,aspectRatio*100.0,(cellLength//sliceHeight)))
|
||||||
# print ' - GCell grid: [%dx%d]' % (columns,rows)
|
# print(' - GCell grid: [%dx%d]' % (columns,rows))
|
||||||
|
|
||||||
UpdateSession.open()
|
UpdateSession.open()
|
||||||
etesian = Etesian.EtesianEngine.create( cell )
|
etesian = Etesian.EtesianEngine.create( cell )
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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)
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( FILES ${doxExtras} DESTINATION ${htmlInstallDir} )
|
install ( FILES ${doxExtras} DESTINATION ${htmlInstallDir} )
|
||||||
|
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost()
|
setup_boost()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
setup_boost(program_options python)
|
setup_boost(program_options python)
|
||||||
|
|
||||||
find_package(LibXml2 REQUIRED)
|
find_package(LibXml2 REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
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)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
if(BUILD_DOC AND DOXYGEN_FOUND)
|
if(BUILD_DOC AND DOXYGEN_FOUND)
|
||||||
add_custom_target( doc ALL
|
add_custom_target( doc ALL
|
||||||
cd ${VLSISAPD_SOURCE_DIR}/doc && ${DOXYGEN_EXECUTABLE} doxyfile )
|
cd ${VLSISAPD_SOURCE_DIR}/doc && ${DOXYGEN_EXECUTABLE} doxyfile )
|
||||||
endif()
|
|
||||||
|
|
||||||
install( DIRECTORY html/ DESTINATION share/doc/coriolis2/en/html/doc/vlsisapd )
|
install( DIRECTORY html/ DESTINATION share/doc/coriolis2/en/html/doc/vlsisapd )
|
||||||
install( DIRECTORY latex/ DESTINATION share/doc/coriolis2/en/latex/vlsisapd )
|
install( DIRECTORY latex/ DESTINATION share/doc/coriolis2/en/latex/vlsisapd )
|
||||||
|
endif()
|
||||||
|
|
|
@ -3,20 +3,20 @@ from decimal import Decimal
|
||||||
|
|
||||||
techno = Techno.readFromFile("./example.dtr.xml")
|
techno = Techno.readFromFile("./example.dtr.xml")
|
||||||
|
|
||||||
print "+-----------------------------+"
|
print("+-----------------------------+")
|
||||||
print "| technology: "+techno.get) + " |"
|
print("| technology: "+techno.get) + " |")
|
||||||
print "| units: "+techno.getUnit() +" |"
|
print("| units: "+techno.getUnit() +" |")
|
||||||
print "| version: "+techno.getVersion()+" |"
|
print("| version: "+techno.getVersion()+" |")
|
||||||
print "+-----------------------------+\n\n"
|
print("+-----------------------------+\n\n")
|
||||||
|
|
||||||
print "transistorMinL = %s"%techno.getValue("transistorMinL")
|
print("transistorMinL = %s"%techno.getValue("transistorMinL"))
|
||||||
print "transistorMinW = %s"%Decimal(techno.getValueAsString("transistorMinW"))
|
print("transistorMinW = %s"%Decimal(techno.getValueAsString("transistorMinW")))
|
||||||
print "minWidth of metal1 = %s"%techno.getValue("minWidth", "metal1")
|
print("minWidth of metal1 = %s"%techno.getValue("minWidth", "metal1"))
|
||||||
print "minSpacing of metal1 = %s"%techno.getValue("minWidth", "metal1")
|
print("minSpacing of metal1 = %s"%techno.getValue("minWidth", "metal1"))
|
||||||
print "minSpacing of active vs poly = %s"%techno.getValue("minSpacing", "active", "poly")
|
print("minSpacing of active vs poly = %s"%techno.getValue("minSpacing", "active", "poly"))
|
||||||
print "minExtension active over poly = %s"%techno.getValue("minExtension", "poly", "active")
|
print("minExtension active over poly = %s"%techno.getValue("minExtension", "poly", "active"))
|
||||||
print "minArea of metal1 = %s"%techno.getValue("minArea", "metal1")
|
print("minArea of metal1 = %s"%techno.getValue("minArea", "metal1"))
|
||||||
|
|
||||||
# an example of why it is important to use Decimal in python:
|
# an example of why it is important to use Decimal in python:
|
||||||
print techno.getValue("minArea", "metal1")*3-0.3 # returns 5.55111512313e-17
|
print(techno.getValue("minArea", "metal1")*3-0.3) # returns 5.55111512313e-17
|
||||||
print Decimal(techno.getValueAsString("minArea", "metal1"))*3-Decimal('0.3') # returns 0.000
|
print(Decimal(techno.getValueAsString("minArea", "metal1"))*3-Decimal('0.3')) # returns 0.000
|
||||||
|
|
|
@ -4,20 +4,20 @@ library = Library.readFromFile("./testParse.lib")
|
||||||
|
|
||||||
if ( library ) :
|
if ( library ) :
|
||||||
# print of the library
|
# print of the library
|
||||||
print library
|
print(library)
|
||||||
# print of one attribute in particular of a cell
|
# print of one attribute in particular of a cell
|
||||||
print "Area of inv_x1 :", library.getCell("inv_x1").getAttribute("area").valueAsString()
|
print("Area of inv_x1 :", library.getCell("inv_x1").getAttribute("area").valueAsString())
|
||||||
print "Timing intrinsic_rise of nq of inv_x1 :", library.getCell("inv_x1").getPin("nq").getTiming("i").getAttribute("intrinsic_rise").valueAsString()
|
print("Timing intrinsic_rise of nq of inv_x1 :", library.getCell("inv_x1").getPin("nq").getTiming("i").getAttribute("intrinsic_rise").valueAsString())
|
||||||
# print of all the attributes of a cell
|
# print of all the attributes of a cell
|
||||||
print "Attributes of no2_x1 :"
|
print("Attributes of no2_x1 :")
|
||||||
for attr in library.getCell("no2_x1").getAttributes() :
|
for attr in library.getCell("no2_x1").getAttributes() :
|
||||||
print " name=", attr.key, \
|
print(" name=", attr.key,
|
||||||
", type=", attr.value.typeToString(), \
|
", type=", attr.value.typeToString(),
|
||||||
", value=", attr.value.valueAsString()
|
", value=", attr.value.valueAsString())
|
||||||
# print of all the timings of a pin
|
# print of all the timings of a pin
|
||||||
print "Timing's attributes of pin nq of no2_x1 :"
|
print("Timing's attributes of pin nq of no2_x1 :")
|
||||||
for timing in library.getCell("no2_x1").getPin("nq").getTimings() :
|
for timing in library.getCell("no2_x1").getPin("nq").getTimings() :
|
||||||
print timing
|
print(timing)
|
||||||
else :
|
else :
|
||||||
raise ( "library is NULL" )
|
raise ( "library is NULL" )
|
||||||
|
|
||||||
|
|
|
@ -3,104 +3,104 @@ import sys
|
||||||
from SPICE import *
|
from SPICE import *
|
||||||
|
|
||||||
def printContents(circuit):
|
def printContents(circuit):
|
||||||
print "+", circuit.title
|
print("+", circuit.title)
|
||||||
|
|
||||||
if len(circuit.getIncludes()):
|
if len(circuit.getIncludes()):
|
||||||
print "| + includes"
|
print("| + includes")
|
||||||
for include in circuit.getIncludes():
|
for include in circuit.getIncludes():
|
||||||
print "| |", include
|
print("| |", include)
|
||||||
|
|
||||||
if len(circuit.getLibraries()):
|
if len(circuit.getLibraries()):
|
||||||
print "| + libraries"
|
print("| + libraries")
|
||||||
for (lib, typ) in circuit.getLibraries():
|
for (lib, typ) in circuit.getLibraries():
|
||||||
print "| |", lib, typ
|
print("| |", lib, typ)
|
||||||
|
|
||||||
if len(circuit.getParameters()):
|
if len(circuit.getParameters()):
|
||||||
print "| + parameters"
|
print("| + parameters")
|
||||||
for (name, value) in circuit.getParameters().items():
|
for (name, value) in circuit.getParameters().items():
|
||||||
print "| | %s=%s"%(name, value)
|
print("| | %s=%s"%(name, value))
|
||||||
|
|
||||||
if len(circuit.getOptions()):
|
if len(circuit.getOptions()):
|
||||||
print "| + options"
|
print("| + options")
|
||||||
for (name, value) in circuit.getOptions().items():
|
for (name, value) in circuit.getOptions().items():
|
||||||
print "| | %s=%s"%(name, value)
|
print("| | %s=%s"%(name, value))
|
||||||
|
|
||||||
if len(circuit.getSources()):
|
if len(circuit.getSources()):
|
||||||
print "| + sources"
|
print("| + sources")
|
||||||
for source in circuit.getSources():
|
for source in circuit.getSources():
|
||||||
print "| |", source.getName(), source.getPositive(), source.getNegative(), source.getValue()
|
print("| |", source.getName(), source.getPositive(), source.getNegative(), source.getValue())
|
||||||
|
|
||||||
if len(circuit.getSubckts()):
|
if len(circuit.getSubckts()):
|
||||||
print "| + subckts"
|
print("| + subckts")
|
||||||
for sub in circuit.getSubckts():
|
for sub in circuit.getSubckts():
|
||||||
print "| | +", sub.getName(),
|
print("| | +", sub.getName())
|
||||||
for interf in sub.getInterfaces():
|
for interf in sub.getInterfaces():
|
||||||
print interf,
|
print(interf)
|
||||||
if len(sub.getParameters()):
|
if len(sub.getParameters()):
|
||||||
print "param:",
|
print("param:")
|
||||||
for (name, value) in sub.getParameters().items():
|
for (name, value) in sub.getParameters().items():
|
||||||
print "%s=%s"%(name,value),
|
print("%s=%s"%(name,value))
|
||||||
print
|
print()
|
||||||
for inst in sub.getInstances():
|
for inst in sub.getInstances():
|
||||||
print "| | | +", inst.getName(),
|
print("| | | +", inst.getName())
|
||||||
if isinstance(inst, Mosfet):
|
if isinstance(inst, Mosfet):
|
||||||
print inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel(),
|
print(inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel())
|
||||||
i = 0
|
i = 0
|
||||||
for (name, value) in inst.getParameters().items():
|
for (name, value) in inst.getParameters().items():
|
||||||
if i%6 == 0:
|
if i%6 == 0:
|
||||||
print
|
print()
|
||||||
print "| | | | +",
|
print("| | | | +")
|
||||||
print "%s=%s"%(name, value),
|
print("%s=%s"%(name, value))
|
||||||
i += 1
|
i += 1
|
||||||
elif isinstance(inst, Resistor):
|
elif isinstance(inst, Resistor):
|
||||||
print inst.getFirst(), inst.getSecond(), inst.getValue(),
|
print(inst.getFirst(), inst.getSecond(), inst.getValue())
|
||||||
elif isinstance(inst, Capacitor):
|
elif isinstance(inst, Capacitor):
|
||||||
print inst.getPositive(), inst.getNegative(), inst.getValue(),
|
print(inst.getPositive(), inst.getNegative(), inst.getValue())
|
||||||
else:
|
else:
|
||||||
for conn in inst.getConnectors():
|
for conn in inst.getConnectors():
|
||||||
print conn,
|
print(conn)
|
||||||
print inst.getModel(),
|
print(inst.getModel())
|
||||||
i = 0
|
i = 0
|
||||||
for (name, value) in inst.getParameters().items():
|
for (name, value) in inst.getParameters().items():
|
||||||
if i%6 == 0:
|
if i%6 == 0:
|
||||||
print
|
print()
|
||||||
print "| | | | +",
|
print("| | | | +")
|
||||||
print "%s=%s"%(name, value),
|
print("%s=%s"%(name, value))
|
||||||
i += 1
|
i += 1
|
||||||
print
|
print()
|
||||||
|
|
||||||
if len(circuit.getInstances()):
|
if len(circuit.getInstances()):
|
||||||
print "| + instances"
|
print("| + instances")
|
||||||
for inst in circuit.getInstances():
|
for inst in circuit.getInstances():
|
||||||
print "| | | +", inst.getName(),
|
print("| | | +", inst.getName())
|
||||||
if isinstance(inst, Mosfet):
|
if isinstance(inst, Mosfet):
|
||||||
print inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel(),
|
print(inst.getDrain(), inst.getGrid(), inst.getSource(), inst.getBulk(), inst.getModel())
|
||||||
i = 0
|
i = 0
|
||||||
for (name, value) in inst.getParameters().items():
|
for (name, value) in inst.getParameters().items():
|
||||||
if i%6 == 0:
|
if i%6 == 0:
|
||||||
print
|
print()
|
||||||
print "| | | | +",
|
print("| | | | +")
|
||||||
print "%s=%s"%(name, value),
|
print("%s=%s"%(name, value))
|
||||||
i += 1
|
i += 1
|
||||||
elif isinstance(inst, Resistor):
|
elif isinstance(inst, Resistor):
|
||||||
print inst.getFirst(), inst.getSecond(), inst.getValue(),
|
print(inst.getFirst(), inst.getSecond(), inst.getValue())
|
||||||
elif isinstance(inst, Capacitor):
|
elif isinstance(inst, Capacitor):
|
||||||
print inst.getPositive(), inst.getNegative(), inst.getValue(),
|
print(inst.getPositive(), inst.getNegative(), inst.getValue())
|
||||||
else:
|
else:
|
||||||
for conn in inst.getConnectors():
|
for conn in inst.getConnectors():
|
||||||
print conn,
|
print(conn)
|
||||||
print inst.getModel(),
|
print(inst.getModel())
|
||||||
i = 0
|
i = 0
|
||||||
for (name, value) in inst.getParameters().items():
|
for (name, value) in inst.getParameters().items():
|
||||||
if i%6 == 0:
|
if i%6 == 0:
|
||||||
print
|
print()
|
||||||
print "| | | | +",
|
print("| | | | +")
|
||||||
print "%s=%s"%(name, value),
|
print("%s=%s"%(name, value))
|
||||||
i += 1
|
i += 1
|
||||||
print
|
print()
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
print "usage:", sys.argv[0], "[filename]"
|
print("usage:", sys.argv[0], "[filename]")
|
||||||
sys.exit(48)
|
sys.exit(48)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
@ -23,23 +23,23 @@ try:
|
||||||
import plugins.ClockTreePlugin
|
import plugins.ClockTreePlugin
|
||||||
import plugins.ChipPlace
|
import plugins.ChipPlace
|
||||||
import plugins.RSavePlugin
|
import plugins.RSavePlugin
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
serror = str(e)
|
serror = str(e)
|
||||||
if serror.startswith('No module named'):
|
if serror.startswith('No module named'):
|
||||||
module = serror.split()[-1]
|
module = serror.split()[-1]
|
||||||
print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module
|
print('[ERROR] The <%s> python module or symbol cannot be loaded.' % module)
|
||||||
print ' Please check the integrity of the <coriolis> package.'
|
print(' Please check the integrity of the <coriolis> package.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if str(e).find('cannot open shared object file'):
|
if str(e).find('cannot open shared object file'):
|
||||||
library = serror.split(':')[0]
|
library = serror.split(':')[0]
|
||||||
print '[ERROR] The <%s> shared library cannot be loaded.' % library
|
print('[ERROR] The <%s> shared library cannot be loaded.' % library)
|
||||||
print ' Under RHEL 6, you must be under devtoolset-2.'
|
print(' Under RHEL 6, you must be under devtoolset-2.')
|
||||||
print ' (scl enable devtoolset-2 bash)'
|
print(' (scl enable devtoolset-2 bash)')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python'
|
print('[ERROR] A strange exception occurred while loading the basic Coriolis/Python')
|
||||||
print ' modules. Something may be wrong at Python/C API level.\n'
|
print(' modules. Something may be wrong at Python/C API level.\n')
|
||||||
print ' %s' % e
|
print(' %s' % e)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,8 +97,8 @@ def scriptMain ( **kw ):
|
||||||
|
|
||||||
plugins.RSavePlugin.scriptMain( **kw )
|
plugins.RSavePlugin.scriptMain( **kw )
|
||||||
|
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print helpers.io.catch( e )
|
print(helpers.io.catch( e ))
|
||||||
|
|
||||||
return success
|
return success
|
||||||
|
|
||||||
|
@ -129,23 +129,23 @@ if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
module = __import__( options.script, globals(), locals() )
|
module = __import__( options.script, globals(), locals() )
|
||||||
if not module.__dict__.has_key('scriptMain'):
|
if not module.__dict__.has_key('scriptMain'):
|
||||||
print '[ERROR] Script module <%s> do not contains a ScripMain() function.' % options.script
|
print('[ERROR] Script module <%s> do not contains a ScripMain() function.' % options.script)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
cell = module.__dict__['scriptMain']( **kw )
|
cell = module.__dict__['scriptMain']( **kw )
|
||||||
kw['cell'] = cell
|
kw['cell'] = cell
|
||||||
|
|
||||||
except ImportError, e:
|
except ImportError as e:
|
||||||
module = str(e).split()[-1]
|
module = str(e).split()[-1]
|
||||||
|
|
||||||
print '[ERROR] The <%s> script cannot be loaded.' % module
|
print('[ERROR] The <%s> script cannot be loaded.' % module)
|
||||||
print ' Please check your design hierarchy.'
|
print(' Please check your design hierarchy.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print '[ERROR] A strange exception occurred while loading the Python'
|
print('[ERROR] A strange exception occurred while loading the Python')
|
||||||
print ' script <%s>. Please check that module for error:\n' % options.script
|
print(' script <%s>. Please check that module for error:\n' % options.script)
|
||||||
traceback.print_tb(sys.exc_info()[2])
|
traceback.print_tb(sys.exc_info()[2])
|
||||||
print ' %s' % e
|
print(' %s' % e)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
elif options.cell:
|
elif options.cell:
|
||||||
kw['cell'] = framework.getCell( options.cell, CRL.Catalog.State.Views )
|
kw['cell'] = framework.getCell( options.cell, CRL.Catalog.State.Views )
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
${QtX_LIBRARIES}
|
${QtX_LIBRARIES}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${LIBXML2_LIBRARIES}
|
${LIBXML2_LIBRARIES}
|
||||||
${Python3_LIBRARIES}
|
${Python_LIBRARIES}
|
||||||
-lutil
|
-lutil
|
||||||
${LIBEXECINFO_LIBRARIES}
|
${LIBEXECINFO_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
${HURRICANE_PYTHON_LIBRARIES}
|
${HURRICANE_PYTHON_LIBRARIES}
|
||||||
${HURRICANE_LIBRARIES}
|
${HURRICANE_LIBRARIES}
|
||||||
${UTILITIES_LIBRARY}
|
${UTILITIES_LIBRARY}
|
||||||
${Python3_LIBRARIES}
|
${Python_LIBRARIES}
|
||||||
|
|
||||||
-lutil
|
-lutil
|
||||||
)
|
)
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -118,9 +118,6 @@ Contact::Contact(Net* net, const Layer* layer, DbU::Unit x, DbU::Unit y, DbU::Un
|
||||||
{
|
{
|
||||||
if (not _layer)
|
if (not _layer)
|
||||||
throw Error("Contact::Contact(): Can't create " + _TName("Contact") + ", NULL layer.");
|
throw Error("Contact::Contact(): Can't create " + _TName("Contact") + ", NULL layer.");
|
||||||
|
|
||||||
if ( _width < _layer->getMinimalSize() ) _width = _layer->getMinimalSize();
|
|
||||||
if ( _height < _layer->getMinimalSize() ) _height = _layer->getMinimalSize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Contact::Contact(Net* net, Component* anchor, const Layer* layer, DbU::Unit dx, DbU::Unit dy, DbU::Unit width, DbU::Unit height)
|
Contact::Contact(Net* net, Component* anchor, const Layer* layer, DbU::Unit dx, DbU::Unit dy, DbU::Unit width, DbU::Unit height)
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
set( depLibs hurricane
|
set( depLibs hurricane
|
||||||
${Python3_LIBRARIES}
|
${Python_LIBRARIES}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
${QtX_LIBRARIES}
|
${QtX_LIBRARIES}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${LIBXML2_LIBRARIES}
|
${LIBXML2_LIBRARIES}
|
||||||
${Python3_LIBRARIES}
|
${Python_LIBRARIES}
|
||||||
-lutil
|
-lutil
|
||||||
${LIBEXECINFO_LIBRARIES}
|
${LIBEXECINFO_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES asimbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -98,8 +98,8 @@ class VerticalRoutingTracks ( CapacitorStack ):
|
||||||
|
|
||||||
self.setRules ()
|
self.setRules ()
|
||||||
vRoutingTracksLayer = DataBase.getDB().getTechnology().getLayer("metal3" )
|
vRoutingTracksLayer = DataBase.getDB().getTechnology().getLayer("metal3" )
|
||||||
#print 'self.capacitorInstance.doMatrix:', self.capacitorInstance.doMatrix
|
#print('self.capacitorInstance.doMatrix:', self.capacitorInstance.doMatrix)
|
||||||
#print 'self.capacitorsNumber:', self.capacitorsNumber
|
#print('self.capacitorsNumber:', self.capacitorsNumber)
|
||||||
|
|
||||||
if self.capacitorInstance.doMatrix == True and self.capacitorsNumber > 1 :
|
if self.capacitorInstance.doMatrix == True and self.capacitorsNumber > 1 :
|
||||||
self.minimizeVRTs()
|
self.minimizeVRTs()
|
||||||
|
|
|
@ -52,16 +52,16 @@ def checkCoherency ( device, bbMode ):
|
||||||
columns = pmatrix.getColumns()
|
columns = pmatrix.getColumns()
|
||||||
|
|
||||||
for row in range(rows):
|
for row in range(rows):
|
||||||
#print ' [',
|
#print(' [')
|
||||||
for column in range(columns):
|
for column in range(columns):
|
||||||
capaIndex = pmatrix.getValue(row,column)
|
capaIndex = pmatrix.getValue(row,column)
|
||||||
#print '%2d' % capaIndex,
|
#print('%2d' % capaIndex)
|
||||||
|
|
||||||
if capaIndex >= capacities.getCount():
|
if capaIndex >= capacities.getCount():
|
||||||
valid = False
|
valid = False
|
||||||
message += ' element [%d,%d] == %d is out of range, must be in [0..%d]\n' \
|
message += ' element [%d,%d] == %d is out of range, must be in [0..%d]\n' \
|
||||||
% (row,column,capaIndex,capacities.getCount()-1)
|
% (row,column,capaIndex,capacities.getCount()-1)
|
||||||
#print ']'
|
#print(']')
|
||||||
|
|
||||||
if not valid: return (False, message)
|
if not valid: return (False, message)
|
||||||
|
|
||||||
|
|
190
pyproject.toml
190
pyproject.toml
|
@ -1,44 +1,158 @@
|
||||||
[tool.poetry]
|
#[tool.poetry]
|
||||||
name = "Coriolis"
|
#name = "Coriolis"
|
||||||
version = "0.0.0"
|
#version = "0.0.0"
|
||||||
|
#description = "Place and Route for semiconductors"
|
||||||
|
#authors = ["Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>"]
|
||||||
|
#readme = "README.rst"
|
||||||
|
##build = "builder.py"
|
||||||
|
##packages = [
|
||||||
|
## { include = "Coriolis"}
|
||||||
|
##]
|
||||||
|
|
||||||
|
#[tool.poetry-dynamic-versioning]
|
||||||
|
#enable = true
|
||||||
|
##dirty = true
|
||||||
|
#vcs = "git"
|
||||||
|
##style = "pep440"
|
||||||
|
#metadata = "true"
|
||||||
|
##pattern = '''
|
||||||
|
## (?x)
|
||||||
|
## ^coriolis-((?P<epoch>\d+)!)?(?P<base>\d+(\.\d+)*)
|
||||||
|
## ([-._]?((?P<stage>[a-zA-Z]+)[-._]?(?P<revision>\d+)?))?
|
||||||
|
## (\+(?P<tagged_metadata>.+))?$
|
||||||
|
##'''
|
||||||
|
|
||||||
|
#[tool.poetry.dependencies]
|
||||||
|
#python = "^3.8"
|
||||||
|
#find-libpython = "^0.3.0"
|
||||||
|
|
||||||
|
#[tool.poetry.dev-dependencies]
|
||||||
|
#cmake = ">=3"
|
||||||
|
#ninja = "^1.11.1"
|
||||||
|
|
||||||
|
#[tool.poetry.scripts]
|
||||||
|
#blif2vst = 'Coriolis:blif2vst'
|
||||||
|
#tutorial = 'Coriolis:tutorial'
|
||||||
|
#unittests = 'Coriolis:unittests'
|
||||||
|
#yosys_coriolis = 'Coriolis:yosys_coriolis'
|
||||||
|
|
||||||
|
[project]
|
||||||
|
name = "coriolis"
|
||||||
|
version = "2.4.2"
|
||||||
|
#dynamic = ["version"]
|
||||||
description = "Place and Route for semiconductors"
|
description = "Place and Route for semiconductors"
|
||||||
authors = ["Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>"]
|
authors = [
|
||||||
readme = "README.rst"
|
{ name = "Rémy ESCASSUT & Christian" },
|
||||||
build = "builder.py"
|
{ name = "Christophe ALEXANDRE" },
|
||||||
packages = [
|
{ name = "Sophie BELLOEIL" },
|
||||||
{ include = "Coriolis"}
|
{ name = "Damien DUPUIS" },
|
||||||
|
{ name = "Jean-Paul CHAPUT", email="Jean-Paul.Chaput@lip6.fr" }
|
||||||
]
|
]
|
||||||
|
readme = "README.rst"
|
||||||
[tool.poetry-dynamic-versioning]
|
long_description = """Coriolis provides several tools to perform the layout of VLSI circuits.
|
||||||
enable = true
|
Its main components are the Hurricane database, the Etesian placer and
|
||||||
dirty = true
|
the Katana router, but other tools can use the Hurricane database and
|
||||||
vcs = "git"
|
the parsers provided.
|
||||||
style = "pep440"
|
"""
|
||||||
metadata = "true"
|
|
||||||
pattern = '''
|
|
||||||
(?x)
|
|
||||||
^coriolis-((?P<epoch>\d+)!)?(?P<base>\d+(\.\d+)*)
|
|
||||||
([-._]?((?P<stage>[a-zA-Z]+)[-._]?(?P<revision>\d+)?))?
|
|
||||||
(\+(?P<tagged_metadata>.+))?$
|
|
||||||
'''
|
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
|
||||||
python = "^3.8"
|
|
||||||
find-libpython = "^0.3.0"
|
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
|
||||||
cmake = ">=3"
|
|
||||||
ninja = "^1.11.1"
|
|
||||||
|
|
||||||
[tool.poetry.scripts]
|
|
||||||
blif2vst = 'Coriolis:blif2vst'
|
|
||||||
tutorial = 'Coriolis:tutorial'
|
|
||||||
unittests = 'Coriolis:unittests'
|
|
||||||
yosys_coriolis = 'Coriolis:yosys_coriolis'
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core", "setuptools", "cmake", "ninja", "patchelf", "poetry-dynamic-versioning"]
|
#requires = ["scikit-build-core","poetry-core", "cmake", "ninja", "patchelf", "poetry-dynamic-versioning"]
|
||||||
build-backend = "poetry_dynamic_versioning.backend"
|
requires = ["scikit-build-core", "cmake", "ninja", "hatch-vcs"]
|
||||||
|
build-backend = "scikit_build_core.build"
|
||||||
|
|
||||||
|
[tool.hatch.version]
|
||||||
|
source = "vcs"
|
||||||
|
|
||||||
|
[tool.scikit-build.metadata]
|
||||||
|
# List dynamic metadata fields and hook locations in this table
|
||||||
|
#version.provider = "hatch_vcs"
|
||||||
|
|
||||||
|
[tool.scikit-build]
|
||||||
|
|
||||||
|
# The PEP 517 build hooks will add ninja and/or cmake if the versions on the
|
||||||
|
# system are not at least these versions. Disabled by an empty string.
|
||||||
|
cmake.minimum-version = "3.16"
|
||||||
|
ninja.minimum-version = "1.5"
|
||||||
|
|
||||||
|
# Fallback on gmake/make if available and ninja is missing (Unix). Will only
|
||||||
|
# fallback on platforms without a known ninja wheel.
|
||||||
|
ninja.make-fallback = true
|
||||||
|
|
||||||
|
# Extra args for CMake. Pip, unlike build, does not support lists, so semicolon
|
||||||
|
# can be used to separate. Setting this in config or envvar will override the
|
||||||
|
# entire list. See also cmake.define.
|
||||||
|
cmake.args = []
|
||||||
|
|
||||||
|
# This activates verbose builds
|
||||||
|
cmake.verbose = false
|
||||||
|
|
||||||
|
# This controls the CMake build type
|
||||||
|
cmake.build-type = "Release"
|
||||||
|
|
||||||
|
# Display logs at or above this level.
|
||||||
|
logging.level = "WARNING"
|
||||||
|
|
||||||
|
# Include and exclude patterns, in gitignore syntax. Include overrides exclude.
|
||||||
|
# Wheels include packages included in the sdist; CMake has the final say.
|
||||||
|
sdist.include = []
|
||||||
|
sdist.exclude = []
|
||||||
|
|
||||||
|
# Make reproducible SDists (Python 3.9+ and UNIX recommended). Respects
|
||||||
|
# SOURCE_DATE_EPOCH when true (the default).
|
||||||
|
sdist.reproducible = true
|
||||||
|
|
||||||
|
# The root-level packages to include. Special default: if not given, the package
|
||||||
|
# is auto-discovered if it's name matches the main name.
|
||||||
|
wheel.packages = ["coriolis"]
|
||||||
|
|
||||||
|
# Setting py-api to "cp37" would build ABI3 wheels for Python 3.7+. If CPython
|
||||||
|
# is less than this value, or on PyPy, this will be ignored. Setting the api to
|
||||||
|
# "py3" or "py2.py3" would build wheels that don't depend on Python (ctypes,
|
||||||
|
# etc).
|
||||||
|
wheel.py-api = ""
|
||||||
|
|
||||||
|
# Setting this to true will expand tags (universal2 will add Intel and Apple
|
||||||
|
# Silicon tags, for pip <21.0.1 compatibility).
|
||||||
|
wheel.expand-macos-universal-tags = false
|
||||||
|
|
||||||
|
# This allows you to change the install dir, such as to the package name. The
|
||||||
|
# original dir is still at SKBUILD_PLATLIB_DIR (also SKBUILD_DATA_DIR, etc. are
|
||||||
|
# available)
|
||||||
|
wheel.install-dir = "."
|
||||||
|
|
||||||
|
# The licence file(s) to include in the wheel metadata directory.
|
||||||
|
wheel.license-files = ["LICEN[CS]E*", "COPYING*", "NOTICE*", "AUTHORS*"]
|
||||||
|
|
||||||
|
# This will backport an internal copy of FindPython if CMake is less than this
|
||||||
|
# value. Set to 0 or the empty string to disable. The default will be kept in
|
||||||
|
# sync with the version of FindPython stored in scikit-build-core.
|
||||||
|
backport.find-python = ""
|
||||||
|
|
||||||
|
# This is the only editable mode currently
|
||||||
|
editable.mode = "redirect"
|
||||||
|
|
||||||
|
# Enable auto rebuilds on import (experimental)
|
||||||
|
editable.rebuild = false
|
||||||
|
|
||||||
|
# Display output on stderr while rebuilding on import
|
||||||
|
editable.verbose = true
|
||||||
|
|
||||||
|
# Enable experimental features if any are available
|
||||||
|
experimental = true #false
|
||||||
|
|
||||||
|
# Strictly validate config options
|
||||||
|
strict-config = true
|
||||||
|
|
||||||
|
# This provides some backward compatibility if set. Defaults to the latest
|
||||||
|
# scikit-build-core version.
|
||||||
|
minimum-version = "0.2" # current version
|
||||||
|
|
||||||
|
# Build directory (empty will use a temporary directory). {cache_tag} and
|
||||||
|
# {wheel_tag} are available to provide a unique directory per interpreter.
|
||||||
|
build-dir = ""
|
||||||
|
|
||||||
|
[tool.scikit-build.cmake.define]
|
||||||
|
# Put CMake defines in this table.
|
||||||
|
|
||||||
[tool.cibuildwheel.linux]
|
[tool.cibuildwheel.linux]
|
||||||
skip = ["cp36-*", "cp37-*", "pp*"]
|
skip = ["cp36-*", "cp37-*", "pp*"]
|
||||||
|
@ -52,7 +166,7 @@ before-all = '''
|
||||||
boost-devel \
|
boost-devel \
|
||||||
boost-python boost-filesystem \
|
boost-python boost-filesystem \
|
||||||
boost-regex boost-wave \
|
boost-regex boost-wave \
|
||||||
python36-devel libxml2-devel \
|
python3-devel libxml2-devel \
|
||||||
qwt-devel
|
qwt-devel
|
||||||
'''
|
'''
|
||||||
build-verbosity=2
|
build-verbosity=2
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
man_stratus.tex
|
man_stratus.tex
|
||||||
see_also.tex
|
see_also.tex
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
||||||
set ( latexInstallDir share/doc/coriolis2/en/latex/stratus_developper )
|
set ( latexInstallDir share/doc/coriolis2/en/latex/stratus_developper )
|
||||||
|
@ -25,3 +24,4 @@
|
||||||
${LATEX_OUTPUT_PATH}/stratus_developper.dvi
|
${LATEX_OUTPUT_PATH}/stratus_developper.dvi
|
||||||
${LATEX_OUTPUT_PATH}/stratus_developper.pdf DESTINATION ${latexInstallDir} )
|
${LATEX_OUTPUT_PATH}/stratus_developper.pdf DESTINATION ${latexInstallDir} )
|
||||||
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/stratus_developper DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/stratus_developper DESTINATION ${htmlInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
man_dpgenxnor2.tex
|
man_dpgenxnor2.tex
|
||||||
man_dpgenxor2.tex
|
man_dpgenxor2.tex
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
||||||
set ( latexInstallDir share/doc/coriolis2/en/latex/dpgen )
|
set ( latexInstallDir share/doc/coriolis2/en/latex/dpgen )
|
||||||
|
@ -57,3 +56,4 @@
|
||||||
${LATEX_OUTPUT_PATH}/dpgen.dvi
|
${LATEX_OUTPUT_PATH}/dpgen.dvi
|
||||||
${LATEX_OUTPUT_PATH}/dpgen.pdf DESTINATION ${latexInstallDir} )
|
${LATEX_OUTPUT_PATH}/dpgen.pdf DESTINATION ${latexInstallDir} )
|
||||||
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/dpgen DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/dpgen DESTINATION ${htmlInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
CACHE STRING "Custom arguments passeds to latex2html" FORCE )
|
CACHE STRING "Custom arguments passeds to latex2html" FORCE )
|
||||||
|
|
||||||
add_latex_document ( patterns.tex )
|
add_latex_document ( patterns.tex )
|
||||||
endif()
|
|
||||||
|
|
||||||
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
||||||
set ( latexInstallDir share/doc/coriolis2/en/latex/patterns )
|
set ( latexInstallDir share/doc/coriolis2/en/latex/patterns )
|
||||||
|
@ -19,3 +18,4 @@
|
||||||
${LATEX_OUTPUT_PATH}/patterns.dvi
|
${LATEX_OUTPUT_PATH}/patterns.dvi
|
||||||
${LATEX_OUTPUT_PATH}/patterns.pdf DESTINATION ${latexInstallDir} )
|
${LATEX_OUTPUT_PATH}/patterns.pdf DESTINATION ${latexInstallDir} )
|
||||||
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/patterns DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/patterns DESTINATION ${htmlInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -46,7 +46,6 @@
|
||||||
man_stratus.tex
|
man_stratus.tex
|
||||||
see_also.tex
|
see_also.tex
|
||||||
IMAGE_DIRS images )
|
IMAGE_DIRS images )
|
||||||
endif()
|
|
||||||
|
|
||||||
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
set ( htmlInstallDir share/doc/coriolis2/en/html/doc/ )
|
||||||
set ( latexInstallDir share/doc/coriolis2/en/latex/stratus/ )
|
set ( latexInstallDir share/doc/coriolis2/en/latex/stratus/ )
|
||||||
|
@ -58,3 +57,4 @@
|
||||||
${LATEX_OUTPUT_PATH}/stratus.dvi
|
${LATEX_OUTPUT_PATH}/stratus.dvi
|
||||||
${LATEX_OUTPUT_PATH}/stratus.pdf DESTINATION ${latexInstallDir} )
|
${LATEX_OUTPUT_PATH}/stratus.pdf DESTINATION ${latexInstallDir} )
|
||||||
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/stratus DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY ${LATEX_OUTPUT_PATH}/stratus DESTINATION ${htmlInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -172,18 +172,7 @@ namespace Tramontana {
|
||||||
loadTiles();
|
loadTiles();
|
||||||
//bool debugOn = false;
|
//bool debugOn = false;
|
||||||
//bool written = false;
|
//bool written = false;
|
||||||
size_t processedTiles = 0;
|
|
||||||
for ( Element& element : _tiles ) {
|
for ( Element& element : _tiles ) {
|
||||||
processedTiles++;
|
|
||||||
if (tty::enabled()) {
|
|
||||||
cmess2 << " <tile:" << tty::bold << right << setw(10) << setfill('0')
|
|
||||||
<< processedTiles << tty::reset
|
|
||||||
<< " remains:" << right << setw(10) << setfill('0')
|
|
||||||
<< (_tiles.size() - processedTiles)
|
|
||||||
<< setfill(' ') << tty::reset << ">" << tty::cr;
|
|
||||||
cmess2.flush ();
|
|
||||||
}
|
|
||||||
|
|
||||||
Tile* tile = element.getTile();
|
Tile* tile = element.getTile();
|
||||||
TileIntv tileIntv ( tile, tile->getYMin(), tile->getYMax() );
|
TileIntv tileIntv ( tile, tile->getYMin(), tile->getYMax() );
|
||||||
// if (tile->getOccurrence().getEntity()->getId() == 3348) {
|
// if (tile->getOccurrence().getEntity()->getId() == 3348) {
|
||||||
|
@ -312,8 +301,7 @@ namespace Tramontana {
|
||||||
query.setBasicLayer( layer );
|
query.setBasicLayer( layer );
|
||||||
query.doQuery();
|
query.doQuery();
|
||||||
}
|
}
|
||||||
cmess2 << " - Loaded " << _tiles.size() << " tiles (from "
|
cmess2 << " - Loaded " << query.getGoMatchCount() << " tiles." << endl;
|
||||||
<< query.getGoMatchCount() << " gos)." << endl;
|
|
||||||
|
|
||||||
// for ( Occurrence occurrence : getCell()->getOccurrencesUnder( getCell()->getBoundingBox() ) ) {
|
// for ( Occurrence occurrence : getCell()->getOccurrencesUnder( getCell()->getBoundingBox() ) ) {
|
||||||
// vector<Tile*> tiles;
|
// vector<Tile*> tiles;
|
||||||
|
|
|
@ -122,7 +122,7 @@ namespace Tramontana {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (not (flags & ForceLayer) and not component->getLayer()->contains(layer)) {
|
if (not (flags & ForceLayer) and not component->getLayer()->contains(layer)) {
|
||||||
//cerr << "Intersect:" << component->getLayer()->getMask().intersect(layer->getMask()) << endl;
|
cerr << "Intersect:" << component->getLayer()->getMask().intersect(layer->getMask()) << endl;
|
||||||
cerr << Error( "Tile::create(): Component layer \"%s\" does not contains \"%s\".\n"
|
cerr << Error( "Tile::create(): Component layer \"%s\" does not contains \"%s\".\n"
|
||||||
" (%s)\n"
|
" (%s)\n"
|
||||||
" component :%s\n"
|
" component :%s\n"
|
||||||
|
@ -163,10 +163,10 @@ namespace Tramontana {
|
||||||
) << endl;
|
) << endl;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
// if (rectilinear->getId() == 3367) {
|
if (rectilinear->getId() == 3367) {
|
||||||
// DebugSession::open( 160, 169 );
|
DebugSession::open( 160, 169 );
|
||||||
// cdebug_log(160,0) << "Tiling: " << rectilinear << endl;
|
cdebug_log(160,0) << "Tiling: " << rectilinear << endl;
|
||||||
// }
|
}
|
||||||
vector<Box> boxes;
|
vector<Box> boxes;
|
||||||
rectilinear->getAsRectangles( boxes );
|
rectilinear->getAsRectangles( boxes );
|
||||||
for ( Box bb : boxes ) {
|
for ( Box bb : boxes ) {
|
||||||
|
@ -176,9 +176,9 @@ namespace Tramontana {
|
||||||
cdebug_log(160,0) << "| " << tile << endl;
|
cdebug_log(160,0) << "| " << tile << endl;
|
||||||
if (not rootTile) rootTile = tile;
|
if (not rootTile) rootTile = tile;
|
||||||
}
|
}
|
||||||
// if (rectilinear->getId() == 3367) {
|
if (rectilinear->getId() == 3367) {
|
||||||
// DebugSession::close();
|
DebugSession::close();
|
||||||
// }
|
}
|
||||||
return rootTile;
|
return rootTile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
&& ${DOXYGEN_EXECUTABLE} doxyfile
|
||||||
&& cp -f ${doxExtras} html
|
&& cp -f ${doxExtras} html
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
install ( DIRECTORY html/ DESTINATION ${htmlInstallDir} )
|
||||||
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
install ( DIRECTORY latex/ DESTINATION ${latexInstallDir} )
|
||||||
install ( FILES socbook.cls DESTINATION ${latexInstallDir} )
|
install ( FILES socbook.cls DESTINATION ${latexInstallDir} )
|
||||||
|
endif()
|
||||||
|
|
|
@ -52,7 +52,7 @@ class Pathes ( object ):
|
||||||
def __init__ ( self, name ):
|
def __init__ ( self, name ):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.components = []
|
self.components = []
|
||||||
if os.environ.has_key(name):
|
if name in os.environ:
|
||||||
self.components = os.environ[name].split(':')
|
self.components = os.environ[name].split(':')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -72,9 +72,9 @@ class Pathes ( object ):
|
||||||
return
|
return
|
||||||
|
|
||||||
def show ( self ):
|
def show ( self ):
|
||||||
print ' %s:' % self.name
|
print(' %s:' % self.name)
|
||||||
for component in self.components:
|
for component in self.components:
|
||||||
print ' %s' % component
|
print(' %s' % component)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,38 +86,38 @@ if arch == 'x86_64' and os.path.exists('/usr/lib64'): libDir = '/lib64'
|
||||||
|
|
||||||
pythonSitePackages = os.path.join( *(distutils.sysconfig.get_python_lib(1).split('/')[-3:]) )
|
pythonSitePackages = os.path.join( *(distutils.sysconfig.get_python_lib(1).split('/')[-3:]) )
|
||||||
|
|
||||||
print ' ========================================'
|
print(' ========================================')
|
||||||
print ' OS:\n %s' % osType
|
print(' OS:\n %s' % osType)
|
||||||
|
|
||||||
scriptBinPath = os.path.abspath(os.path.dirname(sys.argv[0]))
|
scriptBinPath = os.path.abspath(os.path.dirname(sys.argv[0]))
|
||||||
print ' Script location:\n %s' % scriptBinPath
|
print(' Script location:\n %s' % scriptBinPath)
|
||||||
if scriptBinPath == '/usr/bin':
|
if scriptBinPath == '/usr/bin':
|
||||||
location = Location.BaseSystem
|
location = Location.BaseSystem
|
||||||
coriolisTop = '/usr'
|
coriolisTop = '/usr'
|
||||||
print ' Using standard system installation scheme.'
|
print(' Using standard system installation scheme.')
|
||||||
elif scriptBinPath == '/soc/coriolis2/bin':
|
elif scriptBinPath == '/soc/coriolis2/bin':
|
||||||
location = Location.Devtoolset2
|
location = Location.Devtoolset2
|
||||||
coriolisTop = '/soc/coriolis2'
|
coriolisTop = '/soc/coriolis2'
|
||||||
print ' Using RHEL6 installation scheme.'
|
print(' Using RHEL6 installation scheme.')
|
||||||
ldLibraryPath = os.getenv('LD_LIBRARY_PATH')
|
ldLibraryPath = os.getenv('LD_LIBRARY_PATH')
|
||||||
if not 'devtoolset' in ldLibraryPath:
|
if not 'devtoolset' in ldLibraryPath:
|
||||||
print '[ERROR] You must enable the devtoolset-2 before running Coriolis:'
|
print('[ERROR] You must enable the devtoolset-2 before running Coriolis:')
|
||||||
print ' > scl enable devtoolset-2 bash'
|
print(' > scl enable devtoolset-2 bash')
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
else:
|
else:
|
||||||
location = Location.UserDefined
|
location = Location.UserDefined
|
||||||
coriolisTop = truncPath( scriptBinPath, 0, -1 )
|
coriolisTop = truncPath( scriptBinPath, 0, -1 )
|
||||||
print ' Using User installation scheme.'
|
print(' Using User installation scheme.')
|
||||||
|
|
||||||
if location & Location.SetCoriolisTop:
|
if location & Location.SetCoriolisTop:
|
||||||
os.environ['CORIOLIS_TOP'] = coriolisTop
|
os.environ['CORIOLIS_TOP'] = coriolisTop
|
||||||
print ' CORIOLIS_TOP:\n %s' % coriolisTop
|
print(' CORIOLIS_TOP:\n %s' % coriolisTop)
|
||||||
|
|
||||||
if location & Location.BaseSysconfDir:
|
if location & Location.BaseSysconfDir:
|
||||||
sysConfDir = truncPath( coriolisTop, 0, -1 ) + '/etc/coriolis2'
|
sysConfDir = truncPath( coriolisTop, 0, -1 ) + '/etc/coriolis2'
|
||||||
else:
|
else:
|
||||||
sysConfDir = coriolisTop + '/etc/coriolis2'
|
sysConfDir = coriolisTop + '/etc/coriolis2'
|
||||||
print ' Configuration directory:\n %s' % sysConfDir
|
print(' Configuration directory:\n %s' % sysConfDir)
|
||||||
|
|
||||||
os.environ['STRATUS_MAPPING_NAME'] = sysConfDir+'/stratus2sxlib.xml'
|
os.environ['STRATUS_MAPPING_NAME'] = sysConfDir+'/stratus2sxlib.xml'
|
||||||
|
|
||||||
|
@ -153,14 +153,14 @@ if len(sys.argv) > 1 and sys.argv[1].startswith('--run='):
|
||||||
argvStart = 1
|
argvStart = 1
|
||||||
slaveScript = sys.argv[1][6:]
|
slaveScript = sys.argv[1][6:]
|
||||||
|
|
||||||
print ' Script:\n %s' % slaveScript
|
print(' Script:\n %s' % slaveScript)
|
||||||
print ' ========================================'
|
print(' ========================================')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
os.execvp( slaveScript, sys.argv[argvStart:] )
|
os.execvp( slaveScript, sys.argv[argvStart:] )
|
||||||
except Exception, e:
|
except Exception as e:
|
||||||
print '[ERROR] An exception occured while lauching <%s>\n' % slaveScript
|
print('[ERROR] An exception occured while lauching <%s>\n' % slaveScript)
|
||||||
print e
|
print(e)
|
||||||
sys.exit( 3 )
|
sys.exit( 3 )
|
||||||
|
|
||||||
sys.exit( 0 )
|
sys.exit( 0 )
|
||||||
|
|
Loading…
Reference in New Issue