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:
parent
6ea7a6f1f3
commit
068740601c
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
|
||||
systemImage="debian9.system"
|
||||
coriolisImage="debian9.coriolis"
|
|
@ -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
|
|
@ -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 )
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
|
||||
systemImage="sl7.system"
|
||||
coriolisImage="sl7.coriolis"
|
|
@ -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
|
|
@ -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 )
|
|
@ -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
|
||||
|
|
@ -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 \
|
|
@ -0,0 +1,3 @@
|
|||
|
||||
systemImage="ubuntu18.system"
|
||||
coriolisImage="ubuntu18.coriolis"
|
|
@ -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
|
|
@ -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 )
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
======================
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
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:
|
||||
|
||||
Note, that the ``Qwt`` packages are directly available from the standart distribution
|
||||
when using |Qt| 4.
|
||||
.. 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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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`
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 & 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 & 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> & 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 & 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 & 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:~> 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:~> . /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 & Fedora</th>
|
||||
<th class="head">Debian/Ubuntu</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<tr><td>Basic devel tools</td>
|
||||
<td>"Development tools" (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&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 & 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 & 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:~> 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:~> mkdir -p coriolis-2.x/src
|
||||
ego@home:~> <span class="nb">cd</span> coriolis-2.x/src
|
||||
ego@home:src> git clone https://gitlab.lip6.fr/jpc/alliance.git
|
||||
</pre></div>
|
||||
</li>
|
||||
<li><p class="first">Compilation & 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 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./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 & 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:~> 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:~> mkdir -p coriolis-2.x/src
|
||||
ego@home:~> <span class="nb">cd</span> coriolis-2.x/src
|
||||
ego@home:src> git clone https://gitlab.lip6.fr/jpc/alliance.git
|
||||
</pre></div>
|
||||
</li>
|
||||
<li><p class="first">Compilation & 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 's,dirs="\$newdirs documentation",dirs="$newdirs",' ./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>
|
|
@ -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'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 & install Alliance alongside Coriolis Coriolis Documentation Coriolis User'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 & 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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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> 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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 & License Complete Design Flow & 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 & License Complete Design Flow & Examples Installation Fixed Directory Tree Building Coriolis Coriolis & 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 & License</a></li>
|
||||
<li><a class="reference internal" href="#complete-design-flow-examples" id="id13">Complete Design Flow & 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 & License</a></li>
|
||||
<li><a class="reference internal" href="#complete-design-flow-examples" id="id14">Complete Design Flow & 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> & 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 & 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 & 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 & License</a></h2>
|
||||
<h2><a class="toc-backref" href="#id13">Credits & 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 & Examples</a></h2>
|
||||
<h2><a class="toc-backref" href="#id14">Complete Design Flow & 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 & 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:~> 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:~> 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:~> mkdir -p ~/coriolis-2.x/src/support
|
||||
dummy@lepka:support> <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:~> 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:~> 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:~> 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:~> 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:~> 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:~> 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:~> mkdir -p ~/coriolis-2.x/src
|
||||
dummy@lepka:src> <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> & 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> ../../dockerManage.sh -bS <span class="c1"># build both system & coriolis images.</span>
|
||||
ego@home:debian-9> ../../dockerManage.sh -r <span class="c1"># compile & check coriolis.</span>
|
||||
ego@home:debian-9> ../../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 & 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 & Tools</a></h3>
|
||||
<div class="section" id="id4">
|
||||
<span id="viewer-tools"></span><h3><a class="toc-backref" href="#id23">Viewer & 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 & 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&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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue