Created docker images to check rebuild on various distributions.

* New: In bootstrap/docker, paraphernalia to rebuild and check Coriolis
    for Debian 9, Ubuntu 18 & SL 7 on pristine systems. Added scripts
    to rebuild Alliance as well and perform the alliance-check-toolkit
    regression tests.
* Change: Updated installation documentation. Added a section for docker.
This commit is contained in:
Jean-Paul Chaput 2020-02-09 18:18:42 +01:00
parent 6ea7a6f1f3
commit 068740601c
52 changed files with 3121 additions and 117 deletions

19
bootstrap/allianceInstaller.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
srcDir=${HOME}/coriolis-2.x/src/alliance/alliance/src
commonRoot=${HOME}/coriolis-2.x/Linux.el7_64/Release.Shared
buildDir=${commonRoot}/build
installDir=${commonRoot}/install
export ALLIANCE_TOP=${installDir}
export LD_LIBRARY_PATH=${installDir}/lib:${LD_LIBRARY_PATH}
cd ${srcDir}
# Skip doc generation to avoid pulling TeXLive in docker images.
sed -i 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./autostuff
./autostuff clean
./autostuff
mkdir -p ${buildDir}
cd ${buildDir}
${srcDir}/configure --prefix=${ALLIANCE_TOP} --enable-alc-shared
make -j1 install

View File

@ -0,0 +1,7 @@
FROM debian9.system
COPY root/socInstaller.py /root/socInstaller.py
COPY root/allianceInstaller.sh /root/allianceInstaller.sh
CMD /root/socInstaller.py --docker --profile=Debian9 --do-alliance --do-coriolis --benchs

View File

@ -0,0 +1,20 @@
FROM debian:stretch-slim
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get -y install build-essential binutils-dev \
git cmake bison flex gcc python-dev \
libboost-all-dev libboost-python-dev \
zlib1g-dev libxml2-dev rapidjson-dev libbz2-dev \
qt4-dev-tools libqwt-dev python-qt4 \
\
autotools-dev automake \
libxt-dev libxpm-dev libmotif-dev \
\
yosys \
\
vim \
&& apt-get clean

View File

@ -0,0 +1,3 @@
systemImage="debian9.system"
coriolisImage="debian9.coriolis"

View File

@ -0,0 +1,19 @@
#!/bin/bash
srcDir=${HOME}/coriolis-2.x/src/alliance/alliance/src
commonRoot=${HOME}/coriolis-2.x/Linux.el7_64/Release.Shared
buildDir=${commonRoot}/build
installDir=${commonRoot}/install
export ALLIANCE_TOP=${installDir}
export LD_LIBRARY_PATH=${installDir}/lib:${LD_LIBRARY_PATH}
cd ${srcDir}
# Skip doc generation to avoid pulling TeXLive in docker images.
sed -i 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./autostuff
./autostuff clean
./autostuff
mkdir -p ${buildDir}
cd ${buildDir}
${srcDir}/configure --prefix=${ALLIANCE_TOP} --enable-alc-shared
make -j1 install

View File

