Adapt the rpm automated build system of bootstrap (pass 2)

* Change: coriolis2.spec.in, Makefile.package and Builder/ccb now support
    RHEL6, RHEL7 & Fedora.
* Change: In Bootstrap, added a flag to activate compilation with
    openmp.
This commit is contained in:
Jean-Paul Chaput 2015-04-08 17:45:45 +02:00
parent cdfdccb19d
commit bacea5214c
9 changed files with 128 additions and 262 deletions

View File

@ -2,27 +2,24 @@
# -*- Makefile -*- # -*- Makefile -*-
# Mimicking the behavior of a top-level autotool generated Makefile. # Mimicking the behavior of a top-level autotool generated Makefile.
define pythonSiteLocator = pythonSiteLocator = "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1)"
import os.path
import distutils.sysconfig
print distutils.sysconfig.get_python_lib()
endef
tools = bootstrap vlsisapd hurricane crlcore coloquinte etesian knik \
katabatic kite equinox solstice cumulus stratus1 unicorn documentation
prefix = /usr
rootPrefix = $(subst /usr,,$(prefix))
DESTDIR =
BUILD_DESTDIR = $(shell pwd)/install.dir
PYTHON_SITEDIR = $(shell python -c $(pythonSiteLocator))
IMPORTEDS_TOP = $(prefix)
CORIOLIS_TOP = $(prefix)
tools = bootstrap vlsisapd hurricane crlcore etesian knik katabatic kite \ environment = IMPORTEDS_TOP=$(IMPORTEDS_TOP); export IMPORTEDS_TOP; \
equinox solstice cumulus stratus1 unicorn documentation CORIOLIS_TOP=$(CORIOLIS_TOP); export CORIOLIS_TOP
prefix = /usr
DESTDIR =
BUILD_DESTDIR = $(shell pwd)/install.dir
PYTHON_SITEDIR = $(shell python -c '$(pythonSiteLocator)')
IMPORTEDS_TOP = $(prefix)
CORIOLIS_TOP = $(prefix)
environment = IMPORTEDS_TOP=$(IMPORTEDS_TOP); export IMPORTEDS_TOP; \
CORIOLIS_TOP=$(CORIOLIS_TOP); export CORIOLIS_TOP
.PHONY: build install FORCE .PHONY: build install FORCE
all: build all: build
clean: clean:
@ -39,20 +36,15 @@ build: FORCE
"x86_64") cmakeArgs="-D LIB_SUFFIX:STRING=64";; \ "x86_64") cmakeArgs="-D LIB_SUFFIX:STRING=64";; \
*) cmakeArgs="";; \ *) cmakeArgs="";; \
esac; \ esac; \
echo "** Building tool Coloquinte"; \ case "$${X_SCLS}" in \
mkdir -p build.dir/Coloquinte; \ *"devtoolset"*) \
cd build.dir/Coloquinte; \ cmakeArgs="$${cmakeArgs} -D Boost_NO_SYSTEM_PATHS:STRING=TRUE"; \
cmake -D CMAKE_BUILD_TYPE:STRING=RELEASE \ BOOST_INCLUDEDIR="/opt/rh/devtoolset-2/root/usr/include"; \
-D BUILD_SHARED_LIBS:STRING=ON \ BOOST_LIBRARYDIR="/opt/rh/devtoolset-2/root/usr/lib"; \
-D BUILD_DOC:STRING=OFF \ export BOOST_INCLUDEDIR BOOST_LIBRARYDIR; \
-D CMAKE_INSTALL_PREFIX:STRING=$(CORIOLIS_TOP) \ echo "** Using $${X_SCLS}."; \
-D DESTDIR:STRING=$(BUILD_DESTDIR) \ ;; \
$${cmakeArgs} \ esac; \
../../importeds/Coloquinte \
|| exit 1; \
make DESTDIR=$(BUILD_DESTDIR) install \
|| exit 1; \
cd ../..; \
for tool in $(tools); do \ for tool in $(tools); do \
echo "** Building tool $${tool}"; \ echo "** Building tool $${tool}"; \
mkdir -p build.dir/$$tool; \ mkdir -p build.dir/$$tool; \
@ -65,7 +57,7 @@ build: FORCE
$${cmakeArgs} \ $${cmakeArgs} \
../../coriolis/$$tool \ ../../coriolis/$$tool \
|| exit 1; \ || exit 1; \
make DESTDIR=$(BUILD_DESTDIR) install \ make DESTDIR=$(BUILD_DESTDIR) $(SMP_MFLAGS) install \
|| exit 1; \ || exit 1; \
cd ../..; \ cd ../..; \
done done
@ -76,19 +68,6 @@ install: FORCE
"x86_64") commonCMakeArgs="-D LIB_SUFFIX:STRING=64";; \ "x86_64") commonCMakeArgs="-D LIB_SUFFIX:STRING=64";; \
*) commonCMakeArgs="";; \ *) commonCMakeArgs="";; \
esac; \ esac; \
echo "** Installing tool Coloquinte"; \
cd build.dir/Coloquinte; \
cmake -D CMAKE_BUILD_TYPE:STRING=RELEASE \
-D BUILD_SHARED_LIBS:STRING=ON \
-D BUILD_DOC:STRING=ON \
-D CMAKE_INSTALL_PREFIX:STRING=$(CORIOLIS_TOP) \
-D DESTDIR:STRING=$(DESTDIR) \
$${cmakeArgs} \
../../importeds/Coloquinte \
|| exit 1; \
make DESTDIR=$(DESTDIR) install \
|| exit 1; \
cd ../..; \
for tool in $(tools); do \ for tool in $(tools); do \
echo "** Installing tool $${tool}"; \ echo "** Installing tool $${tool}"; \
cd build.dir/$$tool; \ cd build.dir/$$tool; \
@ -114,10 +93,11 @@ install: FORCE
|| exit 1; \ || exit 1; \
cd ../..; \ cd ../..; \
done; \ done; \
rm -rf $(DESTDIR)$(CORIOLIS_TOP)/bin/ccb \ rm -rfv $(DESTDIR)$(rootPrefix)/etc/coriolis2/coriolis2.sh \
$(DESTDIR)$(CORIOLIS_TOP)/bin/cx2y \ $(DESTDIR)$(prefix)/bin/ccb \
$(DESTDIR)$(CORIOLIS_TOP)/bin/*.bin \ $(DESTDIR)$(prefix)/bin/cx2y \
$(DESTDIR)$(PYTHON_SITEDIR)/builder \ $(DESTDIR)$(prefix)/bin/*.bin \
$(DESTDIR)/usr/share/cmake/Modules/GetGitRevisionDescription.cmake.in $(DESTDIR)$(rootPrefix)$(PYTHON_SITEDIR)/builder \
$(DESTDIR)$(prefix)/share/cmake/Modules/GetGitRevisionDescription.cmake.in
FORCE: FORCE:

View File

@ -37,6 +37,7 @@ class Builder:
self._clang = False self._clang = False
self._devtoolset2 = False self._devtoolset2 = False
self._qt5 = False self._qt5 = False
self._openmp = False
self._enableShared = "ON" self._enableShared = "ON"
self._enableDoc = "OFF" self._enableDoc = "OFF"
self._checkDatabase = "OFF" self._checkDatabase = "OFF"
@ -62,6 +63,7 @@ class Builder:
elif attribute == "clang": self._clang = value elif attribute == "clang": self._clang = value
elif attribute == "devtoolset2": self._devtoolset2 = value elif attribute == "devtoolset2": self._devtoolset2 = value
elif attribute == "qt5": self._qt5 = value elif attribute == "qt5": self._qt5 = value
elif attribute == "openmp": self._openmp = value
elif attribute == "enableDoc": self._enableDoc = value elif attribute == "enableDoc": self._enableDoc = value
elif attribute == "enableShared": self._enableShared = value elif attribute == "enableShared": self._enableShared = value
elif attribute == "checkDatabase": self._checkDatabase = value elif attribute == "checkDatabase": self._checkDatabase = value
@ -128,9 +130,11 @@ class Builder:
commandAsString = '' commandAsString = ''
for i in range(len(command)): for i in range(len(command)):
if i: commandAsString += ' ' if i: commandAsString += ' '
commandAsString += command[i] if ' ' in command[i]: commandAsString += '"'+command[i]+'"'
else: commandAsString += command[i]
command = [ 'scl', 'enable', 'devtoolset-2', commandAsString ] command = [ 'scl', 'enable', 'devtoolset-2', commandAsString ]
#print command
sys.stdout.flush () sys.stdout.flush ()
sys.stderr.flush () sys.stderr.flush ()
child = subprocess.Popen ( command, env=self._environment, stdout=None ) child = subprocess.Popen ( command, env=self._environment, stdout=None )
@ -164,6 +168,7 @@ class Builder:
if self._ninja: command += [ "-G", "Ninja" ] if self._ninja: command += [ "-G", "Ninja" ]
if self._devtoolset2: command += [ "-D", "Boost_NO_SYSTEM_PATHS:STRING=TRUE" ] if self._devtoolset2: command += [ "-D", "Boost_NO_SYSTEM_PATHS:STRING=TRUE" ]
if self._qt5: command += [ "-D", "WITH_QT5:STRING=TRUE" ] if self._qt5: command += [ "-D", "WITH_QT5:STRING=TRUE" ]
if self._openmp: command += [ "-D", "WITH_OPENMP:STRING=TRUE" ]
command += [ "-D", "CMAKE_BUILD_TYPE:STRING=%s" % self.buildMode command += [ "-D", "CMAKE_BUILD_TYPE:STRING=%s" % self.buildMode
, "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared , "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared
@ -209,79 +214,6 @@ class Builder:
return return
#def _svnStatus ( self, tool ):
# toolSourceDir = os.path.join ( self.sourceDir , tool )
# if not os.path.isdir(toolSourceDir):
# if not self._quiet:
# print ErrorMessage( 0, "Missing tool source directory: \"%s\" (skipped)."%toolSourceDir )
# return
# os.chdir ( toolSourceDir )
#
# print "Checking SVN status of tool: ", tool
# command = [ "svn", "status", "-u", "-q" ]
# self._execute ( command, "svn status -u -q" )
# print
# return
#
#
#def _svnDiff ( self, tool ):
# toolSourceDir = os.path.join ( self.sourceDir , tool )
# if not os.path.isdir(toolSourceDir):
# if not self._quiet:
# print ErrorMessage( 0, "Missing tool source directory: \"%s\" (skipped)."%toolSourceDir )
# return
# os.chdir ( toolSourceDir )
#
# print "Doing a SVN diff of tool: ", tool
# command = [ "svn", "diff" ]
# if self.gitHash != "x":
# command += [ "--revision", self.gitHash ]
# self._execute ( command, "svn diff %s" % tool )
# print
# return
#
#
#def _svnUpdate ( self, tool ):
# toolSourceDir = os.path.join ( self.sourceDir , tool )
# if not os.path.isdir(toolSourceDir):
# if not self._quiet:
# print ErrorMessage( 0, "Missing tool source directory: \"%s\" (skipped)."%toolSourceDir)
# return
# os.chdir ( toolSourceDir )
#
# print "Doing a SVN update of tool: ", tool
# command = [ "svn", "update" ]
# self._execute ( command, "svn update" )
# print
# return
#
#
#def _svnCheckout ( self, tool ):
# project = self._conf.getToolProject ( tool )
# if not project:
# print ErrorMessage( 0, "Tool \"%s\" is not part of any project."%tool
# ,"Cannot guess the SVN repository." )
# return
# if not project.getRepository ():
# print ErrorMessage( 0, "Project \"%s\" isn't associated to a repository."%project.getName() )
# return
#
# if not os.path.isdir(self.sourceDir):
# print ErrorMessage( 0, "Source directory <%s> doesn't exists. Creating."%self.sourceDir )
# os.makedirs( self.sourceDir )
#
# toolSvnTrunkDir = os.path.join ( self.svnMethod+project.getRepository(), tool, "trunk" )
# os.chdir ( self.sourceDir )
#
# print "Doing a SVN checkout of tool: ", tool
# command = [ "svn", "co", toolSvnTrunkDir, tool ]
# if self.gitHash != "x":
# command += [ "--revision", self.gitHash ]
# self._execute ( command, "svn checkout %s" % tool )
# print
# return
def gitArchive ( self, projectName ): def gitArchive ( self, projectName ):
rawArchive = self.tarballDir+'/'+projectName+'.tar' rawArchive = self.tarballDir+'/'+projectName+'.tar'
@ -304,33 +236,30 @@ class Builder:
command = [ 'rm', rawArchive ] command = [ 'rm', rawArchive ]
self._execute ( command, "Removing raw archive %s" % rawArchive ) self._execute ( command, "Removing raw archive %s" % rawArchive )
# Hard-coded export of Coloquinte.
coloquinteRawArchive = self.tarballDir+'/coloquinte.tar'
os.chdir ( self.sourceDir+'/importeds/Coloquinte')
command = [ 'git'
, 'archive'
, '--prefix=%s/' % 'importeds/Coloquinte/'
, '--output=%s' % coloquinteRawArchive
, 'master'
]
self._execute ( command, "git archive of project %s" % 'Coloquinte' )
os.chdir ( self.archiveDir )
command = [ 'tar', 'xf', coloquinteRawArchive ]
self._execute ( command, "unpacking raw archive %s" % coloquinteRawArchive )
command = [ 'rm', coloquinteRawArchive ]
self._execute ( command, "Removing raw archive %s" % coloquinteRawArchive )
# Adds files neededs only for packaging purpose. # Adds files neededs only for packaging purpose.
command = [ "/bin/ln", "-s", self.archiveDir+"/coriolis/bootstrap/Makefile.package" command = [ "/bin/ln", "-s", "./coriolis/bootstrap/Makefile.package"
, self.archiveDir+"/Makefile" ] , self.archiveDir+"/Makefile" ]
self._execute ( command, "link of %s failed" % "coriolis/boostrap/Makefile.package") self._execute ( command, "link of %s failed" % "coriolis/boostrap/Makefile.package")
command = [ "/bin/ln", "-s", self.archiveDir+"/coriolis/bootstrap/debian", self.archiveDir ] command = [ "/bin/ln", "-s", "./coriolis/bootstrap/debian", self.archiveDir ]
self._execute ( command, "Copying Debian/Ubuntu package control files" ) self._execute ( command, "Copying Debian/Ubuntu package control files" )
# # Remove unpublisheds (yet) tools/files.
# for item in self.packageExcludes:
# command = [ "/bin/rm", "-rf", os.path.join(self.archiveDir,item) ]
# self._execute ( command, "rm of %s failed" % item)
#
# # Adds files neededs only for packaging purpose.
# command = [ "/bin/cp", "-r", os.path.join(self.sourceDir ,"bootstrap","Makefile.package")
# , os.path.join(self.archiveDir,"Makefile") ]
# self._execute ( command, "copy of %s failed" % "boostrap/Makefile.package")
#
# os.chdir ( self.archiveDir )
# command = [ "/usr/bin/patch", "--remove-empty-files"
# , "--no-backup-if-mismatch"
# , "-p0", "-i", self.distribPatch ]
# self._execute ( command, "patch for distribution command failed" )
absSourceTarBz2 = '%s/%s' % (self.tarballDir,self.sourceTarBz2) absSourceTarBz2 = '%s/%s' % (self.tarballDir,self.sourceTarBz2)
os.chdir ( self.tarballDir ) os.chdir ( self.tarballDir )
command = [ 'tar', 'jcf', absSourceTarBz2, os.path.basename(self.archiveDir) ] command = [ 'tar', 'jcf', absSourceTarBz2, os.path.basename(self.archiveDir) ]
@ -413,31 +342,6 @@ class Builder:
return return
#def svnStatus ( self, tools, projects ):
# self._commandTemplate ( tools, projects, "_svnStatus" )
# return
#
#
#def svnUpdate ( self, tools, projects ):
# self._commandTemplate ( tools, projects, "_svnUpdate" )
# return
#
#
#def svnCheckout ( self, tools, projects ):
# self._commandTemplate ( tools, projects, "_svnCheckout" )
# return
#
#
#def svnDiff ( self, tools, projects ):
# self._commandTemplate ( tools, projects, "_svnDiff" )
# return
#
#
#def svnExport ( self, tools, projects ):
# self._commandTemplate ( tools, projects, "_svnExport" )
# return
def gitTarball ( self, tools, projects ): def gitTarball ( self, tools, projects ):
if self.gitHash == "x": if self.gitHash == "x":
self._guessGitHash ( self.getProject(projects[0]) ) self._guessGitHash ( self.getProject(projects[0]) )
@ -454,39 +358,6 @@ class Builder:
os.makedirs ( self.tarballDir ) os.makedirs ( self.tarballDir )
self.gitArchive ( projects[0] ) self.gitArchive ( projects[0] )
# # Remove unpublisheds (yet) tools/files.
# for item in self.packageExcludes:
# command = [ "/bin/rm", "-rf", os.path.join(self.archiveDir,item) ]
# self._execute ( command, "rm of %s failed" % item)
#
# # Adds files neededs only for packaging purpose.
# command = [ "/bin/cp", "-r", os.path.join(self.sourceDir ,"bootstrap","Makefile.package")
# , os.path.join(self.archiveDir,"Makefile") ]
# self._execute ( command, "copy of %s failed" % "boostrap/Makefile.package")
#
# command = [ "/bin/cp", self.specFile, self.archiveDir ]
# self._execute ( command, "Copying RPM spec file" )
#
# command = [ "/bin/cp", "-r", self.debianDir, self.archiveDir ]
# self._execute ( command, "Copying Debian/Ubuntu package control files" )
#
# os.chdir ( self.archiveDir )
# #command = [ "/usr/bin/patch", "--remove-empty-files"
# # , "--no-backup-if-mismatch"
# # , "-p0", "-i", self.distribPatch ]
# #self._execute ( command, "patch for distribution command failed" )
#
# os.chdir ( self.tarballDir )
# command = [ "/bin/tar"
# , "--exclude-backups"
# , "--exclude-vcs"
# , "-jcvf", self.sourceTarBz2, os.path.basename(self.archiveDir) ]
# self._execute ( command, "tar command failed" )
#
# print "Cleanup SVN export tarball archive directory: \"%s\"." % self.archiveDir
# command = [ "/bin/rm", "-rf", self.archiveDir ]
# self._execute ( command, "Removing archive export (tarball) directory" )
return return
@ -520,9 +391,17 @@ class Builder:
for rpmDir in [ "SOURCES", "SPECS", "BUILD", "tmp" for rpmDir in [ "SOURCES", "SPECS", "BUILD", "tmp"
, "SRPMS", "RPMS/i386", "RPMS/i686", "RPMS/x86_64" ]: , "SRPMS", "RPMS/i386", "RPMS/i686", "RPMS/x86_64" ]:
rpmFullDir = os.path.join ( self.rpmbuildDir, rpmDir ) rpmFullDir = os.path.join ( self.rpmbuildDir, rpmDir )
if not os.path.isdir(rpmFullDir): if not os.path.isdir(rpmFullDir):
os.makedirs ( rpmFullDir ) os.makedirs ( rpmFullDir )
else:
for entry in os.listdir(rpmFullDir):
path = os.path.join( rpmFullDir, entry )
if os.path.islink(path):
realpath = os.path.realpath( os.readlink(path) )
if not os.path.isfile(realpath):
print 'Remove obsolete link: <%s>.' % path
os.unlink( path )
rpmSpecFile = os.path.join ( self.rpmbuildDir, "SPECS" , "coriolis2.spec" ) rpmSpecFile = os.path.join ( self.rpmbuildDir, "SPECS" , "coriolis2.spec" )
rpmSourceFile = os.path.join ( self.rpmbuildDir, "SOURCES", self.sourceTarBz2 ) rpmSourceFile = os.path.join ( self.rpmbuildDir, "SOURCES", self.sourceTarBz2 )
@ -540,8 +419,11 @@ class Builder:
command = [ "/usr/bin/rpmbuild" command = [ "/usr/bin/rpmbuild"
, "--define", "_topdir %s" % self.rpmbuildDir , "--define", "_topdir %s" % self.rpmbuildDir
, "--define", "_tmppath %s" % self.tmppathDir , "--define", "_tmppath %s" % self.tmppathDir
, "--define", "_enable_debug_packages 0" #, "--define", "_enable_debug_packages 0"
, "-ba", "--with", "binarytar", rpmSpecFile ] , "--with", "binarytar" ]
if self._devtoolset2 == True:
command += [ "--define", "scl devtoolset-2" ]
command += [ "-ba", "--clean", rpmSpecFile ]
self._execute ( command, "Rebuild rpm packages" ) self._execute ( command, "Rebuild rpm packages" )

View File

@ -206,6 +206,7 @@ parser.add_option ( "--no-cache" , action="store_true" ,
parser.add_option ( "--rm-build" , action="store_true" , dest="rmBuild" , help="Remove previous build directoty before building." ) parser.add_option ( "--rm-build" , action="store_true" , dest="rmBuild" , help="Remove previous build directoty before building." )
parser.add_option ( "--devtoolset-2", action="store_true" , dest="devtoolset2" , help="Build against TUV Dev Toolset 2." ) parser.add_option ( "--devtoolset-2", action="store_true" , dest="devtoolset2" , help="Build against TUV Dev Toolset 2." )
parser.add_option ( "--qt5" , action="store_true" , dest="qt5" , help="Build against Qt 5 (default: Qt 4)." ) parser.add_option ( "--qt5" , action="store_true" , dest="qt5" , help="Build against Qt 5 (default: Qt 4)." )
parser.add_option ( "--openmp" , action="store_true" , dest="openmp" , help="Enable the use of OpenMP in Gcc." )
parser.add_option ( "--ninja" , action="store_true" , dest="ninja" , help="Use Ninja instead of UNIX Makefile." ) parser.add_option ( "--ninja" , action="store_true" , dest="ninja" , help="Use Ninja instead of UNIX Makefile." )
parser.add_option ( "--clang" , action="store_true" , dest="clang" , help="Force use of Clang C/C++ compiler instead of system default." ) parser.add_option ( "--clang" , action="store_true" , dest="clang" , help="Force use of Clang C/C++ compiler instead of system default." )
parser.add_option ( "--make" , action="store" , type="string", dest="makeArguments", help="Arguments to pass to make (ex: \"-j4 install\")." ) parser.add_option ( "--make" , action="store" , type="string", dest="makeArguments", help="Arguments to pass to make (ex: \"-j4 install\")." )
@ -282,6 +283,7 @@ else:
if options.clang: builder.clang = True if options.clang: builder.clang = True
if options.devtoolset2: builder.devtoolset2 = True if options.devtoolset2: builder.devtoolset2 = True
if options.qt5: builder.qt5 = True if options.qt5: builder.qt5 = True
if options.openmp: builder.openmp = True
if options.makeArguments: builder.makeArguments = options.makeArguments if options.makeArguments: builder.makeArguments = options.makeArguments
#if options.svnMethod: builder.svnMethod = options.svnMethod #if options.svnMethod: builder.svnMethod = options.svnMethod
#if options.svnTag: builder.svnTag = options.svnTag #if options.svnTag: builder.svnTag = options.svnTag

View File

@ -136,8 +136,8 @@
if(NOT ${library}_INCLUDE_PATH) if(NOT ${library}_INCLUDE_PATH)
set(${configname}_FOUND "NOTFOUND") set(${configname}_FOUND "NOTFOUND")
endif(NOT ${library}_INCLUDE_PATH) endif()
endmacro ( set_libraries_path ) endmacro()
# #
@ -269,16 +269,24 @@
# #
macro(setup_sysconfdir INSTALLDIR) macro(setup_sysconfdir INSTALLDIR)
message("-- Checking installation directory <${INSTALLDIR}>") message("-- Checking installation directory <${INSTALLDIR}>")
string(REGEX MATCH "^/usr$" IS_USR ${INSTALLDIR}) string(REGEX MATCH "^/opt/rh/devtoolset-2/root/usr$" IS_OPT_RH ${INSTALLDIR})
string(REGEX MATCH "^/opt$" IS_OPT ${INSTALLDIR}) if(IS_OPT_RH)
if(IS_USR OR IS_OPT) message("-- Using devtoolset-2 install tree /opt/rh/devtoolset-2/root/etc.")
message("-- Using system-wide /etc.") set(SYS_CONF_DIR "/opt/rh/devtoolset-2/root/etc" CACHE STRING "System configuration directory (/etc)" FORCE)
set(SYS_CONF_DIR "/etc" CACHE STRING "System configuration directory (/etc)" FORCE) else()
else(IS_USR OR IS_OPT) string(REGEX MATCH "^/usr$" IS_USR ${INSTALLDIR})
string(REGEX MATCH "^/opt$" IS_OPT ${INSTALLDIR})
if(IS_USR OR IS_OPT)
message("-- Using system-wide /etc.")
set(SYS_CONF_DIR "/etc" CACHE STRING "System configuration directory (/etc)" FORCE)
endif()
endif()
if(NOT IS_OPT_RH AND NOT IS_USR AND NOT IS_OPT)
message("-- Using install tree <prefix>/etc.") message("-- Using install tree <prefix>/etc.")
set(SYS_CONF_DIR "etc" CACHE STRING "System configuration directory (/etc)" FORCE) set(SYS_CONF_DIR "etc" CACHE STRING "System configuration directory (/etc)" FORCE)
endif(IS_USR OR IS_OPT) endif()
endmacro(setup_sysconfdir) endmacro()
# #

View File

@ -1,14 +1,17 @@
%{?scl:%{?scl_package:%scl_package coriolis2}}
%define coriolisVersion 2.1 %define coriolisVersion 2.1
%define coriolisTop %{_prefix} %define coriolisTop %{_prefix}
%define githash @githash@ %define githash @githash@
%define revdate @revdate@ %define revdate @revdate@
%define with_binarytar %{?_with_binarytar:1}%{!?_with_binarytar:0}
%define python_sitedir %{_lib}/%(python -c ' %define python_sitedir %{_lib}/%(python -c '
import os.path import os.path
import distutils.sysconfig import distutils.sysconfig
pathes = distutils.sysconfig.get_python_lib().split("/") pathes = distutils.sysconfig.get_python_lib(1).split("/")
print os.path.join ( pathes[-2], pathes[-1] ) print os.path.join ( pathes[-2], pathes[-1] )
') ')
@ -19,21 +22,24 @@ print os.path.join ( pathes[-2], pathes[-1] )
%endif %endif
Name: coriolis2 Name: %{?scl_prefix}coriolis2
Summary: Coriolis 2 VLSI CAD System Summary: Coriolis 2 VLSI CAD System
Version: %{coriolisVersion} Version: %{coriolisVersion}
Release: 1.%{revdate}git%{githash}%{dist} Release: 1.%{revdate}git%{githash}%{dist}
License: BSD/LGPL/GPL/FLUTE License: BSD/LGPL/GPL/FLUTE
Group: Applications/Engineering Group: Applications/Engineering
Source: %{name}-%{version}.%{revdate}git%{githash}.tar.bz2 Source: %{pkg_name}-%{version}.%{revdate}git%{githash}.tar.bz2
URL: http://www-soc.lip6.fr/ URL: http://www-soc.lip6.fr/
Packager: Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr> Packager: Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>
%{!?scl:%define pkg_name %{name}}
%{?scl:Requires:%scl_runtime}
Requires(post): ldconfig Requires(post): ldconfig
Requires: boost >= 1.33.1 Requires: %{?scl_prefix}boost >= 1.53.0
Requires: %{qt4} >= 4.5.0 Requires: %{qt4} >= 4.5.0
BuildRequires: boost-devel >= 1.33.1 BuildRequires: %{?scl_prefix}boost-devel >= 1.53.0
BuildRequires: %{qt4}-devel >= 4.5.0 BuildRequires: %{qt4}-devel >= 4.5.0
BuildRoot: %{_tmppath}/root-%{name} BuildRoot: %{_tmppath}/root-%{pkg_name}
%description %description
@ -57,7 +63,7 @@ Development files for the Coriolis 2 package.
%prep %prep
%setup -n %{name}-%{version}.%{revdate}git%{githash} %setup -n %{pkg_name}-%{version}.%{revdate}git%{githash}
%build %build
@ -65,12 +71,14 @@ Development files for the Coriolis 2 package.
IMPORTEDS_TOP=%{coriolisTop}; export IMPORTEDS_TOP IMPORTEDS_TOP=%{coriolisTop}; export IMPORTEDS_TOP
CORIOLIS_TOP=%{coriolisTop}; export CORIOLIS_TOP CORIOLIS_TOP=%{coriolisTop}; export CORIOLIS_TOP
SMP_MFLAGS=%{_smp_mflags}; export SMP_MFLAGS
# Do build & install in one step, except for documentation. # Do build & install in one step, except for documentation.
make -f coriolis/bootstrap/Makefile.package \ make -f coriolis/bootstrap/Makefile.package \
prefix=%{coriolisTop} \
DESTDIR=%{buildroot} \ DESTDIR=%{buildroot} \
BUILD_DESTDIR=%{_builddir}/%{buildsubdir}/install.dir \ BUILD_DESTDIR=%{_builddir}/%{buildsubdir}/install.dir \
%{_smp_mflags} build build
%install %install
@ -79,17 +87,19 @@ Development files for the Coriolis 2 package.
# Install & build documentation, in -j1. # Install & build documentation, in -j1.
make -f coriolis/bootstrap/Makefile.package \ make -f coriolis/bootstrap/Makefile.package \
prefix=%{coriolisTop} \
DESTDIR=%{buildroot} \ DESTDIR=%{buildroot} \
BUILD_DESTDIR=%{_builddir}/%{buildsubdir}/install.dir \ BUILD_DESTDIR=%{_builddir}/%{buildsubdir}/install.dir \
-j1 install install
# Copy the license from the Debian package directory. # Copy the license from the Debian package directory.
cp coriolis/bootstrap/debian/copyright %{buildroot}%{_datadir}/doc/coriolis2/COPYRIGHT cp coriolis/bootstrap/debian/copyright %{buildroot}%{_datadir}/doc/coriolis2/COPYRIGHT
#%__rm -rf %{buildroot}%{coriolisTop}/share/doc/coriolis2 %if %{with_binarytar}
cd %{buildroot}%{coriolisTop}
# Removing undistributed binaries. tar -jcf %{_sourcedir}/%{name}-%{version}-%{release}.bin-%{_arch}.tar.bz2 \
#%__rm -f %{buildroot}%{coriolisTop}/bin/{cx2y,kite-text} bin %{_lib} share
%endif
%clean %clean
@ -123,11 +133,10 @@ Development files for the Coriolis 2 package.
%{coriolisTop}/%{python_sitedir}/crlcore/helpers/*.py* %{coriolisTop}/%{python_sitedir}/crlcore/helpers/*.py*
%{coriolisTop}/%{python_sitedir}/kite/*.py* %{coriolisTop}/%{python_sitedir}/kite/*.py*
%{coriolisTop}/%{python_sitedir}/unicorn/*.py* %{coriolisTop}/%{python_sitedir}/unicorn/*.py*
#%config(noreplace) %{_sysconfdir}/ld.so.conf.d/* %{_sysconfdir}/coriolis2/*.py
%config(noreplace) %{_sysconfdir}/coriolis2/*.conf %config(noreplace) %{_sysconfdir}/coriolis2/*.conf
%config(noreplace) %{_sysconfdir}/coriolis2/*/*.conf %config(noreplace) %{_sysconfdir}/coriolis2/*/*.conf
%config(noreplace) %{_sysconfdir}/coriolis2/*.xml %config(noreplace) %{_sysconfdir}/coriolis2/*.xml
%config(noreplace) %{_sysconfdir}/coriolis2/*.py*
%config(noreplace) %{_sysconfdir}/coriolis2/stratus.vim %config(noreplace) %{_sysconfdir}/coriolis2/stratus.vim
%config(noreplace) %{coriolisTop}/share/coriolis2/flute-3.1/*.dat %config(noreplace) %{coriolisTop}/share/coriolis2/flute-3.1/*.dat
@ -137,7 +146,6 @@ Development files for the Coriolis 2 package.
%dir %{coriolisTop}/%{_lib} %dir %{coriolisTop}/%{_lib}
%dir %{coriolisTop}/share/cmake/Modules %dir %{coriolisTop}/share/cmake/Modules
%dir %{coriolisTop}/include %dir %{coriolisTop}/include
%dir %{coriolisTop}/include/coloquinte
%dir %{coriolisTop}/include/vlsisapd %dir %{coriolisTop}/include/vlsisapd
%dir %{coriolisTop}/include/vlsisapd/utilities %dir %{coriolisTop}/include/vlsisapd/utilities
%dir %{coriolisTop}/include/vlsisapd/agds %dir %{coriolisTop}/include/vlsisapd/agds
@ -148,6 +156,7 @@ Development files for the Coriolis 2 package.
%dir %{coriolisTop}/include/vlsisapd/configuration %dir %{coriolisTop}/include/vlsisapd/configuration
%dir %{coriolisTop}/include/vlsisapd/dtr %dir %{coriolisTop}/include/vlsisapd/dtr
%dir %{coriolisTop}/include/vlsisapd/openChams %dir %{coriolisTop}/include/vlsisapd/openChams
%dir %{coriolisTop}/include/coriolis2/coloquinte
%dir %{coriolisTop}/include/coriolis2/hurricane %dir %{coriolisTop}/include/coriolis2/hurricane
%dir %{coriolisTop}/include/coriolis2/hurricane/viewer %dir %{coriolisTop}/include/coriolis2/hurricane/viewer
%dir %{coriolisTop}/include/coriolis2/hurricane/isobar %dir %{coriolisTop}/include/coriolis2/hurricane/isobar
@ -162,7 +171,6 @@ Development files for the Coriolis 2 package.
%dir %{coriolisTop}/include/coriolis2/unicorn %dir %{coriolisTop}/include/coriolis2/unicorn
%{coriolisTop}/%{_lib}/*.so %{coriolisTop}/%{_lib}/*.so
%{coriolisTop}/share/cmake/Modules/*.cmake %{coriolisTop}/share/cmake/Modules/*.cmake
%{coriolisTop}/include/coloquinte/*.hxx
%{coriolisTop}/include/vlsisapd/utilities/*.h %{coriolisTop}/include/vlsisapd/utilities/*.h
%{coriolisTop}/include/vlsisapd/agds/*.h %{coriolisTop}/include/vlsisapd/agds/*.h
%{coriolisTop}/include/vlsisapd/cif/*.h %{coriolisTop}/include/vlsisapd/cif/*.h
@ -172,6 +180,7 @@ Development files for the Coriolis 2 package.
%{coriolisTop}/include/vlsisapd/configuration/*.h %{coriolisTop}/include/vlsisapd/configuration/*.h
%{coriolisTop}/include/vlsisapd/dtr/*.h %{coriolisTop}/include/vlsisapd/dtr/*.h
%{coriolisTop}/include/vlsisapd/openChams/*.h %{coriolisTop}/include/vlsisapd/openChams/*.h
%{coriolisTop}/include/coriolis2/coloquinte/*.hxx
%{coriolisTop}/include/coriolis2/hurricane/*.h %{coriolisTop}/include/coriolis2/hurricane/*.h
%{coriolisTop}/include/coriolis2/hurricane/viewer/*.h %{coriolisTop}/include/coriolis2/hurricane/viewer/*.h
%{coriolisTop}/include/coriolis2/hurricane/isobar/*.h %{coriolisTop}/include/coriolis2/hurricane/isobar/*.h

View File

@ -1,4 +1,4 @@
# -*- explicit-buffer-name: "CMakeLists.txt<etesian>" -*- # -*- explicit-buffer-name: "CMakeLists.txt<coloquinte>" -*-
set(CMAKE_LEGACY_CYGWIN_WIN32 0) set(CMAKE_LEGACY_CYGWIN_WIN32 0)
project(COLOQUINTE) project(COLOQUINTE)
@ -14,16 +14,13 @@
set_cmake_policies() set_cmake_policies()
set_lib_link_mode() set_lib_link_mode()
setup_boost(program_options python regex) setup_boost()
find_package(LibXml2 REQUIRED) find_package(Libexecinfo REQUIRED)
find_package(PythonLibs REQUIRED)
find_package(PythonSitePackages REQUIRED) if(WITH_OPENMP)
find_package(VLSISAPD REQUIRED) add_definitions( -fopenmp )
find_package(LEFDEF REQUIRED) endif()
find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED)
find_package(Libexecinfo REQUIRED)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(cmake_modules) add_subdirectory(cmake_modules)

View File

@ -18,7 +18,7 @@ IF(UNIX)
FIND_PATH(COLOQUINTE_INCLUDE_PATH NAMES coloquinte/netlist.hxx PATHS FIND_PATH(COLOQUINTE_INCLUDE_PATH NAMES coloquinte/netlist.hxx PATHS
# Look in other places. # Look in other places.
${CORIOLIS_DIR_SEARCH} ${CORIOLIS_DIR_SEARCH}
PATH_SUFFIXES include/coriolis PATH_SUFFIXES include/coriolis2
# Help the user find it if we cannot. # Help the user find it if we cannot.
DOC "The ${COLOQUINTE_INCLUDE_PATH_DESCRIPTION}" DOC "The ${COLOQUINTE_INCLUDE_PATH_DESCRIPTION}"
) )

View File

@ -1,9 +1,6 @@
# -*- explicit-buffer-name: "CMakeLists.txt<Coloquinte/src>" -*- # -*- explicit-buffer-name: "CMakeLists.txt<coloquinte/src>" -*-
include_directories( ${COLOQUINTE_SOURCE_DIR}/src include_directories( ${COLOQUINTE_SOURCE_DIR}/src
${CORIOLIS_INCLUDE_DIR}
${HURRICANE_INCLUDE_DIR}
${CONFIGURATION_INCLUDE_DIR}
) )
set ( includes coloquinte/circuit.hxx set ( includes coloquinte/circuit.hxx

View File

@ -359,9 +359,8 @@ Main building prerequisites:
* latex * latex
* latex2html. * latex2html.
* python-docutils (for reStructuredText). * python-docutils (for reStructuredText).
* |Coloquinte| (https://github.com/Coloquinte/Coloquinte.git).
|Coloquinte| requires the |LEMON| component from |Coin-Or| (`Coin Or Home`_). The |Coloquinte| component requires the |LEMON| component from |Coin-Or| (`Coin Or Home`_).
A repository of |Coin-Or| packages backported from |Fedora| 21 is available here: A repository of |Coin-Or| packages backported from |Fedora| 21 is available here:
* |SL6|: `ftp://pub/linux/distributions/slsoc/slsoc/soc/addons/i386/RPMS <http://ftp.lip6.fr/pub/linux/distributions/slsoc/slsoc/soc/addons/i386/repoview>`_ * |SL6|: `ftp://pub/linux/distributions/slsoc/slsoc/soc/addons/i386/RPMS <http://ftp.lip6.fr/pub/linux/distributions/slsoc/slsoc/soc/addons/i386/repoview>`_
@ -387,7 +386,6 @@ automatically created either by |ccb| or the build system.
+--------------------------+-----------------------------------------------------------------------------+ +--------------------------+-----------------------------------------------------------------------------+
| | Sources root | | ~/coriolis-2.x/src | | | Sources root | | ~/coriolis-2.x/src |
| | **under git** | | ~/coriolis-2.x/src/coriolis | | | **under git** | | ~/coriolis-2.x/src/coriolis |
| | **under git** | | ~/coriolis-2.x/src/importeds/Coloquinte |
+--------------------------+-----------------------------------------------------------------------------+ +--------------------------+-----------------------------------------------------------------------------+
| **Architecture Dependant Build** | | **Architecture Dependant Build** |
+--------------------------+-----------------------------------------------------------------------------+ +--------------------------+-----------------------------------------------------------------------------+
@ -434,15 +432,10 @@ The first step is to create the source directory and pull the |git| repository:
dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src dummy@lepka:~$ mkdir -p ~/coriolis-2.x/src
dummy@lepka:~$ cd ~/coriolis-2.x/src dummy@lepka:~$ cd ~/coriolis-2.x/src
dummy@lepka:~$ git clone https://www-soc.lip6.fr/git/coriolis.git dummy@lepka:~$ git clone https://www-soc.lip6.fr/git/coriolis.git
dummy@lepka:~$ mkdir importeds
dummy@lepka:~$ cd importeds
dummy@lepka:~$ git clone https://github.com/Coloquinte/Coloquinte.git
dummy@lepka:~$ cd ../coriolis
Second and final step, build & install: :: Second and final step, build & install: ::
dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ dummy@lepka:src$ ./bootstrap/ccp.py --project=coriolis \
--project=coriolis \
--make="-j4 install" --make="-j4 install"
dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \ dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \
--doc --make="-j1 install" --doc --make="-j1 install"
@ -453,8 +446,7 @@ then we generate the documentation in ``-j1``
Under |RHEL6| or clones, you must build using the |devtoolset2|: :: Under |RHEL6| or clones, you must build using the |devtoolset2|: ::
dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ dummy@lepka:src$ ./bootstrap/ccp.py --project=coriolis \
--project=coriolis \
--devtoolset-2 --make="-j4 install" --devtoolset-2 --make="-j4 install"
If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument. If you want to uses Qt 5 instead of Qt 4, you may add the ``--qt5`` argument.
@ -996,7 +988,6 @@ Etesian -- Placer
The |Etesian| placer is a state of the art (as of 2015) analytical placer. It is The |Etesian| placer is a state of the art (as of 2015) analytical placer. It is
within ``5%`` of other placers' solutions, but is normally a bit worse than ePlace. within ``5%`` of other placers' solutions, but is normally a bit worse than ePlace.
This |Coriolis| tool is actually an encapsulation of |Coloquinte| which *is* the placer. This |Coriolis| tool is actually an encapsulation of |Coloquinte| which *is* the placer.
|Coloquinte| is provided as a separate library, see the building instructions.
.. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have .. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have
two different placements. So, either you manually make a clone of it or you two different placements. So, either you manually make a clone of it or you