@ -0,0 +1,621 @@
#!/usr/bin/env python
#
# -*- mode:Python -*-
#
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2015-2018, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | C o r i o l i s I n s t a l l e r |
# | |
# | Authors : Jean-Paul Chaput |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | =============================================================== |
# | Python : "./socInstaller.py" |
# +-----------------------------------------------------------------+
#
# WARNING:
# This script has been designed only for internal use in the
# LIP6/CIAN department. If you want to use it you will need to
# change the hardwired configuration.
showTrace = True
try:
import sys
import os.path
import shutil
import optparse
import time
import traceback
import distutils.sysconfig
import subprocess
import socket
import re
import bz2
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
except ImportError, e:
module = str(e).split()[-1]
class ErrorMessage ( Exception ):
def __init__ ( self, code, *arguments ):
self._code = code
self._errors = [ 'Malformed call to ErrorMessage()', '%s' % str(arguments) ]
text = None
if len(arguments) == 1:
if isinstance(arguments[0],Exception): text = str(arguments[0]).split('\n')
else:
self._errors = arguments[0]
elif len(arguments) > 1:
text = list(arguments)
if text:
self._errors = []
while len(text[0]) == 0: del text[0]
lstrip = 0
if text[0].startswith('[ERROR]'): lstrip = 8
for line in text:
if line[0:lstrip ] == ' '*lstrip or \
line[0:lstrip-1] == '[ERROR]':
self._errors += [ line[lstrip:] ]
else:
self._errors += [ line.lstrip() ]
return
def __str__ ( self ):
if not isinstance(self._errors,list):
return "[ERROR] %s" % self._errors
formatted = "\n"
for i in range(len(self._errors)):
if i == 0: formatted += "[ERROR] %s" % self._errors[i]
else: formatted += " %s" % self._errors[i]
if i+1 < len(self._errors): formatted += "\n"
return formatted
def addMessage ( self, message ):
if not isinstance(self._errors,list):
self._errors = [ self._errors ]
if isinstance(message,list):
for line in message:
self._errors += [ line ]
else:
self._errors += [ message ]
return
def terminate ( self ):
print self
sys.exit(self._code)
@property
def code ( self ): return self._code
class BadBinary ( ErrorMessage ):
def __init__ ( self, binary ):
ErrorMessage.__init__( self, 1, "Binary not found: <%s>." % binary )
return
class BadReturnCode ( ErrorMessage ):
def __init__ ( self, status ):
ErrorMessage.__init__( self, 1, "Command returned status:%d." % status )
return
class Command ( object ):
def __init__ ( self, arguments, fdLog=None ):
self.arguments = arguments
self.fdLog = fdLog
if self.fdLog != None and not isinstance(self.fdLog,file):
print '[WARNING] Command.__init__(): <fdLog> is neither None or a file.'
return
def _argumentsToStr ( self, arguments ):
s = ''
for argument in arguments:
if argument.find(' ') >= 0: s += ' "' + argument + '"'
else: s += ' ' + argument
return s
def log ( self, text ):
print text[:-1]
sys.stdout.flush()
sys.stderr.flush()
if isinstance(self.fdLog,file):
self.fdLog.write( text )
self.fdLog.flush()
return
def execute ( self ):
global conf
sys.stdout.flush()
sys.stderr.flush()
homeDir = os.environ['HOME']
workDir = os.getcwd()
if homeDir.startswith(homeDir):
workDir = '~' + workDir[ len(homeDir) : ]
user = 'root'
if os.environ.has_key('USER'): user = os.environ['USER']
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
try:
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
print self.arguments
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
while True:
line = child.stdout.readline()
if not line: break
self.log( line )
except OSError, e:
raise BadBinary( self.arguments[0] )
(pid,status) = os.waitpid( child.pid, 0 )
status >>= 8
if status != 0:
raise BadReturnCode( status )
return
class CommandArg ( object ):
def __init__ ( self, command, wd=None, host=None, fdLog=None ):
self.command = command
self.host = host
self.wd = wd
self.fdLog = fdLog
return
def __str__ ( self ):
s = ''
if self.wd: s = 'cd %s && ' % self.wd
for i in range(len(self.command)):
if i: s += ' '
s += self.command[i]
return s
def getArgs ( self ):
if not self.host: return self.command
return [ 'ssh', self.host, str(self) ]
def execute ( self ):
if not self.host and self.wd: os.chdir( self.wd )
Command( self.getArgs(), self.fdLog ).execute()
return
class AllianceCommand ( CommandArg ):
def __init__ ( self, fdLog=None ):
CommandArg.__init__ ( self, [ '/root/allianceInstaller.sh' ]
, fdLog=fdLog )
return
class CoriolisCommand ( CommandArg ):
def __init__ ( self, ccbBin, rootDir, threads=1, otherArgs=[], fdLog=None ):
CommandArg.__init__ ( self, [ ccbBin
, '--root='+rootDir
, '--project=coriolis'
, '--make=-j%d install' % threads
] + otherArgs
, fdLog=fdLog )
return
class BenchsCommand ( CommandArg ):
def __init__ ( self, benchsDir, fdLog=None ):
CommandArg.__init__ ( self, [ '../bin/go.sh' ], wd=benchsDir, fdLog=fdLog )
return
class GitRepository ( object ):
@staticmethod
def getLocalRepository ( url ):
localRepo = url.split( '/' )[-1]
if localRepo.endswith('.git'):
localRepo = localRepo[:-4]
return localRepo
def __init__ ( self, url, cloneDir, fdLog=None ):
self.url = url
self.cloneDir = cloneDir
self.localRepo = GitRepository.getLocalRepository( url )
self.fdLog = fdLog
return
@property
def localRepoDir ( self ): return self.cloneDir+'/'+self.localRepo
def removeLocalRepo ( self ):
if os.path.isdir(self.localRepoDir):
print 'Removing Git local repository: <%s>' % self.localRepoDir
shutil.rmtree( self.localRepoDir )
return
def clone ( self ):
print 'Clone/pull from:', self.url
if not os.path.isdir(self.cloneDir):
os.makedirs( self.cloneDir )
if not os.path.isdir(self.localRepoDir):
os.chdir( self.cloneDir )
Command( [ 'git', 'clone', self.url ], self.fdLog ).execute()
else:
os.chdir( self.localRepoDir )
Command( [ 'git', 'pull' ], self.fdLog ).execute()
return
def checkout ( self, branch ):
os.chdir( self.localRepoDir )
Command( [ 'git', 'checkout', branch ], self.fdLog ).execute()
return
class Configuration ( object ):
PrimaryNames = \
[ 'sender' , 'receivers'
, 'coriolisRepo', 'benchsRepo' , 'supportRepos'
, 'homeDir' , 'masterHost'
, 'debugArg' , 'nightlyMode', 'dockerMode'
, 'rmSource' , 'rmBuild'
, 'doGit' , 'doAlliance' , 'doCoriolis', 'doBenchs', 'doSendReport'
, 'success' , 'rcode'
]
SecondaryNames = \
[ 'rootDir', 'srcDir', 'logDir', 'logs', 'fds', 'ccbBin', 'benchsDir'
]
def __init__ ( self ):
self._sender = 'Jean-Paul.Chaput@soc.lip6.fr'
self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', ]
self._supportRepos = [ 'http://github.com/miloyip/rapidjson' ]
self._allianceRepo = 'https://gitlab.lip6.fr/jpc/alliance.git'
self._coriolisRepo = 'https://gitlab.lip6.fr/jpc/coriolis.git'
self._benchsRepo = 'https://gitlab.lip6.fr/jpc/alliance-check-toolkit.git'
self._homeDir = os.environ['HOME']
self._debugArg = ''
self._rmSource = False
self._rmBuild = False
self._doGit = True
self._doCoriolis = False
self._doAlliance = False
self._doBenchs = False
self._doSendReport = False
self._nightlyMode = False
self._dockerMode = False
self._logs = { 'alliance':None, 'coriolis':None, 'benchs':None }
self._fds = { 'alliance':None, 'coriolis':None, 'benchs':None }
self._ccbBin = None
self._benchsDir = None
self._masterHost = self._detectMasterHost()
self._success = False
self._rcode = 0
self._updateSecondaries()
return
def __setattr__ ( self, attribute, value ):
if attribute in Configuration.SecondaryNames:
print ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute )
return
if attribute == 'masterHost' or attribute == '_masterHost':
if value == 'lepka':
print 'Never touch the Git tree when running on <lepka>.'
self._rmSource = False
self._rmBuild = False
self._doGit = False
self._doSendReport = False
if attribute[0] == '_':
self.__dict__[attribute] = value
return
if attribute == 'homeDir': value = os.path.expanduser(value)
self.__dict__['_'+attribute] = value
self._updateSecondaries()
return
def __getattr__ ( self, attribute ):
if attribute[0] != '_': attribute = '_'+attribute
if not self.__dict__.has_key(attribute):
raise ErrorMessage( 1, 'Configuration has no attribute <%s>.'%attribute )
return self.__dict__[attribute]
def _updateSecondaries ( self ):
if self._nightlyMode:
self._rootDir = self._homeDir + '/nightly/coriolis-2.x'
else:
self._rootDir = self._homeDir + '/coriolis-2.x'
self._srcDir = self._rootDir + '/src'
self._logDir = self._srcDir + '/logs'
self._ccbBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/ccb.py'
self._benchsDir = self._srcDir + '/' + GitRepository.getLocalRepository(self._benchsRepo ) + '/benchs'
return
def _detectMasterHost ( self ):
masterHost = 'unknown'
hostname = socket.gethostname()
hostAddr = socket.gethostbyname(hostname)
if hostname == 'lepka' and hostAddr == '127.0.0.1':
masterHost = 'lepka'
else:
masterHost = hostname.split('.')[0]
return masterHost
def openLog ( self, stem ):
if not os.path.isdir(self._logDir):
os.makedirs( self._logDir )
index = 0
timeTag = time.strftime( "%Y.%m.%d" )
while True:
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
if not os.path.isfile(logFile):
print "Report log: <%s>" % logFile
break
index += 1
fd = open( logFile, "w" )
self._logs[stem] = logFile
self._fds [stem] = fd
return
def closeLogs ( self ):
for fd in self._fds.values():
if fd: fd.close()
return
def compressLogs ( self ):
for log in self._logs.values():
if not log: continue
fd = open( log, 'r' )
bzfd = bz2.BZ2File( log+'.bz2', 'w' )
for line in fd.readlines(): bzfd.write( line )
bzfd.close()
fd.close()
os.unlink( log )
return
def getCommands ( self, target ):
commands = []
if self.doAlliance:
commands.append( AllianceCommand( fdLog=self.fds['alliance'] ) )
if self.doCoriolis:
if not os.path.isfile( self.ccbBin ):
raise ErrorMessage( 1, [ 'Cannot find <ccb.py>, should be here:'
, ' <%s>' % self.ccbBin
] )
otherArgs = []
if self.debugArg: otherArgs.append( self.debugArg )
if target == 'SL7_64':
otherArgs.append( '--project=support' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs , fdLog=self.fds['coriolis'] ) )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand ( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'SL6_64' or target == 'SL6':
otherArgs.append( '--project=support' )
otherArgs.append( '--devtoolset=8' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'Ubuntu18' or target == 'Debian9':
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
return commands
class Report ( object ):
def __init__ ( self, conf ):
self.conf = conf
commaspace = ', '
date = time.strftime( "%A %d %B %Y" )
stateText = 'FAILED'
modeText = 'SoC installation'
if self.conf.success: stateText = 'SUCCESS'
if self.conf.nightlyMode: modeText = 'Nightly build'
self.message = MIMEMultipart()
self.message['Subject'] = '[%s] Coriolis %s %s' % (stateText,modeText,date)
self.message['From' ] = self.conf.sender
self.message['To' ] = commaspace.join( self.conf.receivers )
self.attachements = []
self.mainText = '\n'
self.mainText += 'Salut le Crevard,\n'
self.mainText += '\n'
if self.conf.nightlyMode:
self.mainText += 'This is the nightly build report of Coriolis.\n'
else:
self.mainText += 'SoC installer report of Coriolis.\n'
self.mainText += '%s\n' % date
self.mainText += '\n'
if self.conf.success:
self.mainText += 'Build was SUCCESSFUL\n'
else:
self.mainText += 'Build has FAILED, please have a look to the attached log file(s).\n'
self.mainText += '\n'
self.mainText += 'Complete log file(s) can be found here:\n'
return
def attachLog ( self, logFile ):
if not logFile: return
fd = open( logFile, 'rb' )
try:
fd.seek( -1024*100, os.SEEK_END )
except IOError, e:
pass
tailLines = ''
for line in fd.readlines()[1:]:
tailLines += line
fd.close()
self.mainText += ' <%s>\n' % logFile
attachement = MIMEApplication(tailLines)
attachement.add_header( 'Content-Disposition', 'attachment', filename=os.path.basename(logFile) )
self.attachements.append( attachement )
return
def send ( self ):
self.message.attach( MIMEText(self.mainText) )
for attachement in self.attachements:
self.message.attach( attachement )
print "Sending mail report to:"
for receiver in self.conf.receivers: print ' <%s>' % receiver
session = smtplib.SMTP( 'localhost' )
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
session.quit()
return
# -------------------------------------------------------------------
# <socInstaller> Main Part.
parser = optparse.OptionParser ()
parser.add_option ( "--debug" , action="store_true" , dest="debug" , help="Build a <Debug> aka (-g) version." )
parser.add_option ( "--no-git" , action="store_true" , dest="noGit" , help="Do not pull/update Git repositories before building." )
parser.add_option ( "--do-alliance" , action="store_true" , dest="doAlliance" , help="Rebuild the Alliance tools." )
parser.add_option ( "--do-coriolis" , action="store_true" , dest="doCoriolis" , help="Rebuild the Coriolis tools." )
parser.add_option ( "--do-report" , action="store_true" , dest="doReport" , help="Send a final report." )
parser.add_option ( "--nightly" , action="store_true" , dest="nightly" , help="Perform a nighly build." )
parser.add_option ( "--docker" , action="store_true" , dest="docker" , help="Perform a build inside a docker container." )
parser.add_option ( "--benchs" , action="store_true" , dest="benchs" , help="Run the <alliance-checker-toolkit> sanity benchs." )
parser.add_option ( "--rm-build" , action="store_true" , dest="rmBuild" , help="Remove the build/install directories." )
parser.add_option ( "--rm-source" , action="store_true" , dest="rmSource" , help="Remove the Git source repositories." )
parser.add_option ( "--rm-all" , action="store_true" , dest="rmAll" , help="Remove everything (source+build+install)." )
parser.add_option ( "--root" , action="store" , type="string", dest="rootDir" , help="The root directory (default: <~/coriolis-2.x/>)." )
parser.add_option ( "--profile" , action="store" , type="string", dest="profile" , help="The targeted OS for the build." )
(options, args) = parser.parse_args ()
conf = Configuration()
try:
if options.debug: conf.debugArg = '--debug'
if options.nightly: conf.nightlyMode = True
if options.docker: conf.dockerMode = True
if options.noGit: conf.doGit = False
if options.doCoriolis: conf.doCoriolis = True
if options.doAlliance: conf.doAlliance = True
if options.benchs: conf.doBenchs = True
if options.doReport: conf.doSendReport = True
if options.rmSource or options.rmAll: conf.rmSource = True
if options.rmBuild or options.rmAll: conf.rmBuild = True
if conf.doAlliance: conf.openLog( 'alliance' )
if conf.doCoriolis: conf.openLog( 'coriolis' )
if conf.doBenchs: conf.openLog( 'benchs' )
if conf.dockerMode: os.environ['USER'] = 'root'
gitSupports = []
for supportRepo in conf.supportRepos:
gitSupports.append( GitRepository( supportRepo, conf.srcDir+'/support' ) )
gitCoriolis = GitRepository( conf.coriolisRepo, conf.srcDir, conf.fds['coriolis'] )
gitBenchs = GitRepository( conf.benchsRepo , conf.srcDir, conf.fds['coriolis'] )
if conf.doAlliance:
gitAlliance = GitRepository( conf.allianceRepo, conf.srcDir, conf.fds['alliance'] )
if conf.doGit:
for gitSupport in gitSupports:
if conf.rmSource: gitSupport.removeLocalRepo()
gitSupport.clone()
#if gitSupport.url.endswith('rapidjson'):
# gitSupport.checkout( 'a1c4f32' )
if conf.doCoriolis:
if conf.rmSource: gitCoriolis.removeLocalRepo()
gitCoriolis.clone ()
gitCoriolis.checkout( 'devel' )
if conf.doAlliance:
if conf.rmSource: gitAlliance.removeLocalRepo()
gitAlliance.clone ()
#gitAlliance.checkout( 'devel' )
if conf.rmSource: gitBenchs.removeLocalRepo()
gitBenchs.clone()
if conf.rmBuild:
for entry in os.listdir(conf.rootDir):
if entry.startswith('Linux.'):
buildDir = conf.rootDir+'/'+entry
print 'Removing OS build directory: <%s>' % buildDir
shutil.rmtree( buildDir )
commands = conf.getCommands( options.profile )
for command in commands:
if command.host:
print 'Executing command on remote host <%s>:' % host
else:
print 'Executing command on *local* host:'
print ' %s' % str(command)
command.execute()
conf.closeLogs()
conf.success = True
except ErrorMessage, e:
print e
conf.closeLogs()
conf.success = False
if showTrace:
print '\nPython stack trace:'
traceback.print_tb( sys.exc_info()[2] )
conf.rcode = e.code
if conf.doSendReport:
report = Report( conf )
report.attachLog( conf.logs['coriolis' ] )
report.attachLog( conf.logs['benchs' ] )
report.send()
conf.compressLogs()
sys.exit( conf.rcode )

View File

@ -0,0 +1,7 @@
FROM sl7.system
COPY root/socInstaller.py /root/socInstaller.py
COPY root/allianceInstaller.sh /root/allianceInstaller.sh
CMD /root/socInstaller.py --docker --profile=SL7_64 --do-alliance --do-coriolis --benchs

View File

@ -0,0 +1,21 @@
FROM scientificlinux/sl:latest
RUN yum -y update \
&& yum -y install git cmake bison flex gcc-c++ libstdc++-devel \
make binutils-devel \
boost-devel boost-python boost-filesystem \
boost-regex boost-wave \
python-devel libxml2-devel bzip2-devel \
qt-devel PyQt4 \
\
autoconf automake libtool \
libX11-devel libXt-devel libXpm-devel \
motif motif-devel \
\
vim-x11 \
&& yum -y install http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/qwt-6.1.2-4.fc23.x86_64.rpm \
http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/qwt-devel-6.1.2-4.fc23.x86_64.rpm \
http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/yosys-0.7-1.el7.soc.x86_64.rpm \
&& yum clean all

View File

@ -0,0 +1,3 @@
systemImage="sl7.system"
coriolisImage="sl7.coriolis"

View File

@ -0,0 +1,18 @@
#!/bin/bash
srcDir=${HOME}/coriolis-2.x/src/alliance/alliance/src
commonRoot=${HOME}/coriolis-2.x/Linux.el7_64/Release.Shared
buildDir=${commonRoot}/build
installDir=${commonRoot}/install
export ALLIANCE_TOP=${installDir}
export LD_LIBRARY_PATH=${installDir}/lib:${LD_LIBRARY_PATH}
cd ${srcDir}
sed -i 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./autostuff
./autostuff clean
./autostuff
mkdir -p ${buildDir}
cd ${buildDir}
${srcDir}/configure --prefix=${ALLIANCE_TOP} --enable-alc-shared
make -j1 install

View File

@ -0,0 +1,620 @@
#!/usr/bin/env python
#
# -*- mode:Python -*-
#
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2015-2018, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | C o r i o l i s I n s t a l l e r |
# | |
# | Authors : Jean-Paul Chaput |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | =============================================================== |
# | Python : "./socInstaller.py" |
# +-----------------------------------------------------------------+
#
# WARNING:
# This script has been designed only for internal use in the
# LIP6/CIAN department. If you want to use it you will need to
# change the hardwired configuration.
showTrace = True
try:
import sys
import os.path
import shutil
import optparse
import time
import traceback
import distutils.sysconfig
import subprocess
import socket
import re
import bz2
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
except ImportError, e:
module = str(e).split()[-1]
class ErrorMessage ( Exception ):
def __init__ ( self, code, *arguments ):
self._code = code
self._errors = [ 'Malformed call to ErrorMessage()', '%s' % str(arguments) ]
text = None
if len(arguments) == 1:
if isinstance(arguments[0],Exception): text = str(arguments[0]).split('\n')
else:
self._errors = arguments[0]
elif len(arguments) > 1:
text = list(arguments)
if text:
self._errors = []
while len(text[0]) == 0: del text[0]
lstrip = 0
if text[0].startswith('[ERROR]'): lstrip = 8
for line in text:
if line[0:lstrip ] == ' '*lstrip or \
line[0:lstrip-1] == '[ERROR]':
self._errors += [ line[lstrip:] ]
else:
self._errors += [ line.lstrip() ]
return
def __str__ ( self ):
if not isinstance(self._errors,list):
return "[ERROR] %s" % self._errors
formatted = "\n"
for i in range(len(self._errors)):
if i == 0: formatted += "[ERROR] %s" % self._errors[i]
else: formatted += " %s" % self._errors[i]
if i+1 < len(self._errors): formatted += "\n"
return formatted
def addMessage ( self, message ):
if not isinstance(self._errors,list):
self._errors = [ self._errors ]
if isinstance(message,list):
for line in message:
self._errors += [ line ]
else:
self._errors += [ message ]
return
def terminate ( self ):
print self
sys.exit(self._code)
@property
def code ( self ): return self._code
class BadBinary ( ErrorMessage ):
def __init__ ( self, binary ):
ErrorMessage.__init__( self, 1, "Binary not found: <%s>." % binary )
return
class BadReturnCode ( ErrorMessage ):
def __init__ ( self, status ):
ErrorMessage.__init__( self, 1, "Command returned status:%d." % status )
return
class Command ( object ):
def __init__ ( self, arguments, fdLog=None ):
self.arguments = arguments
self.fdLog = fdLog
if self.fdLog != None and not isinstance(self.fdLog,file):
print '[WARNING] Command.__init__(): <fdLog> is neither None or a file.'
return
def _argumentsToStr ( self, arguments ):
s = ''
for argument in arguments:
if argument.find(' ') >= 0: s += ' "' + argument + '"'
else: s += ' ' + argument
return s
def log ( self, text ):
print text[:-1]
sys.stdout.flush()
sys.stderr.flush()
if isinstance(self.fdLog,file):
self.fdLog.write( text )
self.fdLog.flush()
return
def execute ( self ):
global conf
sys.stdout.flush()
sys.stderr.flush()
homeDir = os.environ['HOME']
workDir = os.getcwd()
if homeDir.startswith(homeDir):
workDir = '~' + workDir[ len(homeDir) : ]
user = 'root'
if os.environ.has_key('USER'): user = os.environ['USER']
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
try:
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
print self.arguments
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
while True:
line = child.stdout.readline()
if not line: break
self.log( line )
except OSError, e:
raise BadBinary( self.arguments[0] )
(pid,status) = os.waitpid( child.pid, 0 )
status >>= 8
if status != 0:
raise BadReturnCode( status )
return
class CommandArg ( object ):
def __init__ ( self, command, wd=None, host=None, fdLog=None ):
self.command = command
self.host = host
self.wd = wd
self.fdLog = fdLog
return
def __str__ ( self ):
s = ''
if self.wd: s = 'cd %s && ' % self.wd
for i in range(len(self.command)):
if i: s += ' '
s += self.command[i]
return s
def getArgs ( self ):
if not self.host: return self.command
return [ 'ssh', self.host, str(self) ]
def execute ( self ):
if not self.host and self.wd: os.chdir( self.wd )
Command( self.getArgs(), self.fdLog ).execute()
return
class AllianceCommand ( CommandArg ):
def __init__ ( self, fdLog=None ):
CommandArg.__init__ ( self, [ '/root/allianceInstaller.sh' ]
, fdLog=fdLog )
return
class CoriolisCommand ( CommandArg ):
def __init__ ( self, ccbBin, rootDir, threads=1, otherArgs=[], fdLog=None ):
CommandArg.__init__ ( self, [ ccbBin
, '--root='+rootDir
, '--project=coriolis'
, '--make=-j%d install' % threads
] + otherArgs
, fdLog=fdLog )
return
class BenchsCommand ( CommandArg ):
def __init__ ( self, benchsDir, fdLog=None ):
CommandArg.__init__ ( self, [ '../bin/go.sh' ], wd=benchsDir, fdLog=fdLog )
return
class GitRepository ( object ):
@staticmethod
def getLocalRepository ( url ):
localRepo = url.split( '/' )[-1]
if localRepo.endswith('.git'):
localRepo = localRepo[:-4]
return localRepo
def __init__ ( self, url, cloneDir, fdLog=None ):
self.url = url
self.cloneDir = cloneDir
self.localRepo = GitRepository.getLocalRepository( url )
self.fdLog = fdLog
return
@property
def localRepoDir ( self ): return self.cloneDir+'/'+self.localRepo
def removeLocalRepo ( self ):
if os.path.isdir(self.localRepoDir):
print 'Removing Git local repository: <%s>' % self.localRepoDir
shutil.rmtree( self.localRepoDir )
return
def clone ( self ):
print 'Clone/pull from:', self.url
if not os.path.isdir(self.cloneDir):
os.makedirs( self.cloneDir )
if not os.path.isdir(self.localRepoDir):
os.chdir( self.cloneDir )
Command( [ 'git', 'clone', self.url ], self.fdLog ).execute()
else:
os.chdir( self.localRepoDir )
Command( [ 'git', 'pull' ], self.fdLog ).execute()
return
def checkout ( self, branch ):
os.chdir( self.localRepoDir )
Command( [ 'git', 'checkout', branch ], self.fdLog ).execute()
return
class Configuration ( object ):
PrimaryNames = \
[ 'sender' , 'receivers'
, 'coriolisRepo', 'benchsRepo' , 'supportRepos'
, 'homeDir' , 'masterHost'
, 'debugArg' , 'nightlyMode', 'dockerMode'
, 'rmSource' , 'rmBuild'
, 'doGit' , 'doAlliance' , 'doCoriolis', 'doBenchs', 'doSendReport'
, 'success' , 'rcode'
]
SecondaryNames = \
[ 'rootDir', 'srcDir', 'logDir', 'logs', 'fds', 'ccbBin', 'benchsDir'
]
def __init__ ( self ):
self._sender = 'Jean-Paul.Chaput@soc.lip6.fr'
self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', ]
self._supportRepos = [ 'http://github.com/miloyip/rapidjson' ]
self._allianceRepo = 'https://gitlab.lip6.fr/jpc/alliance.git'
self._coriolisRepo = 'https://gitlab.lip6.fr/jpc/coriolis.git'
self._benchsRepo = 'https://gitlab.lip6.fr/jpc/alliance-check-toolkit.git'
self._homeDir = os.environ['HOME']
self._debugArg = ''
self._rmSource = False
self._rmBuild = False
self._doGit = True
self._doCoriolis = False
self._doAlliance = False
self._doBenchs = False
self._doSendReport = False
self._nightlyMode = False
self._dockerMode = False
self._logs = { 'alliance':None, 'coriolis':None, 'benchs':None }
self._fds = { 'alliance':None, 'coriolis':None, 'benchs':None }
self._ccbBin = None
self._benchsDir = None
self._masterHost = self._detectMasterHost()
self._success = False
self._rcode = 0
self._updateSecondaries()
return
def __setattr__ ( self, attribute, value ):
if attribute in Configuration.SecondaryNames:
print ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute )
return
if attribute == 'masterHost' or attribute == '_masterHost':
if value == 'lepka':
print 'Never touch the Git tree when running on <lepka>.'
self._rmSource = False
self._rmBuild = False
self._doGit = False
self._doSendReport = False
if attribute[0] == '_':
self.__dict__[attribute] = value
return
if attribute == 'homeDir': value = os.path.expanduser(value)
self.__dict__['_'+attribute] = value
self._updateSecondaries()
return
def __getattr__ ( self, attribute ):
if attribute[0] != '_': attribute = '_'+attribute
if not self.__dict__.has_key(attribute):
raise ErrorMessage( 1, 'Configuration has no attribute <%s>.'%attribute )
return self.__dict__[attribute]
def _updateSecondaries ( self ):
if self._nightlyMode:
self._rootDir = self._homeDir + '/nightly/coriolis-2.x'
else:
self._rootDir = self._homeDir + '/coriolis-2.x'
self._srcDir = self._rootDir + '/src'
self._logDir = self._srcDir + '/logs'
self._ccbBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/ccb.py'
self._benchsDir = self._srcDir + '/' + GitRepository.getLocalRepository(self._benchsRepo ) + '/benchs'
return
def _detectMasterHost ( self ):
masterHost = 'unknown'
hostname = socket.gethostname()
hostAddr = socket.gethostbyname(hostname)
if hostname == 'lepka' and hostAddr == '127.0.0.1':
masterHost = 'lepka'
else:
masterHost = hostname.split('.')[0]
return masterHost
def openLog ( self, stem ):
if not os.path.isdir(self._logDir):
os.makedirs( self._logDir )
index = 0
timeTag = time.strftime( "%Y.%m.%d" )
while True:
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
if not os.path.isfile(logFile):
print "Report log: <%s>" % logFile
break
index += 1
fd = open( logFile, "w" )
self._logs[stem] = logFile
self._fds [stem] = fd
return
def closeLogs ( self ):
for fd in self._fds.values():
if fd: fd.close()
return
def compressLogs ( self ):
for log in self._logs.values():
if not log: continue
fd = open( log, 'r' )
bzfd = bz2.BZ2File( log+'.bz2', 'w' )
for line in fd.readlines(): bzfd.write( line )
bzfd.close()
fd.close()
os.unlink( log )
return
def getCommands ( self, target ):
commands = []
if self.doAlliance:
commands.append( AllianceCommand( fdLog=self.fds['alliance'] ) )
if self.doCoriolis:
if not os.path.isfile( self.ccbBin ):
raise ErrorMessage( 1, [ 'Cannot find <ccb.py>, should be here:'
, ' <%s>' % self.ccbBin
] )
otherArgs = []
if self.debugArg: otherArgs.append( self.debugArg )
if target == 'SL7_64':
otherArgs.append( '--project=support' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs , fdLog=self.fds['coriolis'] ) )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand ( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'SL6_64' or target == 'SL6':
otherArgs.append( '--project=support' )
otherArgs.append( '--devtoolset=8' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'Ubuntu18' or target == 'Debian9':
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs , fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
return commands
class Report ( object ):
def __init__ ( self, conf ):
self.conf = conf
commaspace = ', '
date = time.strftime( "%A %d %B %Y" )
stateText = 'FAILED'
modeText = 'SoC installation'
if self.conf.success: stateText = 'SUCCESS'
if self.conf.nightlyMode: modeText = 'Nightly build'
self.message = MIMEMultipart()
self.message['Subject'] = '[%s] Coriolis %s %s' % (stateText,modeText,date)
self.message['From' ] = self.conf.sender
self.message['To' ] = commaspace.join( self.conf.receivers )
self.attachements = []
self.mainText = '\n'
self.mainText += 'Salut le Crevard,\n'
self.mainText += '\n'
if self.conf.nightlyMode:
self.mainText += 'This is the nightly build report of Coriolis.\n'
else:
self.mainText += 'SoC installer report of Coriolis.\n'
self.mainText += '%s\n' % date
self.mainText += '\n'
if self.conf.success:
self.mainText += 'Build was SUCCESSFUL\n'
else:
self.mainText += 'Build has FAILED, please have a look to the attached log file(s).\n'
self.mainText += '\n'
self.mainText += 'Complete log file(s) can be found here:\n'
return
def attachLog ( self, logFile ):
if not logFile: return
fd = open( logFile, 'rb' )
try:
fd.seek( -1024*100, os.SEEK_END )
except IOError, e:
pass
tailLines = ''
for line in fd.readlines()[1:]:
tailLines += line
fd.close()
self.mainText += ' <%s>\n' % logFile
attachement = MIMEApplication(tailLines)
attachement.add_header( 'Content-Disposition', 'attachment', filename=os.path.basename(logFile) )
self.attachements.append( attachement )
return
def send ( self ):
self.message.attach( MIMEText(self.mainText) )
for attachement in self.attachements:
self.message.attach( attachement )
print "Sending mail report to:"
for receiver in self.conf.receivers: print ' <%s>' % receiver
session = smtplib.SMTP( 'localhost' )
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
session.quit()
return
# -------------------------------------------------------------------
# <socInstaller> Main Part.
parser = optparse.OptionParser ()
parser.add_option ( "--debug" , action="store_true" , dest="debug" , help="Build a <Debug> aka (-g) version." )
parser.add_option ( "--no-git" , action="store_true" , dest="noGit" , help="Do not pull/update Git repositories before building." )
parser.add_option ( "--do-alliance" , action="store_true" , dest="doAlliance" , help="Rebuild the Alliance tools." )
parser.add_option ( "--do-coriolis" , action="store_true" , dest="doCoriolis" , help="Rebuild the Coriolis tools." )
parser.add_option ( "--do-report" , action="store_true" , dest="doReport" , help="Send a final report." )
parser.add_option ( "--nightly" , action="store_true" , dest="nightly" , help="Perform a nighly build." )
parser.add_option ( "--docker" , action="store_true" , dest="docker" , help="Perform a build inside a docker container." )
parser.add_option ( "--benchs" , action="store_true" , dest="benchs" , help="Run the <alliance-checker-toolkit> sanity benchs." )
parser.add_option ( "--rm-build" , action="store_true" , dest="rmBuild" , help="Remove the build/install directories." )
parser.add_option ( "--rm-source" , action="store_true" , dest="rmSource" , help="Remove the Git source repositories." )
parser.add_option ( "--rm-all" , action="store_true" , dest="rmAll" , help="Remove everything (source+build+install)." )
parser.add_option ( "--root" , action="store" , type="string", dest="rootDir" , help="The root directory (default: <~/coriolis-2.x/>)." )
parser.add_option ( "--profile" , action="store" , type="string", dest="profile" , help="The targeted OS for the build." )
(options, args) = parser.parse_args ()
conf = Configuration()
try:
if options.debug: conf.debugArg = '--debug'
if options.nightly: conf.nightlyMode = True
if options.docker: conf.dockerMode = True
if options.noGit: conf.doGit = False
if options.doCoriolis: conf.doCoriolis = True
if options.doAlliance: conf.doAlliance = True
if options.benchs: conf.doBenchs = True
if options.doReport: conf.doSendReport = True
if options.rmSource or options.rmAll: conf.rmSource = True
if options.rmBuild or options.rmAll: conf.rmBuild = True
if conf.doAlliance: conf.openLog( 'alliance' )
if conf.doCoriolis: conf.openLog( 'coriolis' )
if conf.doBenchs: conf.openLog( 'benchs' )
if conf.dockerMode: os.environ['USER'] = 'root'
gitSupports = []
for supportRepo in conf.supportRepos:
gitSupports.append( GitRepository( supportRepo, conf.srcDir+'/support' ) )
gitCoriolis = GitRepository( conf.coriolisRepo, conf.srcDir, conf.fds['coriolis'] )
gitBenchs = GitRepository( conf.benchsRepo , conf.srcDir, conf.fds['coriolis'] )
if conf.doAlliance:
gitAlliance = GitRepository( conf.allianceRepo, conf.srcDir, conf.fds['alliance'] )
if conf.doGit:
for gitSupport in gitSupports:
if conf.rmSource: gitSupport.removeLocalRepo()
gitSupport.clone()
#if gitSupport.url.endswith('rapidjson'):
# gitSupport.checkout( 'a1c4f32' )
if conf.doCoriolis:
if conf.rmSource: gitCoriolis.removeLocalRepo()
gitCoriolis.clone ()
gitCoriolis.checkout( 'devel' )
if conf.doAlliance:
if conf.rmSource: gitAlliance.removeLocalRepo()
gitAlliance.clone ()
#gitAlliance.checkout( 'devel' )
if conf.rmSource: gitBenchs.removeLocalRepo()
gitBenchs.clone()
if conf.rmBuild:
for entry in os.listdir(conf.rootDir):
if entry.startswith('Linux.'):
buildDir = conf.rootDir+'/'+entry
print 'Removing OS build directory: <%s>' % buildDir
shutil.rmtree( buildDir )
commands = conf.getCommands( options.profile )
for command in commands:
if command.host:
print 'Executing command on remote host <%s>:' % host
else:
print 'Executing command on *local* host:'
print ' %s' % str(command)
command.execute()
conf.closeLogs()
conf.success = True
except ErrorMessage, e:
print e
conf.closeLogs()
conf.success = False
if showTrace:
print '\nPython stack trace:'
traceback.print_tb( sys.exc_info()[2] )
conf.rcode = e.code
if conf.doSendReport:
report = Report( conf )
report.attachLog( conf.logs['coriolis' ] )
report.attachLog( conf.logs['benchs' ] )
report.send()
conf.compressLogs()
sys.exit( conf.rcode )

View File

@ -0,0 +1,7 @@
FROM ubuntu18.system
COPY root/socInstaller.py /root/socInstaller.py
COPY root/allianceInstaller.sh /root/allianceInstaller.sh
CMD /root/socInstaller.py --docker --profile=Ubuntu18 --do-alliance --do-coriolis --benchs

View File

@ -0,0 +1,22 @@
FROM ubuntu:bionic
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get -y install build-essential binutils-dev \
git cmake bison flex gcc python-dev \
libboost-all-dev libboost-python-dev \
zlib1g-dev libxml2-dev rapidjson-dev libbz2-dev \
qtbase5-dev libqt5svg5-dev libqwt-qt5-dev \
python-pyqt5 \
\
autotools-dev automake \
libxt-dev libxpm-dev libmotif-dev \
\
yosys \
\
vim \
&& apt-get clean
# qt4-dev-tools libqwt-dev python-qt4 \

View File

@ -0,0 +1,3 @@
systemImage="ubuntu18.system"
coriolisImage="ubuntu18.coriolis"

View File

@ -0,0 +1,19 @@
#!/bin/bash
srcDir=${HOME}/coriolis-2.x/src/alliance/alliance/src
commonRoot=${HOME}/coriolis-2.x/Linux.el7_64/Release.Shared
buildDir=${commonRoot}/build
installDir=${commonRoot}/install
export ALLIANCE_TOP=${installDir}
export LD_LIBRARY_PATH=${installDir}/lib:${LD_LIBRARY_PATH}
cd ${srcDir}
# Skip doc generation to avoid pulling TeXLive in docker images.
sed -i 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./autostuff
./autostuff clean
./autostuff
mkdir -p ${buildDir}
cd ${buildDir}
${srcDir}/configure --prefix=${ALLIANCE_TOP} --enable-alc-shared
make -j1 install

View File

@ -0,0 +1,621 @@
#!/usr/bin/env python
#
# -*- mode:Python -*-
#
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2015-2018, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | C o r i o l i s I n s t a l l e r |
# | |
# | Authors : Jean-Paul Chaput |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | =============================================================== |
# | Python : "./socInstaller.py" |
# +-----------------------------------------------------------------+
#
# WARNING:
# This script has been designed only for internal use in the
# LIP6/CIAN department. If you want to use it you will need to
# change the hardwired configuration.
showTrace = True
try:
import sys
import os.path
import shutil
import optparse
import time
import traceback
import distutils.sysconfig
import subprocess
import socket
import re
import bz2
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
except ImportError, e:
module = str(e).split()[-1]
class ErrorMessage ( Exception ):
def __init__ ( self, code, *arguments ):
self._code = code
self._errors = [ 'Malformed call to ErrorMessage()', '%s' % str(arguments) ]
text = None
if len(arguments) == 1:
if isinstance(arguments[0],Exception): text = str(arguments[0]).split('\n')
else:
self._errors = arguments[0]
elif len(arguments) > 1:
text = list(arguments)
if text:
self._errors = []
while len(text[0]) == 0: del text[0]
lstrip = 0
if text[0].startswith('[ERROR]'): lstrip = 8
for line in text:
if line[0:lstrip ] == ' '*lstrip or \
line[0:lstrip-1] == '[ERROR]':
self._errors += [ line[lstrip:] ]
else:
self._errors += [ line.lstrip() ]
return
def __str__ ( self ):
if not isinstance(self._errors,list):
return "[ERROR] %s" % self._errors
formatted = "\n"
for i in range(len(self._errors)):
if i == 0: formatted += "[ERROR] %s" % self._errors[i]
else: formatted += " %s" % self._errors[i]
if i+1 < len(self._errors): formatted += "\n"
return formatted
def addMessage ( self, message ):
if not isinstance(self._errors,list):
self._errors = [ self._errors ]
if isinstance(message,list):
for line in message:
self._errors += [ line ]
else:
self._errors += [ message ]
return
def terminate ( self ):
print self
sys.exit(self._code)
@property
def code ( self ): return self._code
class BadBinary ( ErrorMessage ):
def __init__ ( self, binary ):
ErrorMessage.__init__( self, 1, "Binary not found: <%s>." % binary )
return
class BadReturnCode ( ErrorMessage ):
def __init__ ( self, status ):
ErrorMessage.__init__( self, 1, "Command returned status:%d." % status )
return
class Command ( object ):
def __init__ ( self, arguments, fdLog=None ):
self.arguments = arguments
self.fdLog = fdLog
if self.fdLog != None and not isinstance(self.fdLog,file):
print '[WARNING] Command.__init__(): <fdLog> is neither None or a file.'
return
def _argumentsToStr ( self, arguments ):
s = ''
for argument in arguments:
if argument.find(' ') >= 0: s += ' "' + argument + '"'
else: s += ' ' + argument
return s
def log ( self, text ):
print text[:-1]
sys.stdout.flush()
sys.stderr.flush()
if isinstance(self.fdLog,file):
self.fdLog.write( text )
self.fdLog.flush()
return
def execute ( self ):
global conf
sys.stdout.flush()
sys.stderr.flush()
homeDir = os.environ['HOME']
workDir = os.getcwd()
if homeDir.startswith(homeDir):
workDir = '~' + workDir[ len(homeDir) : ]
user = 'root'
if os.environ.has_key('USER'): user = os.environ['USER']
prompt = '%s@%s:%s$' % (user,conf.masterHost,workDir)
try:
self.log( '%s%s\n' % (prompt,self._argumentsToStr(self.arguments)) )
print self.arguments
child = subprocess.Popen( self.arguments, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
while True:
line = child.stdout.readline()
if not line: break
self.log( line )
except OSError, e:
raise BadBinary( self.arguments[0] )
(pid,status) = os.waitpid( child.pid, 0 )
status >>= 8
if status != 0:
raise BadReturnCode( status )
return
class CommandArg ( object ):
def __init__ ( self, command, wd=None, host=None, fdLog=None ):
self.command = command
self.host = host
self.wd = wd
self.fdLog = fdLog
return
def __str__ ( self ):
s = ''
if self.wd: s = 'cd %s && ' % self.wd
for i in range(len(self.command)):
if i: s += ' '
s += self.command[i]
return s
def getArgs ( self ):
if not self.host: return self.command
return [ 'ssh', self.host, str(self) ]
def execute ( self ):
if not self.host and self.wd: os.chdir( self.wd )
Command( self.getArgs(), self.fdLog ).execute()
return
class AllianceCommand ( CommandArg ):
def __init__ ( self, fdLog=None ):
CommandArg.__init__ ( self, [ '/root/allianceInstaller.sh' ]
, fdLog=fdLog )
return
class CoriolisCommand ( CommandArg ):
def __init__ ( self, ccbBin, rootDir, threads=1, otherArgs=[], fdLog=None ):
CommandArg.__init__ ( self, [ ccbBin
, '--root='+rootDir
, '--project=coriolis'
, '--make=-j%d install' % threads
] + otherArgs
, fdLog=fdLog )
return
class BenchsCommand ( CommandArg ):
def __init__ ( self, benchsDir, fdLog=None ):
CommandArg.__init__ ( self, [ '../bin/go.sh' ], wd=benchsDir, fdLog=fdLog )
return
class GitRepository ( object ):
@staticmethod
def getLocalRepository ( url ):
localRepo = url.split( '/' )[-1]
if localRepo.endswith('.git'):
localRepo = localRepo[:-4]
return localRepo
def __init__ ( self, url, cloneDir, fdLog=None ):
self.url = url
self.cloneDir = cloneDir
self.localRepo = GitRepository.getLocalRepository( url )
self.fdLog = fdLog
return
@property
def localRepoDir ( self ): return self.cloneDir+'/'+self.localRepo
def removeLocalRepo ( self ):
if os.path.isdir(self.localRepoDir):
print 'Removing Git local repository: <%s>' % self.localRepoDir
shutil.rmtree( self.localRepoDir )
return
def clone ( self ):
print 'Clone/pull from:', self.url
if not os.path.isdir(self.cloneDir):
os.makedirs( self.cloneDir )
if not os.path.isdir(self.localRepoDir):
os.chdir( self.cloneDir )
Command( [ 'git', 'clone', self.url ], self.fdLog ).execute()
else:
os.chdir( self.localRepoDir )
Command( [ 'git', 'pull' ], self.fdLog ).execute()
return
def checkout ( self, branch ):
os.chdir( self.localRepoDir )
Command( [ 'git', 'checkout', branch ], self.fdLog ).execute()
return
class Configuration ( object ):
PrimaryNames = \
[ 'sender' , 'receivers'
, 'coriolisRepo', 'benchsRepo' , 'supportRepos'
, 'homeDir' , 'masterHost'
, 'debugArg' , 'nightlyMode', 'dockerMode'
, 'rmSource' , 'rmBuild'
, 'doGit' , 'doAlliance' , 'doCoriolis', 'doBenchs', 'doSendReport'
, 'success' , 'rcode'
]
SecondaryNames = \
[ 'rootDir', 'srcDir', 'logDir', 'logs', 'fds', 'ccbBin', 'benchsDir'
]
def __init__ ( self ):
self._sender = 'Jean-Paul.Chaput@soc.lip6.fr'
self._receivers = [ 'Jean-Paul.Chaput@lip6.fr', ]
self._supportRepos = [ 'http://github.com/miloyip/rapidjson' ]
self._allianceRepo = 'https://gitlab.lip6.fr/jpc/alliance.git'
self._coriolisRepo = 'https://gitlab.lip6.fr/jpc/coriolis.git'
self._benchsRepo = 'https://gitlab.lip6.fr/jpc/alliance-check-toolkit.git'
self._homeDir = os.environ['HOME']
self._debugArg = ''
self._rmSource = False
self._rmBuild = False
self._doGit = True
self._doCoriolis = False
self._doAlliance = False
self._doBenchs = False
self._doSendReport = False
self._nightlyMode = False
self._dockerMode = False
self._logs = { 'alliance':None, 'coriolis':None, 'benchs':None }
self._fds = { 'alliance':None, 'coriolis':None, 'benchs':None }
self._ccbBin = None
self._benchsDir = None
self._masterHost = self._detectMasterHost()
self._success = False
self._rcode = 0
self._updateSecondaries()
return
def __setattr__ ( self, attribute, value ):
if attribute in Configuration.SecondaryNames:
print ErrorMessage( 1, 'Attempt to write in read-only attribute <%s> in Configuration.'%attribute )
return
if attribute == 'masterHost' or attribute == '_masterHost':
if value == 'lepka':
print 'Never touch the Git tree when running on <lepka>.'
self._rmSource = False
self._rmBuild = False
self._doGit = False
self._doSendReport = False
if attribute[0] == '_':
self.__dict__[attribute] = value
return
if attribute == 'homeDir': value = os.path.expanduser(value)
self.__dict__['_'+attribute] = value
self._updateSecondaries()
return
def __getattr__ ( self, attribute ):
if attribute[0] != '_': attribute = '_'+attribute
if not self.__dict__.has_key(attribute):
raise ErrorMessage( 1, 'Configuration has no attribute <%s>.'%attribute )
return self.__dict__[attribute]
def _updateSecondaries ( self ):
if self._nightlyMode:
self._rootDir = self._homeDir + '/nightly/coriolis-2.x'
else:
self._rootDir = self._homeDir + '/coriolis-2.x'
self._srcDir = self._rootDir + '/src'
self._logDir = self._srcDir + '/logs'
self._ccbBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/ccb.py'
self._benchsDir = self._srcDir + '/' + GitRepository.getLocalRepository(self._benchsRepo ) + '/benchs'
return
def _detectMasterHost ( self ):
masterHost = 'unknown'
hostname = socket.gethostname()
hostAddr = socket.gethostbyname(hostname)
if hostname == 'lepka' and hostAddr == '127.0.0.1':
masterHost = 'lepka'
else:
masterHost = hostname.split('.')[0]
return masterHost
def openLog ( self, stem ):
if not os.path.isdir(self._logDir):
os.makedirs( self._logDir )
index = 0
timeTag = time.strftime( "%Y.%m.%d" )
while True:
logFile = os.path.join(self._logDir,"%s-%s-%02d.log" % (stem,timeTag,index))
if not os.path.isfile(logFile):
print "Report log: <%s>" % logFile
break
index += 1
fd = open( logFile, "w" )
self._logs[stem] = logFile
self._fds [stem] = fd
return
def closeLogs ( self ):
for fd in self._fds.values():
if fd: fd.close()
return
def compressLogs ( self ):
for log in self._logs.values():
if not log: continue
fd = open( log, 'r' )
bzfd = bz2.BZ2File( log+'.bz2', 'w' )
for line in fd.readlines(): bzfd.write( line )
bzfd.close()
fd.close()
os.unlink( log )
return
def getCommands ( self, target ):
commands = []
if self.doAlliance:
commands.append( AllianceCommand( fdLog=self.fds['alliance'] ) )
if self.doCoriolis:
if not os.path.isfile( self.ccbBin ):
raise ErrorMessage( 1, [ 'Cannot find <ccb.py>, should be here:'
, ' <%s>' % self.ccbBin
] )
otherArgs = []
if self.debugArg: otherArgs.append( self.debugArg )
if target == 'SL7_64':
otherArgs.append( '--project=support' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs , fdLog=self.fds['coriolis'] ) )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand ( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'SL6_64' or target == 'SL6':
otherArgs.append( '--project=support' )
otherArgs.append( '--devtoolset=8' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'Ubuntu18' or target == 'Debian9':
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
return commands
class Report ( object ):
def __init__ ( self, conf ):
self.conf = conf
commaspace = ', '
date = time.strftime( "%A %d %B %Y" )
stateText = 'FAILED'
modeText = 'SoC installation'
if self.conf.success: stateText = 'SUCCESS'
if self.conf.nightlyMode: modeText = 'Nightly build'
self.message = MIMEMultipart()
self.message['Subject'] = '[%s] Coriolis %s %s' % (stateText,modeText,date)
self.message['From' ] = self.conf.sender
self.message['To' ] = commaspace.join( self.conf.receivers )
self.attachements = []
self.mainText = '\n'
self.mainText += 'Salut le Crevard,\n'
self.mainText += '\n'
if self.conf.nightlyMode:
self.mainText += 'This is the nightly build report of Coriolis.\n'
else:
self.mainText += 'SoC installer report of Coriolis.\n'
self.mainText += '%s\n' % date
self.mainText += '\n'
if self.conf.success:
self.mainText += 'Build was SUCCESSFUL\n'
else:
self.mainText += 'Build has FAILED, please have a look to the attached log file(s).\n'
self.mainText += '\n'
self.mainText += 'Complete log file(s) can be found here:\n'
return
def attachLog ( self, logFile ):
if not logFile: return
fd = open( logFile, 'rb' )
try:
fd.seek( -1024*100, os.SEEK_END )
except IOError, e:
pass
tailLines = ''
for line in fd.readlines()[1:]:
tailLines += line
fd.close()
self.mainText += ' <%s>\n' % logFile
attachement = MIMEApplication(tailLines)
attachement.add_header( 'Content-Disposition', 'attachment', filename=os.path.basename(logFile) )
self.attachements.append( attachement )
return
def send ( self ):
self.message.attach( MIMEText(self.mainText) )
for attachement in self.attachements:
self.message.attach( attachement )
print "Sending mail report to:"
for receiver in self.conf.receivers: print ' <%s>' % receiver
session = smtplib.SMTP( 'localhost' )
session.sendmail( self.conf.sender, self.conf.receivers, self.message.as_string() )
session.quit()
return
# -------------------------------------------------------------------
# <socInstaller> Main Part.
parser = optparse.OptionParser ()
parser.add_option ( "--debug" , action="store_true" , dest="debug" , help="Build a <Debug> aka (-g) version." )
parser.add_option ( "--no-git" , action="store_true" , dest="noGit" , help="Do not pull/update Git repositories before building." )
parser.add_option ( "--do-alliance" , action="store_true" , dest="doAlliance" , help="Rebuild the Alliance tools." )
parser.add_option ( "--do-coriolis" , action="store_true" , dest="doCoriolis" , help="Rebuild the Coriolis tools." )
parser.add_option ( "--do-report" , action="store_true" , dest="doReport" , help="Send a final report." )
parser.add_option ( "--nightly" , action="store_true" , dest="nightly" , help="Perform a nighly build." )
parser.add_option ( "--docker" , action="store_true" , dest="docker" , help="Perform a build inside a docker container." )
parser.add_option ( "--benchs" , action="store_true" , dest="benchs" , help="Run the <alliance-checker-toolkit> sanity benchs." )
parser.add_option ( "--rm-build" , action="store_true" , dest="rmBuild" , help="Remove the build/install directories." )
parser.add_option ( "--rm-source" , action="store_true" , dest="rmSource" , help="Remove the Git source repositories." )
parser.add_option ( "--rm-all" , action="store_true" , dest="rmAll" , help="Remove everything (source+build+install)." )
parser.add_option ( "--root" , action="store" , type="string", dest="rootDir" , help="The root directory (default: <~/coriolis-2.x/>)." )
parser.add_option ( "--profile" , action="store" , type="string", dest="profile" , help="The targeted OS for the build." )
(options, args) = parser.parse_args ()
conf = Configuration()
try:
if options.debug: conf.debugArg = '--debug'
if options.nightly: conf.nightlyMode = True
if options.docker: conf.dockerMode = True
if options.noGit: conf.doGit = False
if options.doCoriolis: conf.doCoriolis = True
if options.doAlliance: conf.doAlliance = True
if options.benchs: conf.doBenchs = True
if options.doReport: conf.doSendReport = True
if options.rmSource or options.rmAll: conf.rmSource = True
if options.rmBuild or options.rmAll: conf.rmBuild = True
if conf.doAlliance: conf.openLog( 'alliance' )
if conf.doCoriolis: conf.openLog( 'coriolis' )
if conf.doBenchs: conf.openLog( 'benchs' )
if conf.dockerMode: os.environ['USER'] = 'root'
gitSupports = []
for supportRepo in conf.supportRepos:
gitSupports.append( GitRepository( supportRepo, conf.srcDir+'/support' ) )
gitCoriolis = GitRepository( conf.coriolisRepo, conf.srcDir, conf.fds['coriolis'] )
gitBenchs = GitRepository( conf.benchsRepo , conf.srcDir, conf.fds['coriolis'] )
if conf.doAlliance:
gitAlliance = GitRepository( conf.allianceRepo, conf.srcDir, conf.fds['alliance'] )
if conf.doGit:
for gitSupport in gitSupports:
if conf.rmSource: gitSupport.removeLocalRepo()
gitSupport.clone()
#if gitSupport.url.endswith('rapidjson'):
# gitSupport.checkout( 'a1c4f32' )
if conf.doCoriolis:
if conf.rmSource: gitCoriolis.removeLocalRepo()
gitCoriolis.clone ()
gitCoriolis.checkout( 'devel' )
if conf.doAlliance:
if conf.rmSource: gitAlliance.removeLocalRepo()
gitAlliance.clone ()
#gitAlliance.checkout( 'devel' )
if conf.rmSource: gitBenchs.removeLocalRepo()
gitBenchs.clone()
if conf.rmBuild:
for entry in os.listdir(conf.rootDir):
if entry.startswith('Linux.'):
buildDir = conf.rootDir+'/'+entry
print 'Removing OS build directory: <%s>' % buildDir
shutil.rmtree( buildDir )
commands = conf.getCommands( options.profile )
for command in commands:
if command.host:
print 'Executing command on remote host <%s>:' % host
else:
print 'Executing command on *local* host:'
print ' %s' % str(command)
command.execute()
conf.closeLogs()
conf.success = True
except ErrorMessage, e:
print e
conf.closeLogs()
conf.success = False
if showTrace:
print '\nPython stack trace:'
traceback.print_tb( sys.exc_info()[2] )
conf.rcode = e.code
if conf.doSendReport:
report = Report( conf )
report.attachLog( conf.logs['coriolis' ] )
report.attachLog( conf.logs['benchs' ] )
report.send()
conf.compressLogs()
sys.exit( conf.rcode )

99
bootstrap/dockerManager.sh Executable file
View File

@ -0,0 +1,99 @@
#!/bin/bash
showHelp=0
showError=0
doBuildSystem=0
doBuild=0
doRun=0
doClean=0
if [ ! -f "./docker-conf.sh" ]; then
echo "[ERROR] Missing \"./docker-conf.sh\"."
echo " (wd:\"`pwd`\")"
exit 1
fi
. "./docker-conf.sh"
dockerImages="${systemImage},${coriolisImage}"
while [ $# -gt 0 ]; do
case $1 in
--help) showHelp=1;;
--system) doBuildSystem=1;;
--build) doBuild=1;;
--run) doRun=1;;
--clean) doClean=1;;
-*) NB=2; CH=`echo $1 | cut -c$NB`
while [ "$CH" != "" ]; do
case $CH in
h) showHelp=1;;
S) doBuildSystem=1;;
b) doBuild=1;;
r) doRun=1;;
C) doClean=1;;
*) showError=1; badOption="$1";;
esac
NB=`expr $NB + 1`
CH=`echo $1 | cut -c$NB`
done;;
*) showError=1; badOption="$1";;
esac
shift
done
if [ ${showError} -ne 0 ]; then
echo "[ERROR] Unknown argument \"${badOption}\"."
exit 1
fi
if [ ${showHelp} -ne 0 ]; then
echo "Usage: ./manager.sh [options]"
echo "Options:"
echo " * [-h|--help]: Print this help."
echo " * [-S|--system]: Rebuild the whole OS image."
echo " * [-b|--build]: Rebuild the Coriolis image. It will remove the previous"
echo " images (${dockerImages})."
echo " * [-r|--run]: Recompile Alliance, Coriolis & perform benchs."
echo " * [-C|--clean]: Remove container(s) & image(s)."
exit 0
fi
if [ ${doBuild} -ne 0 ] || [ ${doBuildSytem} -ne 0 ]; then
doClean=1
fi
if [ ${doClean} -ne 0 ]; then
echo "Removing \"${coriolisImage}\" docker container."
docker rm ${coriolisImage}
docker rmi ${coriolisImage}
if [ ${doBuildSystem} -ne 0 ]; then
echo "Removing \"${systemImage}\" docker image."
docker rm ${systemImage}
docker rmi ${systemImage}
fi
fi
if [ ${doBuild} -ne 0 ]; then
echo "Synching Alliance & Coriolis builder scripts."
cp ../../socInstaller.py ./root
cp ../../allianceInstaller.sh ./root
if [ ${doBuildSystem} -ne 0 ]; then
echo "Build \"${systemImage}\" docker image."
docker build -f Dockerfile.system -t ${systemImage} .
fi
echo "Build \"${coriolisImage}\" docker image."
docker build -f Dockerfile.coriolis -t ${coriolisImage} .
fi
if [ ${doRun} -ne 0 ]; then
docker run --name ${coriolisImage} ${coriolisImage}
fi

View File

@ -436,7 +436,8 @@ class Configuration ( object ):
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
elif target == 'Ubuntu18' or target == 'Debian9':
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs , fdLog=self.fds['coriolis'] ) )
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
if self.doBenchs:
commands.append( BenchsCommand( self.benchsDir, fdLog=self.fds['benchs'] ) )
return commands

View File

@ -0,0 +1,31 @@
.. -*- Mode: rst -*-
========================
Alliance VLSI/CAD System
========================
:slug: alliance
:date: 2020-02-09 13:00
:Authors: Jean-Paul Chaput
:Contact: <Jean-Paul.Chaput@lip6.fr>
:Version: February 9, 2020 (jpc)
:status: hidden
.. role:: raw-html(raw)
:format: html
.. URLs that changes between the various backends.
.. For HTML backend
.. contents::
:depth: 2
.. include:: ../../../etc/definitions.rst
.. include:: Installation.rst

View File

@ -0,0 +1,247 @@
.. -*- Mode: rst -*-
About Alliance
==============
Circuit Designed with Alliance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Smartlabs_/Smarthome designed a complete circuit in the |XFAB| |XH035| technology
(2014).
* `Tokai University`_ (`Shimizu Lab`_) designed the |SNX|, a 16 bits processor in
the |ROHM| 0.18µm (2010).
Those are circuits that we know of because their designers were kind enough to inform
us (it is not comprehensive).
Useful Links
~~~~~~~~~~~~
* Improved Standard Cell libraries and documentation on how to design them,
by Graham |Petley|: `VLSI Technology <http://www.vlsitechnology.org/>`_
* A book presenting |Alliance| in depth:
`Introduction to VLSI CMOS Circuits design <http://www.cc.toin.ac.jp/sc/palacios/openbook/vlsie.pdf>`_
by Carlos Silva :sc:`Cardenas`, Takeo :sc:`Yoshida` & Alberto Palacios :sc:`Pawlovsky`.
* For spanish locutors, a set of tutorials made by Miguel Eduardo |FloresGomez|
from `Don Bosco University`_:
`Tutorial de Alliance <http://microelectronicdesignandsimulation.blogspot.com/2015/10/tutoriales-de-alliance-vlsi.html>`_
Installing |Alliance| from a Distribution
=========================================
Binary packages are avalaibles for the following distributions:
* Fedora
* Ubuntu LTS
* MacOS X, through `MacPorts <https://www.macports.org/>`_
Fedora
~~~~~~
1. Pull & install the packages from the repository:
.. code-block:: sh
root@home:~# yum install alliance alliance-libs alliance-doc
That's all folks. |Alliance| is ready to use.
.. note:: With the packaged version of |Alliance|, files and directories are not at
the same places as in the default install. They have been made compliant
with the |FHS|.
======================== ===============================
**binaries** /usr/lib/alliance/bin
**cell libraries** /usr/share/alliance/cells
**man pages** /usr/share/alliance/man
**tutorials & examples** /usr/share/doc/alliance-5.0/
======================== ===============================
Environment variables should be automatically set.
Ubuntu LTS 18.04
~~~~~~~~~~~~~~~~
|Alliance| is available in the `Ubuntu Universe repository <http://packages.ubuntu.com/bionic/alliance>`_,
you may install it with the package manager.
.. code-block:: sh
ego@home:~> sudo apt-get install alliance
Before using it, you must source the environment (in each terminal
you want to use |Alliance|):
.. code-block:: sh
ego@home:~> . /etc/alliance/profile.d/alc_env.sh
Rebuild From Source (Git)
=========================
If binary packages are not avalaibles for your distribution, you may want
to rebuild |Alliance| from source. To perform this, be aware that you must
have at least a basic knowlegde of how to build a C/C++ program from source.
Sources are available through the following |git| repository:
https://gitlab.lip6.fr/jpc/alliance.git
The stable version is under the branch :cb:`master`, while the development
is kept under :cb:`devel` (and will be merged into :cb:`master` from time
to time...)
In order to recompile, you will need to install the development tools in
your system. The main ones are listed below.
=================== ======================================= ===============================
Build Dependencies
---------------------------------------------------------------------------------------------
Software RHEL, CentOS, Scientific Linux & Fedora Debian/Ubuntu
=================== ======================================= ===============================
Basic devel tools "Development tools" (group) `build-essential`
Version system `git` `git`
GCC/G++ compiler `gcc`, `g++` `gcc`, `g++`
Autotools `autoconf`, `automake` `autotool-dev`, `automake`
`libtool` `libtool`
Parser (yacc&lex) `bison`, `flex` `bison`, `flex`
X11 libraries `libX11-devel`, `libXt-devel`, `libx11-dev`, `libxt-dev`
`libXpm-devel`, `libxpm-dev`
`motif`, `motif-devel` `libmotif-dev`
Graphics `xfig`, `ImageMagick` `xfig`, `ImageMagick`
Text Processing `texlive` `texlive`, `texlive-pictures`,
`texlive-latex-extra`
=================== ======================================= ===============================
.. note:: Before running the :cb:`autotools`, you have to run the :cb:`autostuff`
script in ``./alliance/src`` which generate the top-level automake files.
.. note:: If you happen to have forgotten one of the dependency and have to
install it after running `configure`, please remove the *whole*
build directory tree and re-run `configure`. The same rule applies
if you switch from static libraries to dynamic ones.
.. note:: **Do not build in parallel**, always uses ``-j1``, the build process
fail in strange ways when run in parallel (this is a known problem
due to the way Alliance was developped).
.. note:: **Bison/Flex** versions. Alliance is very sensitive to the versions
of thoses programs. The reference OSes for the build are |Scientific Linux|
6 & 7, which supplies |bison| 2.4.1 and 2.7 (resp.), |flex| 2.5.35 and
2.5.37 (resp.).
Debian 9 & Ubuntu 18
~~~~~~~~~~~~~~~~~~~~
In this example we show the case where |Alliance| is installed in the user's home
directory alongside with |Coriolis|.
1. Dependencies installation:
.. code-block:: sh
ego@home:~> sudo apt-get install build-essential binutils-dev \
git cmake bison flex gcc python-dev \
autotools-dev automake \
libxt-dev libxpm-dev libmotif-dev
2. Getting the sources (cloning the |git| repository):
.. code-block:: sh
ego@home:~> mkdir -p coriolis-2.x/src
ego@home:~> cd coriolis-2.x/src
ego@home:src> git clone https://gitlab.lip6.fr/jpc/alliance.git
3. Compilation & installation. For that step, you can use the following shell
script.
.. note:: **The commonRoot variable**, the ``/Linux.x86_64/`` component of
the path is dependent on the |OS| you are using. It is determined
by looking to the kernel version as returned by ``uname -srm``.
In the following script, it has been set to what is choosen by the
|Coriolis| installer ``ccb.py`` for |Ubuntu|.
.. code-block:: sh
#!/bin/bash
srcDir=${HOME}/coriolis-2.x/src/alliance/alliance/src
commonRoot=${HOME}/coriolis-2.x/Linux.x86_64/Release.Shared
buildDir=${commonRoot}/build
installDir=${commonRoot}/install
export ALLIANCE_TOP=${installDir}
export LD_LIBRARY_PATH=${installDir}/lib:${LD_LIBRARY_PATH}
cd ${srcDir}
# Skip doc generation to avoid pulling TeXLive in docker images.
#sed -i 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./autostuff
./autostuff clean
./autostuff
mkdir -p ${buildDir}
cd ${buildDir}
${srcDir}/configure --prefix=${ALLIANCE_TOP} --enable-alc-shared
make -j1 install
RHEL, CentOS, Fedora
~~~~~~~~~~~~~~~~~~~~
The procedure is very similar as the one for Debian/Ubuntu, except for the
package manager step and the **commonRoot** variable value, which is set
to ``/Linux.SL7_64/`` (RHEL, CentOS & Scientific Linux)
or ``/Linux.fc_64/`` (Fedora).
1. Dependencies installation:
.. code-block:: sh
root@home:~> yum install git cmake bison flex gcc-c++ libstdc++-devel \
make binutils-devel \
autoconf automake libtool \
libX11-devel libXt-devel libXpm-devel \
motif motif-devel \
2. Getting the sources (cloning the |git| repository):
.. code-block:: sh
ego@home:~> mkdir -p coriolis-2.x/src
ego@home:~> cd coriolis-2.x/src
ego@home:src> git clone https://gitlab.lip6.fr/jpc/alliance.git
3. Compilation & installation. For that step, you can use the following shell
script.
.. code-block:: sh
#!/bin/bash
srcDir=${HOME}/coriolis-2.x/src/alliance/alliance/src
commonRoot=${HOME}/coriolis-2.x/Linux.SL7_64/Release.Shared
buildDir=${commonRoot}/build
installDir=${commonRoot}/install
export ALLIANCE_TOP=${installDir}
export LD_LIBRARY_PATH=${installDir}/lib:${LD_LIBRARY_PATH}
cd ${srcDir}
# Skip doc generation to avoid pulling TeXLive in docker images.
#sed -i 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./autostuff
./autostuff clean
./autostuff
mkdir -p ${buildDir}
cd ${buildDir}
${srcDir}/configure --prefix=${ALLIANCE_TOP} --enable-alc-shared
make -j1 install

View File

@ -17,6 +17,19 @@ Documentation
.. include:: ../../etc/definitions.rst
Alliance Documentation
======================
.. row::
.. column::
:width: 5
:offset: 1
`Alliance Installation <{filename}/pages/alliance/Alliance_HTML.rst>`_ |br|
How to get, build & install Alliance alongside Coriolis
Coriolis Documentation
======================

View File

@ -30,13 +30,14 @@ Main building prerequisites:
* yacc & lex
* Qt 4 or Qt 5
* PyQt 4 or PyQt 5
* Qwt
* Qwt 6
Building documentation prerequisites:
* doxygen
* latex
* python-docutils (for reStructuredText)
* pelican
The following libraries get directly bundled with |Coriolis|:
@ -136,10 +137,24 @@ Installing on |RedHat| or compatible distributions
boost-devel boost-python boost-filesystem \
boost-regex boost-wave \
python-devel libxml2-devel bzip2-devel \
qt-devel qwt-devel # Qt 4
qt-devel
Note, that the ``Qwt`` packages are directly available from the standart distribution
when using |Qt| 4.
The packages ``qwt`` and ``qwt-devel`` are not provided by any standard repository
(like |EPEL|). You may download them from the
`LIP6 Addons Repository <https://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/repoview/letter_q.group.html>`_
Then run:
.. code-block:: sh
dummy@lepka:~> yum localinstall -y qwt-6.1.2-4.fc23.x86_64.rpm \
qwt-devel-6.1.2-4.fc23.x86_64.rpm # Qwt for Qt 4.
You may also install them directly (whithout an intermediate download):
.. code-block:: sh
dummy@lepka:~> yum install -y http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/qwt-6.1.2-4.fc23.x86_64.rpm \
http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/qwt-devel-6.1.2-4.fc23.x86_64.rpm
2. Install the unpackaged prerequisites. Currently, only RapidJSON_.
@ -206,8 +221,8 @@ If you want to use Qt 5 instead of Qt 4, modify the previous steps as follows:
.. code-block:: sh
dummy@lepka:~> yum localinstall -y qwt-qt5-6.1.2-4.fc23.x86_64.rpm \
qwt-qt5-6.1.2-4.fc23.x86_64.rpm # Qwt for Qt 5.
dummy@lepka:~> yum localinstall -y qwt-qt5-6.1.2-4.fc23.x86_64.rpm \
qwt-qt5-devel-6.1.2-4.fc23.x86_64.rpm # Qwt for Qt 5.
* At **step 4**, add a ``--qt5`` argument to the ``ccb.py`` command line.
@ -272,14 +287,27 @@ First, install or check that the required prerequisites are installed:
.. code-block:: sh
dummy@lepka:~> sudo apt install -y build-essential binutils-dev \
git cmake bison flex gcc python-dev \
libboost-all-dev libboost-python-dev \
libbz2-dev libxml2-dev rapidjson-dev libbz2-dev \
qt4-dev-tools libqwt5-qt4-dev \ # Qt 4
qtbase5-dev libqt5svg5-dev libqwt-qt5-dev \ # Qt 5
doxygen dvipng graphviz python-sphinx \
texlive-fonts-extra texlive-lang-french
dummy@lepka:~> sudo apt-get install -y build-essential binutils-dev \
git cmake bison flex gcc python-dev \
libboost-all-dev libboost-python-dev \
zlib1g-dev libxml2-dev rapidjson-dev libbz2-dev
To use with Qt 4:
.. code-block:: sh
dummy@lepka:~> sudo apt-get install -y qt4-dev-tools libqwt-dev python-qt4
To use with Qt 5:
.. code-block:: sh
dummy@lepka:~> sudo apt-get install -y qtbase5-dev libqt5svg5-dev libqwt-qt5-dev \
python-pyqt5
.. note:: **Do not install both versions of Qwt** (for Qt 4 and Qt 5),
this will confuse the installer and end up with a non functional software
(it uses the headers from one Qt and libraries from the other version).
Second step is to create the source directory and pull the |git| repository:
@ -318,6 +346,26 @@ the system.
Then proceed with the generic install instructions.
|Coriolis| & Docker
~~~~~~~~~~~~~~~~~~~
Under ``bootstrap/docker/`` scripts and configuration files are provided that
allow to rebuild |Alliance| and |Coriolis| and perform the regression tests
of ``alliance-check-toolkit``. You may have a look at the ``Dockerfile.system``
configuration file to see exactly how to setup a vanilla system to build
|Coriolis|.
To run the docker tests, call the ``dockerManage.sh`` scripts with the relevant
arguments:
.. code-block:: sh
ego@home:debian-9> ../../dockerManage.sh -bS # build both system & coriolis images.
ego@home:debian-9> ../../dockerManage.sh -r # compile & check coriolis.
ego@home:debian-9> ../../dockerManage.sh -C # clear the images.
Packaging Coriolis
~~~~~~~~~~~~~~~~~~

Binary file not shown.

View File

@ -62,6 +62,9 @@
.. |Blif| replace:: :sc:`blif`
.. |TSMC| replace:: :sc:`tsmc`
.. |AMS| replace:: :sc:`ams`
.. |XFAB| replace:: :sc:`xfab`
.. |XH035| replace:: :cb:`XH035`
.. |ROHM| replace:: :sc:`rohm`
.. |Alexandre| replace:: :sc:`Alexandre`
.. |Belloeil| replace:: :sc:`Belloeil`
@ -77,14 +80,19 @@
.. |Yifei| replace:: :sc:`Yifei`
.. |Mead| replace:: :sc:`Mead`
.. |Conway| replace:: :sc:`Conway`
.. |Petley| replace:: :sc:`Petley`
.. |FloresGomez| replace:: :sc:`Flores Gomez`
.. |SNX| replace:: :sc:`snx`
.. |ASIC| replace:: :sc:`asic`
.. |EDA| replace:: :sc:`eda`
.. |RTL| replace:: :sc:`rtl`
.. |HSL| replace:: :sc:`hsl`
.. |FHS| replace:: :sc:`fhs`
.. |IEEE| replace:: :sc:`ieee`
.. |ANSI| replace:: :sc:`ansi`
.. |MIPS| replace:: :sc:`mips`
.. |Pharosc| replace:: :sc:`Pharosc`
.. |Am2901| replace:: :sc:`Am2901`
.. |CAIRO| replace:: :sc:`cairo`
.. |CAIRO+| replace:: :sc:`cairo+`
@ -143,6 +151,8 @@
.. |gdb| replace:: :cb:`gdb`
.. |valgrind| replace:: :cb:`valgrind`
.. |cmake| replace:: :cb:`cmake`
.. |bison| replace:: :cb:`bison`
.. |flex| replace:: :cb:`flex`
.. |struct| replace:: :cb:`struct`
.. |KeyUp| replace:: :fboxtt:`Up`

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="./favicon.ico">
<title> - Coriolis VLSI CAD Tools</title>
<title> - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="./theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="./pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="./pages/gitlab.html">Git</a>
@ -131,6 +131,7 @@
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="./favicon.ico">
<title> - Coriolis VLSI CAD Tools</title>
<title> - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="./theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="./pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="./pages/gitlab.html">Git</a>
@ -128,6 +128,7 @@
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="./favicon.ico">
<title> - Coriolis VLSI CAD Tools</title>
<title> - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="./theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="./pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="./pages/gitlab.html">Git</a>
@ -128,6 +128,7 @@
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -4,11 +4,11 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Coriolis VLSI CAD Tools, ">
<meta name="description" content="Coriolis VLSI CAD Tools [offline], ">
<meta name="keywords" content="">
<link rel="icon" href="./favicon.ico">
<title> - Coriolis VLSI CAD Tools</title>
<title> - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="./theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="./pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="./pages/gitlab.html">Git</a>
@ -224,6 +224,7 @@ needs a configuration file suited for the target technology, and <em>that</em> f
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -0,0 +1,458 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Contents About Alliance Circuit Designed with Alliance Useful Links Installing Alliance from a Distribution Fedora Ubuntu LTS 18.04 Rebuild From Source (Git) Debian 9 &amp; Ubuntu 18 RHEL, CentOS, Fedora ...">
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Alliance VLSI/CAD System - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
<link href="../theme/css/fonts.css" rel="stylesheet">
<link href="../theme/css/nest.css" rel="stylesheet">
<link href="../theme/css/pygment.css" rel="stylesheet">
<link href="../theme/css/coriolis.css" rel="stylesheet">
<!-- /Stylesheets -->
<script src="../theme/js/jquery.min.js"></script>
<script src="../theme/js/bootstrap.min.js"></script>
<!-- RSS Feeds -->
<!-- /RSS Feeds -->
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- Header -->
<div class="header-container" style="background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)), url('../images/common/layout-motif-faded-4.png'); background-position: center; ">
<!--
<div class="container">
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
<li><a href="../pages/documentation.html">Documentation</a></li>
<li class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span class="caret"></span>Topics
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item " href="../pages/homepage.html">Coriolis <span class="sc">vlsi</span> Backend Tools</a></li>
<li><a class="dropdown-item " href="../pages/symbolic-layout.html">Symbolic Layout</a></li>
</ul>
</li>
</ul>
</div>
</nav>
</div> <!-- navbar container -->
-->
<!-- Static navbar -->
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
<a href="../pages/documentation.html">Documentation</a>
</div>
<div class="nav pull-right">
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<span class="caret"></span>Topics
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item " href="../pages/homepage.html">Coriolis <span class="sc">vlsi</span> Backend Tools</a></li>
<li><a class="dropdown-item " href="../pages/symbolic-layout.html">Symbolic Layout</a></li>
</ul>
</div>
</div>
</div>
</div>
<!-- /Static navbar -->
<!-- Header -->
<div class="container header-wrapper">
<div class="row">
<div class="col-lg-12">
<div class="header-content">
<a href="https://www.lip6.fr/"><img class="mr20" height="60px" src="../images/common/LogoLIP6Blanc.png" alt="LIP6"></a>
<a href="https://www.sorbonne-universite.fr/"><img class="mr20" height="60px" src="../images/common/logo-SU-blanc-700px.png" alt="Sorbonne Universite"></a>
<a href="https://www.cnrs.fr/"><img class="mr20" height="60px" src="../images/common/LOGO-cnrs-white-large.png" alt="CNRS"></a>
<h1 class="header-title text-uppercase">Alliance VLSI/CAD System</h1>
<div class="header-underline"></div>
</div>
</div>
</div>
</div>
<!-- /Header -->
</div>
<!-- /Header -->
<!-- Content -->
<div class="container content">
<!-- -*- Mode: rst -*- -->
<!-- URLs that changes between the various backends. -->
<!-- For HTML backend -->
<div class="contents topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#about-alliance" id="id2">About Alliance</a><ul>
<li><a class="reference internal" href="#circuit-designed-with-alliance" id="id3">Circuit Designed with Alliance</a></li>
<li><a class="reference internal" href="#useful-links" id="id4">Useful Links</a></li>
</ul>
</li>
<li><a class="reference internal" href="#installing-alliance-from-a-distribution" id="id5">Installing <span class="sc">Alliance</span> from a Distribution</a><ul>
<li><a class="reference internal" href="#fedora" id="id6">Fedora</a></li>
<li><a class="reference internal" href="#ubuntu-lts-18-04" id="id7">Ubuntu LTS 18.04</a></li>
</ul>
</li>
<li><a class="reference internal" href="#rebuild-from-source-git" id="id8">Rebuild From Source (Git)</a><ul>
<li><a class="reference internal" href="#debian-9-ubuntu-18" id="id9">Debian 9 &amp; Ubuntu 18</a></li>
<li><a class="reference internal" href="#rhel-centos-fedora" id="id10">RHEL, CentOS, Fedora</a></li>
</ul>
</li>
</ul>
</div>
<!-- -*- Mode: rst; explicit-buffer-name: "definition.rst<documentation/etc>" -*- -->
<!-- HTML/LaTeX backends mixed macros. -->
<!-- Acronyms & names. -->
<!-- URLs -->
<!-- Standard CAO/VLSI Concepts. -->
<!-- Alliance & MBK Concepts -->
<!-- Hurricane Concepts. -->
<!-- -*- Mode: rst -*- -->
<div class="section" id="about-alliance">
<h2><a class="toc-backref" href="#id2">About Alliance</a></h2>
<div class="section" id="circuit-designed-with-alliance">
<h3><a class="toc-backref" href="#id3">Circuit Designed with Alliance</a></h3>
<ul class="simple">
<li><a class="reference external" href="http://www.smartlabsinc.com/">Smartlabs</a>/Smarthome designed a complete circuit in the <span class="sc">xfab</span> <span class="cb">XH035</span> technology
(2014).</li>
<li><a class="reference external" href="http://www.u-tokai.ac.jp/international/">Tokai University</a> (<a class="reference external" href="http://labo.nshimizu.com/">Shimizu Lab</a>) designed the <span class="sc">snx</span>, a 16 bits processor in
the <span class="sc">rohm</span> 0.18µm (2010).</li>
</ul>
<p>Those are circuits that we know of because their designers were kind enough to inform
us (it is not comprehensive).</p>
</div>
<div class="section" id="useful-links">
<h3><a class="toc-backref" href="#id4">Useful Links</a></h3>
<ul class="simple">
<li>Improved Standard Cell libraries and documentation on how to design them,
by Graham <span class="sc">Petley</span>: <a class="reference external" href="http://www.vlsitechnology.org/">VLSI Technology</a></li>
<li>A book presenting <span class="sc">Alliance</span> in depth:
<a class="reference external" href="http://www.cc.toin.ac.jp/sc/palacios/openbook/vlsie.pdf">Introduction to VLSI CMOS Circuits design</a>
by Carlos Silva <span class="sc">Cardenas</span>, Takeo <span class="sc">Yoshida</span> &amp; Alberto Palacios <span class="sc">Pawlovsky</span>.</li>
<li>For spanish locutors, a set of tutorials made by Miguel Eduardo <span class="sc">Flores Gomez</span>
from <a class="reference external" href="http://www.udb.edu.sv/">Don Bosco University</a>:
<a class="reference external" href="http://microelectronicdesignandsimulation.blogspot.com/2015/10/tutoriales-de-alliance-vlsi.html">Tutorial de Alliance</a></li>
</ul>
</div>
</div>
<div class="section" id="installing-alliance-from-a-distribution">
<h2><a class="toc-backref" href="#id5">Installing <span class="sc">Alliance</span> from a Distribution</a></h2>
<p>Binary packages are avalaibles for the following distributions:</p>
<ul class="simple">
<li>Fedora</li>
<li>Ubuntu LTS</li>
<li>MacOS X, through <a class="reference external" href="https://www.macports.org/">MacPorts</a></li>
</ul>
<div class="section" id="fedora">
<h3><a class="toc-backref" href="#id6">Fedora</a></h3>
<ol class="arabic">
<li><p class="first">Pull &amp; install the packages from the repository:</p>
<div class="highlight"><pre><span></span>root@home:~# yum install alliance alliance-libs alliance-doc
</pre></div>
<p>That's all folks. <span class="sc">Alliance</span> is ready to use.</p>
</li>
</ol>
<div class="note">
<p class="first admonition-title">Note</p>
<p>With the packaged version of <span class="sc">Alliance</span>, files and directories are not at
the same places as in the default install. They have been made compliant
with the <span class="sc">fhs</span>.</p>
<table class="table">
<colgroup>
<col width="44%" />
<col width="56%" />
</colgroup>
<tbody valign="top">
<tr><td><strong>binaries</strong></td>
<td>/usr/lib/alliance/bin</td>
</tr>
<tr><td><strong>cell libraries</strong></td>
<td>/usr/share/alliance/cells</td>
</tr>
<tr><td><strong>man pages</strong></td>
<td>/usr/share/alliance/man</td>
</tr>
<tr><td><strong>tutorials &amp; examples</strong></td>
<td>/usr/share/doc/alliance-5.0/</td>
</tr>
</tbody>
</table>
<p class="last">Environment variables should be automatically set.</p>
</div>
</div>
<div class="section" id="ubuntu-lts-18-04">
<h3><a class="toc-backref" href="#id7">Ubuntu LTS 18.04</a></h3>
<p><span class="sc">Alliance</span> is available in the <a class="reference external" href="http://packages.ubuntu.com/bionic/alliance">Ubuntu Universe repository</a>,
you may install it with the package manager.</p>
<blockquote>
<div class="highlight"><pre><span></span>ego@home:~&gt; sudo apt-get install alliance
</pre></div>
</blockquote>
<p>Before using it, you must source the environment (in each terminal
you want to use <span class="sc">Alliance</span>):</p>
<div class="highlight"><pre><span></span>ego@home:~&gt; . /etc/alliance/profile.d/alc_env.sh
</pre></div>
</div>
</div>
<div class="section" id="rebuild-from-source-git">
<h2><a class="toc-backref" href="#id8">Rebuild From Source (Git)</a></h2>
<p>If binary packages are not avalaibles for your distribution, you may want
to rebuild <span class="sc">Alliance</span> from source. To perform this, be aware that you must
have at least a basic knowlegde of how to build a C/C++ program from source.
Sources are available through the following <span class="cb">git</span> repository:</p>
<blockquote>
<a class="reference external" href="https://gitlab.lip6.fr/jpc/alliance.git">https://gitlab.lip6.fr/jpc/alliance.git</a></blockquote>
<p>The stable version is under the branch <span class="cb">master</span>, while the development
is kept under <span class="cb">devel</span> (and will be merged into <span class="cb">master</span> from time
to time...)</p>
<p>In order to recompile, you will need to install the development tools in
your system. The main ones are listed below.</p>
<table class="table">
<colgroup>
<col width="21%" />
<col width="44%" />
<col width="35%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head" colspan="3">Build Dependencies</th>
</tr>
<tr><th class="head">Software</th>
<th class="head">RHEL, CentOS, Scientific Linux &amp; Fedora</th>
<th class="head">Debian/Ubuntu</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Basic devel tools</td>
<td>&quot;Development tools&quot; (group)</td>
<td><cite>build-essential</cite></td>
</tr>
<tr><td>Version system</td>
<td><cite>git</cite></td>
<td><cite>git</cite></td>
</tr>
<tr><td>GCC/G++ compiler</td>
<td><cite>gcc</cite>, <cite>g++</cite></td>
<td><cite>gcc</cite>, <cite>g++</cite></td>
</tr>
<tr><td>Autotools</td>
<td><cite>autoconf</cite>, <cite>automake</cite>
<cite>libtool</cite></td>
<td><cite>autotool-dev</cite>, <cite>automake</cite>
<cite>libtool</cite></td>
</tr>
<tr><td>Parser (yacc&amp;lex)</td>
<td><cite>bison</cite>, <cite>flex</cite></td>
<td><cite>bison</cite>, <cite>flex</cite></td>
</tr>
<tr><td>X11 libraries</td>
<td><cite>libX11-devel</cite>, <cite>libXt-devel</cite>,
<cite>libXpm-devel</cite>,
<cite>motif</cite>, <cite>motif-devel</cite></td>
<td><cite>libx11-dev</cite>, <cite>libxt-dev</cite>
<cite>libxpm-dev</cite>
<cite>libmotif-dev</cite></td>
</tr>
<tr><td>Graphics</td>
<td><cite>xfig</cite>, <cite>ImageMagick</cite></td>
<td><cite>xfig</cite>, <cite>ImageMagick</cite></td>
</tr>
<tr><td>Text Processing</td>
<td><cite>texlive</cite></td>
<td><cite>texlive</cite>, <cite>texlive-pictures</cite>,
<cite>texlive-latex-extra</cite></td>
</tr>
</tbody>
</table>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">Before running the <span class="cb">autotools</span>, you have to run the <span class="cb">autostuff</span>
script in <tt class="docutils literal">./alliance/src</tt> which generate the top-level automake files.</p>
</div>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">If you happen to have forgotten one of the dependency and have to
install it after running <cite>configure</cite>, please remove the <em>whole</em>
build directory tree and re-run <cite>configure</cite>. The same rule applies
if you switch from static libraries to dynamic ones.</p>
</div>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Do not build in parallel</strong>, always uses <tt class="docutils literal"><span class="pre">-j1</span></tt>, the build process
fail in strange ways when run in parallel (this is a known problem
due to the way Alliance was developped).</p>
</div>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Bison/Flex</strong> versions. Alliance is very sensitive to the versions
of thoses programs. The reference OSes for the build are <span class="sc">Scientific Linux</span>
6 &amp; 7, which supplies <span class="cb">bison</span> 2.4.1 and 2.7 (resp.), <span class="cb">flex</span> 2.5.35 and
2.5.37 (resp.).</p>
</div>
<div class="section" id="debian-9-ubuntu-18">
<h3><a class="toc-backref" href="#id9">Debian 9 &amp; Ubuntu 18</a></h3>
<p>In this example we show the case where <span class="sc">Alliance</span> is installed in the user's home
directory alongside with <span class="sc">Coriolis</span>.</p>
<ol class="arabic">
<li><p class="first">Dependencies installation:</p>
<div class="highlight"><pre><span></span>ego@home:~&gt; sudo apt-get install build-essential binutils-dev <span class="se">\</span>
git cmake bison flex gcc python-dev <span class="se">\</span>
autotools-dev automake <span class="se">\</span>
libxt-dev libxpm-dev libmotif-dev
</pre></div>
</li>
<li><p class="first">Getting the sources (cloning the <span class="cb">git</span> repository):</p>
<div class="highlight"><pre><span></span>ego@home:~&gt; mkdir -p coriolis-2.x/src
ego@home:~&gt; <span class="nb">cd</span> coriolis-2.x/src
ego@home:src&gt; git clone https://gitlab.lip6.fr/jpc/alliance.git
</pre></div>
</li>
<li><p class="first">Compilation &amp; installation. For that step, you can use the following shell
script.</p>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>The commonRoot variable</strong>, the <tt class="docutils literal">/Linux.x86_64/</tt> component of
the path is dependent on the <span class="sc">os</span> you are using. It is determined
by looking to the kernel version as returned by <tt class="docutils literal">uname <span class="pre">-srm</span></tt>.
In the following script, it has been set to what is choosen by the
<span class="sc">Coriolis</span> installer <tt class="docutils literal">ccb.py</tt> for <span class="sc">Ubuntu</span>.</p>
</div>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">srcDir</span><span class="o">=</span><span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/coriolis-2.x/src/alliance/alliance/src
<span class="nv">commonRoot</span><span class="o">=</span><span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/coriolis-2.x/Linux.x86_64/Release.Shared
<span class="nv">buildDir</span><span class="o">=</span><span class="si">${</span><span class="nv">commonRoot</span><span class="si">}</span>/build
<span class="nv">installDir</span><span class="o">=</span><span class="si">${</span><span class="nv">commonRoot</span><span class="si">}</span>/install
<span class="nb">export</span> <span class="nv">ALLIANCE_TOP</span><span class="o">=</span><span class="si">${</span><span class="nv">installDir</span><span class="si">}</span>
<span class="nb">export</span> <span class="nv">LD_LIBRARY_PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">installDir</span><span class="si">}</span>/lib:<span class="si">${</span><span class="nv">LD_LIBRARY_PATH</span><span class="si">}</span>
<span class="nb">cd</span> <span class="si">${</span><span class="nv">srcDir</span><span class="si">}</span>
<span class="c1"># Skip doc generation to avoid pulling TeXLive in docker images.</span>
<span class="c1">#sed -i &#39;s,dirs=&quot;\$newdirs documentation&quot;,dirs=&quot;$newdirs&quot;,&#39; ./autostuff</span>
./autostuff clean
./autostuff
mkdir -p <span class="si">${</span><span class="nv">buildDir</span><span class="si">}</span>
<span class="nb">cd</span> <span class="si">${</span><span class="nv">buildDir</span><span class="si">}</span>
<span class="si">${</span><span class="nv">srcDir</span><span class="si">}</span>/configure --prefix<span class="o">=</span><span class="si">${</span><span class="nv">ALLIANCE_TOP</span><span class="si">}</span> --enable-alc-shared
make -j1 install
</pre></div>
</li>
</ol>
</div>
<div class="section" id="rhel-centos-fedora">
<h3><a class="toc-backref" href="#id10">RHEL, CentOS, Fedora</a></h3>
<p>The procedure is very similar as the one for Debian/Ubuntu, except for the
package manager step and the <strong>commonRoot</strong> variable value, which is set
to <tt class="docutils literal">/Linux.SL7_64/</tt> (RHEL, CentOS &amp; Scientific Linux)
or <tt class="docutils literal">/Linux.fc_64/</tt> (Fedora).</p>
<ol class="arabic">
<li><p class="first">Dependencies installation:</p>
<div class="highlight"><pre><span></span>root@home:~&gt; yum install git cmake bison flex gcc-c++ libstdc++-devel <span class="se">\</span>
make binutils-devel <span class="se">\</span>
autoconf automake libtool <span class="se">\</span>
libX11-devel libXt-devel libXpm-devel <span class="se">\</span>
motif motif-devel <span class="se">\</span>
</pre></div>
</li>
<li><p class="first">Getting the sources (cloning the <span class="cb">git</span> repository):</p>
<div class="highlight"><pre><span></span>ego@home:~&gt; mkdir -p coriolis-2.x/src
ego@home:~&gt; <span class="nb">cd</span> coriolis-2.x/src
ego@home:src&gt; git clone https://gitlab.lip6.fr/jpc/alliance.git
</pre></div>
</li>
<li><p class="first">Compilation &amp; installation. For that step, you can use the following shell
script.</p>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="nv">srcDir</span><span class="o">=</span><span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/coriolis-2.x/src/alliance/alliance/src
<span class="nv">commonRoot</span><span class="o">=</span><span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/coriolis-2.x/Linux.SL7_64/Release.Shared
<span class="nv">buildDir</span><span class="o">=</span><span class="si">${</span><span class="nv">commonRoot</span><span class="si">}</span>/build
<span class="nv">installDir</span><span class="o">=</span><span class="si">${</span><span class="nv">commonRoot</span><span class="si">}</span>/install
<span class="nb">export</span> <span class="nv">ALLIANCE_TOP</span><span class="o">=</span><span class="si">${</span><span class="nv">installDir</span><span class="si">}</span>
<span class="nb">export</span> <span class="nv">LD_LIBRARY_PATH</span><span class="o">=</span><span class="si">${</span><span class="nv">installDir</span><span class="si">}</span>/lib:<span class="si">${</span><span class="nv">LD_LIBRARY_PATH</span><span class="si">}</span>
<span class="nb">cd</span> <span class="si">${</span><span class="nv">srcDir</span><span class="si">}</span>
<span class="c1"># Skip doc generation to avoid pulling TeXLive in docker images.</span>
<span class="c1">#sed -i &#39;s,dirs=&quot;\$newdirs documentation&quot;,dirs=&quot;$newdirs&quot;,&#39; ./autostuff</span>
./autostuff clean
./autostuff
mkdir -p <span class="si">${</span><span class="nv">buildDir</span><span class="si">}</span>
<span class="nb">cd</span> <span class="si">${</span><span class="nv">buildDir</span><span class="si">}</span>
<span class="si">${</span><span class="nv">srcDir</span><span class="si">}</span>/configure --prefix<span class="o">=</span><span class="si">${</span><span class="nv">ALLIANCE_TOP</span><span class="si">}</span> --enable-alc-shared
make -j1 install
</pre></div>
</li>
</ol>
</div>
</div>
</div>
<!-- /Content -->
<!-- Footer -->
<div class="footer gradient-2">
<div class="container footer-container ">
<div class="row">
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Social</div>
<ul class="list-unstyled">
</ul>
</div>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-2">
</div>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>
</div>
<div class="col-xs-12 col-sm-3 col-md-3 col-lg-4">
<p class="pull-right text-right">
<small><em>Proudly powered by <a href="http://docs.getpelican.com/" target="_blank">pelican</a></em></small><br/>
<small><em><span class="sc">NEST</span> theme by <a href="https://github.com/molivier" target="_blank">molivier</a></em></small><br/>
<small>Copyright © 2020-2020 Sorbonne Universite</small>
</p>
</div>
</div>
</div>
</div>
<!-- /Footer -->
</body>
</html>

View File

@ -4,11 +4,11 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Coriolis Documentation Coriolis User&#39;s Guide Using the software Python Tutorial A Tutorial to use Coriolis through Python Python/C++ Tutorial A Tutorial to the Python/C++ interface api Stratus ...">
<meta name="description" content="Alliance Documentation Alliance Installation How to get, build &amp; install Alliance alongside Coriolis Coriolis Documentation Coriolis User&#39;s Guide Using the software Python Tutorial A Tutorial to use ...">
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Documentation - Coriolis VLSI CAD Tools</title>
<title>Documentation - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -119,6 +119,14 @@
<!-- Standard CAO/VLSI Concepts. -->
<!-- Alliance & MBK Concepts -->
<!-- Hurricane Concepts. -->
<div class="section" id="alliance-documentation">
<h2>Alliance Documentation</h2>
<div class="row">
<div class="col-md-5 col-md-offset-1">
<a class="reference external" href="../pages/alliance.html">Alliance Installation</a> <span class="raw-html"><br/></span>
How to get, build &amp; install Alliance alongside Coriolis</div>
</div>
</div>
<div class="section" id="coriolis-documentation">
<h2>Coriolis Documentation</h2>
<div class="row">
@ -192,6 +200,7 @@ Cadence Documentation of DEF 5.8 C++ API</p>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Gitlab Repositories - Coriolis VLSI CAD Tools</title>
<title>Gitlab Repositories - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -160,6 +160,7 @@
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Coriolis <span class="sc">vlsi</span> Backend Tools - Coriolis VLSI CAD Tools</title>
<title>Coriolis <span class="sc">vlsi</span> Backend Tools - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -217,6 +217,7 @@ needs a configuration file suited for the target technology, and <em>that</em> f
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Hurricane Python/C++ API Tutorial - Coriolis VLSI CAD Tools</title>
<title>Hurricane Python/C++ API Tutorial - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -1282,6 +1282,7 @@ the <tt class="docutils literal"><span class="pre">DbU::Unit</span>&nbsp; PyAny_
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Hurricane+Python Tutorial - Coriolis VLSI CAD Tools</title>
<title>Hurricane+Python Tutorial - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -1436,6 +1436,7 @@ go through all the components of a trans-hierarchical net.</p>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>RDS / Symbolic to Real Conversion - Coriolis VLSI CAD Tools</title>
<title>RDS / Symbolic to Real Conversion - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -622,6 +622,7 @@ END
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Stratus : Developper's Documentation - Coriolis VLSI CAD Tools</title>
<title>Stratus : Developper's Documentation - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -413,6 +413,7 @@ by default)</li>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Stratus : Datapath Generators - Coriolis VLSI CAD Tools</title>
<title>Stratus : Datapath Generators - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -3455,6 +3455,7 @@ class inst_sfft ( Model ) :
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Stratus : Netlist Capture Language - Coriolis VLSI CAD Tools</title>
<title>Stratus : Netlist Capture Language - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -2562,6 +2562,7 @@ The mapping file is not given in the environment variable.</li>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Stratus : Simulation Patterns - Coriolis VLSI CAD Tools</title>
<title>Stratus : Simulation Patterns - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -374,6 +374,7 @@ def Pattern(self):
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Symbolic Layout - Coriolis VLSI CAD Tools</title>
<title>Symbolic Layout - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -235,6 +235,7 @@ Reading, Mass.: Addison-Wesley. ISBN 0201043580. OCLC 4641561</td></tr>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -4,11 +4,11 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Contents Credits &amp; License Complete Design Flow &amp; Examples Installation Fixed Directory Tree Building Coriolis Packaging Coriolis Hooking up into Alliance Setting up the Environment (coriolisEnv.py) ...">
<meta name="description" content="Contents Credits &amp; License Complete Design Flow &amp; Examples Installation Fixed Directory Tree Building Coriolis Coriolis &amp; Docker Packaging Coriolis Hooking up into Alliance Setting up the Environment ...">
<meta name="keywords" content="">
<link rel="icon" href="../favicon.ico">
<title>Coriolis User's Guide - Coriolis VLSI CAD Tools</title>
<title>Coriolis User's Guide - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="../theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="../pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="../pages/gitlab.html">Git</a>
@ -117,19 +117,20 @@
<div class="contents topic" id="contents">
<p class="topic-title first">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#credits-license" id="id12">Credits &amp; License</a></li>
<li><a class="reference internal" href="#complete-design-flow-examples" id="id13">Complete Design Flow &amp; Examples</a></li>
<li><a class="reference internal" href="#installation" id="id14">Installation</a><ul>
<li><a class="reference internal" href="#fixed-directory-tree" id="id15">Fixed Directory Tree</a></li>
<li><a class="reference internal" href="#building-coriolis" id="id16">Building Coriolis</a></li>
<li><a class="reference internal" href="#packaging-coriolis" id="id17">Packaging Coriolis</a></li>
<li><a class="reference internal" href="#hooking-up-into-alliance" id="id18">Hooking up into <span class="sc">Alliance</span></a></li>
<li><a class="reference internal" href="#setting-up-the-environment-coriolisenv-py" id="id19">Setting up the Environment (coriolisEnv.py)</a></li>
<li><a class="reference internal" href="#credits-license" id="id13">Credits &amp; License</a></li>
<li><a class="reference internal" href="#complete-design-flow-examples" id="id14">Complete Design Flow &amp; Examples</a></li>
<li><a class="reference internal" href="#installation" id="id15">Installation</a><ul>
<li><a class="reference internal" href="#fixed-directory-tree" id="id16">Fixed Directory Tree</a></li>
<li><a class="reference internal" href="#building-coriolis" id="id17">Building Coriolis</a></li>
<li><a class="reference internal" href="#coriolis-docker" id="id18"><span class="sc">Coriolis</span> &amp; Docker</a></li>
<li><a class="reference internal" href="#packaging-coriolis" id="id19">Packaging Coriolis</a></li>
<li><a class="reference internal" href="#hooking-up-into-alliance" id="id20">Hooking up into <span class="sc">Alliance</span></a></li>
<li><a class="reference internal" href="#setting-up-the-environment-coriolisenv-py" id="id21">Setting up the Environment (coriolisEnv.py)</a></li>
</ul>
</li>
<li><a class="reference internal" href="#cgt-the-graphical-interface" id="id20">CGT - The Graphical Interface</a><ul>
<li><a class="reference internal" href="#id3" id="id21">Viewer &amp; Tools</a></li>
<li><a class="reference internal" href="#id4" id="id22">The Controller</a></li>
<li><a class="reference internal" href="#cgt-the-graphical-interface" id="id22">CGT - The Graphical Interface</a><ul>
<li><a class="reference internal" href="#id4" id="id23">Viewer &amp; Tools</a></li>
<li><a class="reference internal" href="#id5" id="id24">The Controller</a></li>
</ul>
</li>
</ul>
@ -153,7 +154,7 @@ is currently under development.</li>
<!-- to get and build the toolchain. -->
<!-- -*- Mode: rst -*- -->
<div class="section" id="credits-license">
<h2><a class="toc-backref" href="#id12">Credits &amp; License</a></h2>
<h2><a class="toc-backref" href="#id13">Credits &amp; License</a></h2>
<table style="border: none; width: 80%; align: center; margin-left: auto; margin-right: auto; font-size: 110%">
<tr>
<td style="text-align: left" ><span><span class="sc">Hurricane</span></span></td>
@ -191,7 +192,7 @@ copyright© Chris C. N. <span class="sc">Chu</span> from the Iowa State Universi
<p></p>
</div>
<div class="section" id="complete-design-flow-examples">
<h2><a class="toc-backref" href="#id13">Complete Design Flow &amp; Examples</a></h2>
<h2><a class="toc-backref" href="#id14">Complete Design Flow &amp; Examples</a></h2>
<p>While <span class="sc">Coriolis</span> can be used stand-alone, it is in fact part of a more complete
design flow build upon <span class="sc">Yosys</span> and <span class="sc">Alliance</span>. In addition, a set of demos and
examples are supplied in the repository <tt class="docutils literal"><span class="pre">alliance-check-toolkit</span></tt>.</p>
@ -209,7 +210,7 @@ examples are supplied in the repository <tt class="docutils literal"><span class
<!-- -*- Mode: rst -*- -->
</div>
<div class="section" id="installation">
<h2><a class="toc-backref" href="#id14">Installation</a></h2>
<h2><a class="toc-backref" href="#id15">Installation</a></h2>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last">As the sources are being released, the binary packaging is dropped.
@ -237,13 +238,14 @@ If you really want to re-generate it, add the <tt class="docutils literal"><span
<li>yacc &amp; lex</li>
<li>Qt 4 or Qt 5</li>
<li>PyQt 4 or PyQt 5</li>
<li>Qwt</li>
<li>Qwt 6</li>
</ul>
<p>Building documentation prerequisites:</p>
<ul class="simple">
<li>doxygen</li>
<li>latex</li>
<li>python-docutils (for reStructuredText)</li>
<li>pelican</li>
</ul>
<p>The following libraries get directly bundled with <span class="sc">Coriolis</span>:</p>
<ul class="simple">
@ -252,7 +254,7 @@ If you really want to re-generate it, add the <tt class="docutils literal"><span
</ul>
<p>For other distributions, refer to their own packaging system.</p>
<div class="section" id="fixed-directory-tree">
<h3><a class="toc-backref" href="#id15">Fixed Directory Tree</a></h3>
<h3><a class="toc-backref" href="#id16">Fixed Directory Tree</a></h3>
<p>In order to simplify the work of the <span class="cb">ccb</span> installer, the source, build
and installation tree is fixed. To successfully compile <span class="sc">Coriolis</span> you must
follow it exactly. The tree is relative to the home directory of the user
@ -345,7 +347,7 @@ and Python modules (which must be dynamic).</p>
</div>
</div>
<div class="section" id="building-coriolis">
<h3><a class="toc-backref" href="#id16">Building Coriolis</a></h3>
<h3><a class="toc-backref" href="#id17">Building Coriolis</a></h3>
<div class="section" id="the-actively-developed-branch">
<h4>The actively developed branch</h4>
<p>The <strong>devel_anabatic</strong> branch is now closed and we go back to a more classical
@ -379,11 +381,24 @@ system <span class="sc">qt</span> again.</p>
boost-devel boost-python boost-filesystem <span class="se">\</span>
boost-regex boost-wave <span class="se">\</span>
python-devel libxml2-devel bzip2-devel <span class="se">\</span>
qt-devel qwt-devel <span class="c1"># Qt 4</span>
qt-devel
</pre></div>
<p>Note, that the <tt class="docutils literal">Qwt</tt> packages are directly available from the standart distribution
when using <span class="sc">qt</span> 4.</p>
</li>
</ol>
<blockquote>
<p>The packages <tt class="docutils literal">qwt</tt> and <tt class="docutils literal"><span class="pre">qwt-devel</span></tt> are not provided by any standard repository
(like <span class="sc">epel</span>). You may download them from the
<a class="reference external" href="https://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/repoview/letter_q.group.html">LIP6 Addons Repository</a>
Then run:</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; yum localinstall -y qwt-6.1.2-4.fc23.x86_64.rpm <span class="se">\</span>
qwt-devel-6.1.2-4.fc23.x86_64.rpm <span class="c1"># Qwt for Qt 4.</span>
</pre></div>
<p>You may also install them directly (whithout an intermediate download):</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; yum install -y http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/qwt-6.1.2-4.fc23.x86_64.rpm <span class="se">\</span>
http://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/RPMS/qwt-devel-6.1.2-4.fc23.x86_64.rpm
</pre></div>
</blockquote>
<ol class="arabic" start="2">
<li><p class="first">Install the unpackaged prerequisites. Currently, only <a class="reference external" href="http://miloyip.github.io/rapidjson/">RapidJSON</a>.</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; mkdir -p ~/coriolis-2.x/src/support
dummy@lepka:support&gt; <span class="nb">cd</span> ~/coriolis-2.x/src/support
@ -432,8 +447,8 @@ but instead:</p>
by any standard repository (like <span class="sc">epel</span>). You may download them from the
<a class="reference external" href="https://ftp.lip6.fr/pub/linux/distributions/slsoc/soc/7/addons/x86_64/repoview/letter_q.group.html">LIP6 Addons Repository</a>
Then run:</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; yum localinstall -y qwt-qt5-6.1.2-4.fc23.x86_64.rpm <span class="se">\</span>
qwt-qt5-6.1.2-4.fc23.x86_64.rpm <span class="c1"># Qwt for Qt 5.</span>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; yum localinstall -y qwt-qt5-6.1.2-4.fc23.x86_64.rpm <span class="se">\</span>
qwt-qt5-devel-6.1.2-4.fc23.x86_64.rpm <span class="c1"># Qwt for Qt 5.</span>
</pre></div>
</li>
<li><p class="first">At <strong>step 4</strong>, add a <tt class="docutils literal"><span class="pre">--qt5</span></tt> argument to the <tt class="docutils literal">ccb.py</tt> command line.</p>
@ -483,15 +498,24 @@ a debug one which allows forensic examination by <span class="cb">gdb</span> (or
<div class="section" id="installing-on-debian-9-ubuntu-18-or-compatible-distributions">
<h4>Installing on <span class="sc">Debian</span> 9, <span class="sc">Ubuntu</span> 18 or compatible distributions</h4>
<p>First, install or check that the required prerequisites are installed:</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; sudo apt install -y build-essential binutils-dev <span class="se">\</span>
git cmake bison flex gcc python-dev <span class="se">\</span>
libboost-all-dev libboost-python-dev <span class="se">\</span>
libbz2-dev libxml2-dev rapidjson-dev libbz2-dev <span class="se">\</span>
qt4-dev-tools libqwt5-qt4-dev <span class="se">\ </span><span class="c1"># Qt 4</span>
qtbase5-dev libqt5svg5-dev libqwt-qt5-dev <span class="se">\ </span><span class="c1"># Qt 5</span>
doxygen dvipng graphviz python-sphinx <span class="se">\</span>
texlive-fonts-extra texlive-lang-french
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; sudo apt-get install -y build-essential binutils-dev <span class="se">\</span>
git cmake bison flex gcc python-dev <span class="se">\</span>
libboost-all-dev libboost-python-dev <span class="se">\</span>
zlib1g-dev libxml2-dev rapidjson-dev libbz2-dev
</pre></div>
<p>To use with Qt 4:</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; sudo apt-get install -y qt4-dev-tools libqwt-dev python-qt4
</pre></div>
<p>To use with Qt 5:</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; sudo apt-get install -y qtbase5-dev libqt5svg5-dev libqwt-qt5-dev <span class="se">\</span>
python-pyqt5
</pre></div>
<div class="note">
<p class="first admonition-title">Note</p>
<p class="last"><strong>Do not install both versions of Qwt</strong> (for Qt 4 and Qt 5),
this will confuse the installer and end up with a non functional software
(it uses the headers from one Qt and libraries from the other version).</p>
</div>
<p>Second step is to create the source directory and pull the <span class="cb">git</span> repository:</p>
<div class="highlight"><pre><span></span>dummy@lepka:~&gt; mkdir -p ~/coriolis-2.x/src
dummy@lepka:src&gt; <span class="nb">cd</span> ~/coriolis-2.x/src
@ -518,8 +542,22 @@ the system.</p>
<p>Then proceed with the generic install instructions.</p>
</div>
</div>
<div class="section" id="coriolis-docker">
<h3><a class="toc-backref" href="#id18"><span class="sc">Coriolis</span> &amp; Docker</a></h3>
<p>Under <tt class="docutils literal">bootstrap/docker/</tt> scripts and configuration files are provided that
allow to rebuild <span class="sc">Alliance</span> and <span class="sc">Coriolis</span> and perform the regression tests
of <tt class="docutils literal"><span class="pre">alliance-check-toolkit</span></tt>. You may have a look at the <tt class="docutils literal">Dockerfile.system</tt>
configuration file to see exactly how to setup a vanilla system to build
<span class="sc">Coriolis</span>.</p>
<p>To run the docker tests, call the <tt class="docutils literal">dockerManage.sh</tt> scripts with the relevant
arguments:</p>
<div class="highlight"><pre><span></span>ego@home:debian-9&gt; ../../dockerManage.sh -bS <span class="c1"># build both system &amp; coriolis images.</span>
ego@home:debian-9&gt; ../../dockerManage.sh -r <span class="c1"># compile &amp; check coriolis.</span>
ego@home:debian-9&gt; ../../dockerManage.sh -C <span class="c1"># clear the images.</span>
</pre></div>
</div>
<div class="section" id="packaging-coriolis">
<h3><a class="toc-backref" href="#id17">Packaging Coriolis</a></h3>
<h3><a class="toc-backref" href="#id19">Packaging Coriolis</a></h3>
<p>Packager should not use <span class="cb">ccb</span>, instead <tt class="docutils literal">bootstrap/Makefile.package</tt> is provided
to emulate a top-level <tt class="docutils literal">autotool</tt> makefile. Just copy it in the root of the
<span class="sc">Coriolis</span> git repository (<tt class="docutils literal"><span class="pre">~/corriolis-2.x/src/coriolis/</span></tt>) and build.</p>
@ -530,7 +568,7 @@ to emulate a top-level <tt class="docutils literal">autotool</tt> makefile. Just
</ul>
</div>
<div class="section" id="hooking-up-into-alliance">
<h3><a class="toc-backref" href="#id18">Hooking up into <span class="sc">Alliance</span></a></h3>
<h3><a class="toc-backref" href="#id20">Hooking up into <span class="sc">Alliance</span></a></h3>
<p><span class="sc">Coriolis</span> relies on <span class="sc">Alliance</span> for the cell libraries. So after installing or
packaging, you must configure it so that it can found those libraries.</p>
<p>The easiest way is to setup the <span class="sc">Alliance</span> environment (i.e. sourcing
@ -539,7 +577,7 @@ packaging, you must configure it so that it can found those libraries.</p>
have look to the <cite>Alliance Helper</cite>.</p>
</div>
<div class="section" id="setting-up-the-environment-coriolisenv-py">
<h3><a class="toc-backref" href="#id19">Setting up the Environment (coriolisEnv.py)</a></h3>
<h3><a class="toc-backref" href="#id21">Setting up the Environment (coriolisEnv.py)</a></h3>
<p>To simplify the tedious task of configuring your environment, a helper is provided
in the <tt class="docutils literal">bootstrap</tt> source directory (also installed in the directory
<tt class="docutils literal"><span class="pre">.../install/etc/coriolis2/</span></tt>) :</p>
@ -562,7 +600,7 @@ infinite loop if it's called again in, say <span class="cb">~/.bashrc</span>.</p
</div>
</div>
<div class="section" id="cgt-the-graphical-interface">
<h2><a class="toc-backref" href="#id20">CGT - The Graphical Interface</a></h2>
<h2><a class="toc-backref" href="#id22">CGT - The Graphical Interface</a></h2>
<p>The <span class="sc">Coriolis</span> graphical interface is split up into two windows.</p>
<ul class="simple">
<li>The <strong>Viewer</strong>, with the following features:<ul>
@ -590,8 +628,8 @@ They are closely related to Configuration &amp; Initialisation.</li>
</li>
</ul>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-1.png" style="width: 80%;" /> </p>
<div class="section" id="id3">
<span id="viewer-tools"></span><h3><a class="toc-backref" href="#id21">Viewer &amp; Tools</a></h3>
<div class="section" id="id4">
<span id="viewer-tools"></span><h3><a class="toc-backref" href="#id23">Viewer &amp; Tools</a></h3>
<div class="section" id="stratus-netlist-capture">
<h4><span class="sc">Stratus</span> Netlist Capture</h4>
<p><span class="sc">Stratus</span> is the replacement for <span class="sc">GenLib</span> procedural netlist capture language.
@ -1283,8 +1321,8 @@ To generate one set this flag to <span class="cb">True</span></td>
<p></p>
</div>
</div>
<div class="section" id="id4">
<span id="the-controller"></span><h3><a class="toc-backref" href="#id22">The Controller</a></h3>
<div class="section" id="id5">
<span id="the-controller"></span><h3><a class="toc-backref" href="#id24">The Controller</a></h3>
<p>The <em>Controller</em> window is composed of seven tabs:</p>
<ol class="arabic simple">
<li><a class="reference internal" href="#the-look-tab">The Look Tab</a> to select the display style.</li>
@ -1298,7 +1336,7 @@ with the <em>Selection</em> tab.</li>
the current selection.</li>
<li><a class="reference internal" href="#the-settings-tab">The Settings Tab</a> accesses all the tool's configuration settings.</li>
</ol>
<div class="section" id="id5">
<div class="section" id="id6">
<span id="the-look-tab"></span><h4>The Look Tab</h4>
<p>You can select how the layout will be displayed. There is a special one
<tt class="docutils literal">Printer.Coriolis</tt> specifically designed for <a class="reference internal" href="#printing-snapshots">Printing &amp; Snapshots</a>.
@ -1306,7 +1344,7 @@ You should select it prior to calling the print or snapshot dialog boxes.</p>
<p> <img alt="Controller Look, Snapshot 1" class="align-middle" src="../pages/images/Controller-Look-1.png" style="width: 80%;" /> </p>
<p></p>
</div>
<div class="section" id="id6">
<div class="section" id="id7">
<span id="the-filter-tab"></span><h4>The Filter Tab</h4>
<p>The filter tab let you select what hierarchical levels of your design will be
displayed. Hierarchy level are numbered top-down: the level 0 corresponds to
@ -1330,7 +1368,7 @@ They have been made <em>very</em> visible as big violet lines...</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-Filter-1.png" style="width: 80%;" /> </p>
<p></p>
</div>
<div class="section" id="id7">
<div class="section" id="id8">
<span id="the-layers-go-tab"></span><h4>The Layers&amp;Go Tab</h4>
<p>Control the individual display of all <em>layers</em> and <em>Gos</em>.</p>
<ul class="simple">
@ -1348,7 +1386,7 @@ to easily locate congested areas.</li>
</ul>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-LayersGos-1.png" style="width: 80%;" /> </p>
</div>
<div class="section" id="id8">
<div class="section" id="id9">
<span id="the-netlist-tab"></span><h4>The Netlist Tab</h4>
<p>The <em>Netlist</em> tab shows the list of nets... By default the tab is not
<em>synched</em> with the displayed Cell. To see the nets you must check the
@ -1361,7 +1399,7 @@ is highlighted in the <em>Viewer</em>.</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-Netlist-1.png" style="width: 80%;" />
<img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Viewer-Netlist-1.png" style="width: 80%;" /> </p>
</div>
<div class="section" id="id9">
<div class="section" id="id10">
<span id="the-selection-tab"></span><h4>The Selection Tab</h4>
<p>The <em>Selection</em> tab lists all the components currently selected. They
can be filtered thanks to the filter pattern.</p>
@ -1374,7 +1412,7 @@ To see where a component is you may make it blink by repeatedly press
the <tt class="docutils literal">t</tt> key...</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-Selection-1.png" style="width: 80%;" /> </p>
</div>
<div class="section" id="id10">
<div class="section" id="id11">
<span id="the-inspector-tab"></span><h4>The Inspector Tab</h4>
<p>This tab is very useful, but mostly for <span class="sc">Coriolis</span> developpers. It allows
to browse through the live DataBase. The <em>Inspector</em> provides three entry points:</p>
@ -1400,7 +1438,7 @@ is deleted, you will crash the application...</p>
<img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-Inspector-2.png" style="width: 80%;" />
<img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-Inspector-3.png" style="width: 80%;" /> </p>
</div>
<div class="section" id="id11">
<div class="section" id="id12">
<span id="the-settings-tab"></span><h4>The Settings Tab</h4>
<p>Here comes the description of the <em>Settings</em> tab.</p>
<p> <img alt="Controller Basic Snapshot" class="align-middle" src="../pages/images/Controller-Settings-1.png" style="width: 80%;" /> </p>
@ -1426,6 +1464,7 @@ is deleted, you will crash the application...</p>
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

Binary file not shown.

View File

@ -8,7 +8,7 @@
<meta name="keywords" content="">
<link rel="icon" href="./favicon.ico">
<title> - Coriolis VLSI CAD Tools</title>
<title> - Coriolis VLSI CAD Tools [offline]</title>
<!-- Stylesheets -->
<link href="./theme/css/bootstrap.css" rel="stylesheet">
@ -44,7 +44,7 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="navbar-brand" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<ul class="nav navbar-nav">
<li><a href="./pages/gitlab.html">Git</a></li>
@ -68,7 +68,7 @@
<div class="container">
<div class="header-nav">
<div class="header-logo">
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools</a>
<a class="pull-left" href="./"><img class="mr20" src="./images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
</div>
<div class="nav pull-right">
<a href="./pages/gitlab.html">Git</a>
@ -131,6 +131,7 @@
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
<div class="footer-title">Links</div>
<ul class="list-unstyled">
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
</ul>

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import os
import os.path
@ -35,7 +36,7 @@ STATIC_PATHS = [ 'pages/users-guide'
AUTHOR = u'Jean-Paul Chaput'
SITENAME = u'Coriolis VLSI CAD Tools'
SITENAME = u'Coriolis VLSI CAD Tools [offline]'
SITEURL = siteUrl
THEME = 'nest-coriolis'
@ -67,8 +68,9 @@ DISPLAY_PAGES_ON_MENU = True
SOCIAL = None
# Social widget
LINKS = (('CIAN Team Website' , 'https://www-soc.lip6.fr/'),
('Free Silicon Foundation', 'https://f-si.org' ),)
LINKS = (('Alliance/Coriolis' , 'https://coriolis.lip6.fr/'),
('CIAN Team Website' , 'https://www-soc.lip6.fr/' ),
('Free Silicon Foundation', 'https://f-si.org' ),)
DEFAULT_PAGINATION = 10
@ -114,6 +116,8 @@ IGNORE_FILES = [ 'UsersGuide.rst' # For User's Guide.
, 'RDS.rst' # For RDS.
, 'RDSpage.rst'
, 'Installation.rst' # For Alliance.
]
# Uncomment following line if you want document-relative URLs when developing