From bacea5214c300734da7b8911ae9b9e5050484c8c Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 8 Apr 2015 17:45:45 +0200 Subject: [PATCH] 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. --- bootstrap/Makefile.package | 78 +++---- bootstrap/builder/Builder.py | 200 ++++-------------- bootstrap/ccb.py | 2 + bootstrap/cmake_modules/FindBootstrap.cmake | 28 ++- bootstrap/coriolis2.spec.in | 43 ++-- coloquinte/CMakeLists.txt | 17 +- coloquinte/cmake_modules/FindCOLOQUINTE.cmake | 2 +- coloquinte/src/CMakeLists.txt | 5 +- documentation/UsersGuide/UsersGuide.rst | 15 +- 9 files changed, 128 insertions(+), 262 deletions(-) diff --git a/bootstrap/Makefile.package b/bootstrap/Makefile.package index 6aa7de7f..4fced53e 100644 --- a/bootstrap/Makefile.package +++ b/bootstrap/Makefile.package @@ -2,27 +2,24 @@ # -*- Makefile -*- # Mimicking the behavior of a top-level autotool generated Makefile. -define pythonSiteLocator = -import os.path -import distutils.sysconfig -print distutils.sysconfig.get_python_lib() -endef + pythonSiteLocator = "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1)" + 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 \ - equinox solstice cumulus stratus1 unicorn documentation - 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 + environment = IMPORTEDS_TOP=$(IMPORTEDS_TOP); export IMPORTEDS_TOP; \ + CORIOLIS_TOP=$(CORIOLIS_TOP); export CORIOLIS_TOP .PHONY: build install FORCE + all: build clean: @@ -39,20 +36,15 @@ build: FORCE "x86_64") cmakeArgs="-D LIB_SUFFIX:STRING=64";; \ *) cmakeArgs="";; \ esac; \ - echo "** Building tool Coloquinte"; \ - mkdir -p build.dir/Coloquinte; \ - cd build.dir/Coloquinte; \ - cmake -D CMAKE_BUILD_TYPE:STRING=RELEASE \ - -D BUILD_SHARED_LIBS:STRING=ON \ - -D BUILD_DOC:STRING=OFF \ - -D CMAKE_INSTALL_PREFIX:STRING=$(CORIOLIS_TOP) \ - -D DESTDIR:STRING=$(BUILD_DESTDIR) \ - $${cmakeArgs} \ - ../../importeds/Coloquinte \ - || exit 1; \ - make DESTDIR=$(BUILD_DESTDIR) install \ - || exit 1; \ - cd ../..; \ + case "$${X_SCLS}" in \ + *"devtoolset"*) \ + cmakeArgs="$${cmakeArgs} -D Boost_NO_SYSTEM_PATHS:STRING=TRUE"; \ + BOOST_INCLUDEDIR="/opt/rh/devtoolset-2/root/usr/include"; \ + BOOST_LIBRARYDIR="/opt/rh/devtoolset-2/root/usr/lib"; \ + export BOOST_INCLUDEDIR BOOST_LIBRARYDIR; \ + echo "** Using $${X_SCLS}."; \ + ;; \ + esac; \ for tool in $(tools); do \ echo "** Building tool $${tool}"; \ mkdir -p build.dir/$$tool; \ @@ -65,7 +57,7 @@ build: FORCE $${cmakeArgs} \ ../../coriolis/$$tool \ || exit 1; \ - make DESTDIR=$(BUILD_DESTDIR) install \ + make DESTDIR=$(BUILD_DESTDIR) $(SMP_MFLAGS) install \ || exit 1; \ cd ../..; \ done @@ -76,19 +68,6 @@ install: FORCE "x86_64") commonCMakeArgs="-D LIB_SUFFIX:STRING=64";; \ *) commonCMakeArgs="";; \ 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 \ echo "** Installing tool $${tool}"; \ cd build.dir/$$tool; \ @@ -114,10 +93,11 @@ install: FORCE || exit 1; \ cd ../..; \ done; \ - rm -rf $(DESTDIR)$(CORIOLIS_TOP)/bin/ccb \ - $(DESTDIR)$(CORIOLIS_TOP)/bin/cx2y \ - $(DESTDIR)$(CORIOLIS_TOP)/bin/*.bin \ - $(DESTDIR)$(PYTHON_SITEDIR)/builder \ - $(DESTDIR)/usr/share/cmake/Modules/GetGitRevisionDescription.cmake.in + rm -rfv $(DESTDIR)$(rootPrefix)/etc/coriolis2/coriolis2.sh \ + $(DESTDIR)$(prefix)/bin/ccb \ + $(DESTDIR)$(prefix)/bin/cx2y \ + $(DESTDIR)$(prefix)/bin/*.bin \ + $(DESTDIR)$(rootPrefix)$(PYTHON_SITEDIR)/builder \ + $(DESTDIR)$(prefix)/share/cmake/Modules/GetGitRevisionDescription.cmake.in FORCE: diff --git a/bootstrap/builder/Builder.py b/bootstrap/builder/Builder.py index 24d1cfa7..fc8031c9 100644 --- a/bootstrap/builder/Builder.py +++ b/bootstrap/builder/Builder.py @@ -37,6 +37,7 @@ class Builder: self._clang = False self._devtoolset2 = False self._qt5 = False + self._openmp = False self._enableShared = "ON" self._enableDoc = "OFF" self._checkDatabase = "OFF" @@ -62,6 +63,7 @@ class Builder: elif attribute == "clang": self._clang = value elif attribute == "devtoolset2": self._devtoolset2 = value elif attribute == "qt5": self._qt5 = value + elif attribute == "openmp": self._openmp = value elif attribute == "enableDoc": self._enableDoc = value elif attribute == "enableShared": self._enableShared = value elif attribute == "checkDatabase": self._checkDatabase = value @@ -128,9 +130,11 @@ class Builder: commandAsString = '' for i in range(len(command)): if i: commandAsString += ' ' - commandAsString += command[i] + if ' ' in command[i]: commandAsString += '"'+command[i]+'"' + else: commandAsString += command[i] command = [ 'scl', 'enable', 'devtoolset-2', commandAsString ] + #print command sys.stdout.flush () sys.stderr.flush () child = subprocess.Popen ( command, env=self._environment, stdout=None ) @@ -164,6 +168,7 @@ class Builder: if self._ninja: command += [ "-G", "Ninja" ] if self._devtoolset2: command += [ "-D", "Boost_NO_SYSTEM_PATHS: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 , "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared @@ -209,79 +214,6 @@ class Builder: 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 ): rawArchive = self.tarballDir+'/'+projectName+'.tar' @@ -304,32 +236,29 @@ class Builder: command = [ 'rm', 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. - command = [ "/bin/ln", "-s", self.archiveDir+"/coriolis/bootstrap/Makefile.package" + command = [ "/bin/ln", "-s", "./coriolis/bootstrap/Makefile.package" , self.archiveDir+"/Makefile" ] 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" ) + + # # 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) os.chdir ( self.tarballDir ) @@ -413,31 +342,6 @@ class Builder: 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 ): if self.gitHash == "x": self._guessGitHash ( self.getProject(projects[0]) ) @@ -454,39 +358,6 @@ class Builder: os.makedirs ( self.tarballDir ) 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 @@ -520,9 +391,17 @@ class Builder: for rpmDir in [ "SOURCES", "SPECS", "BUILD", "tmp" , "SRPMS", "RPMS/i386", "RPMS/i686", "RPMS/x86_64" ]: - rpmFullDir = os.path.join ( self.rpmbuildDir, rpmDir ) - if not os.path.isdir(rpmFullDir): - os.makedirs ( rpmFullDir ) + rpmFullDir = os.path.join ( self.rpmbuildDir, rpmDir ) + if not os.path.isdir(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" ) rpmSourceFile = os.path.join ( self.rpmbuildDir, "SOURCES", self.sourceTarBz2 ) @@ -540,9 +419,12 @@ class Builder: command = [ "/usr/bin/rpmbuild" , "--define", "_topdir %s" % self.rpmbuildDir , "--define", "_tmppath %s" % self.tmppathDir - , "--define", "_enable_debug_packages 0" - , "-ba", "--with", "binarytar", rpmSpecFile ] - + #, "--define", "_enable_debug_packages 0" + , "--with", "binarytar" ] + if self._devtoolset2 == True: + command += [ "--define", "scl devtoolset-2" ] + command += [ "-ba", "--clean", rpmSpecFile ] + self._execute ( command, "Rebuild rpm packages" ) return diff --git a/bootstrap/ccb.py b/bootstrap/ccb.py index 3bdc8811..e209cb77 100755 --- a/bootstrap/ccb.py +++ b/bootstrap/ccb.py @@ -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 ( "--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 ( "--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 ( "--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\")." ) @@ -282,6 +283,7 @@ else: if options.clang: builder.clang = True if options.devtoolset2: builder.devtoolset2 = True if options.qt5: builder.qt5 = True + if options.openmp: builder.openmp = True if options.makeArguments: builder.makeArguments = options.makeArguments #if options.svnMethod: builder.svnMethod = options.svnMethod #if options.svnTag: builder.svnTag = options.svnTag diff --git a/bootstrap/cmake_modules/FindBootstrap.cmake b/bootstrap/cmake_modules/FindBootstrap.cmake index 9760ed94..856320d0 100644 --- a/bootstrap/cmake_modules/FindBootstrap.cmake +++ b/bootstrap/cmake_modules/FindBootstrap.cmake @@ -136,8 +136,8 @@ if(NOT ${library}_INCLUDE_PATH) set(${configname}_FOUND "NOTFOUND") - endif(NOT ${library}_INCLUDE_PATH) - endmacro ( set_libraries_path ) + endif() + endmacro() # @@ -269,16 +269,24 @@ # macro(setup_sysconfdir INSTALLDIR) message("-- Checking installation directory <${INSTALLDIR}>") - 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) - else(IS_USR OR IS_OPT) + string(REGEX MATCH "^/opt/rh/devtoolset-2/root/usr$" IS_OPT_RH ${INSTALLDIR}) + if(IS_OPT_RH) + message("-- Using devtoolset-2 install tree /opt/rh/devtoolset-2/root/etc.") + set(SYS_CONF_DIR "/opt/rh/devtoolset-2/root/etc" CACHE STRING "System configuration directory (/etc)" FORCE) + else() + 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 /etc.") set(SYS_CONF_DIR "etc" CACHE STRING "System configuration directory (/etc)" FORCE) - endif(IS_USR OR IS_OPT) - endmacro(setup_sysconfdir) + endif() + endmacro() # diff --git a/bootstrap/coriolis2.spec.in b/bootstrap/coriolis2.spec.in index 4fd6f3cf..aa5c30ba 100644 --- a/bootstrap/coriolis2.spec.in +++ b/bootstrap/coriolis2.spec.in @@ -1,14 +1,17 @@ +%{?scl:%{?scl_package:%scl_package coriolis2}} + %define coriolisVersion 2.1 %define coriolisTop %{_prefix} %define githash @githash@ %define revdate @revdate@ +%define with_binarytar %{?_with_binarytar:1}%{!?_with_binarytar:0} %define python_sitedir %{_lib}/%(python -c ' import os.path 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] ) ') @@ -19,21 +22,24 @@ print os.path.join ( pathes[-2], pathes[-1] ) %endif -Name: coriolis2 +Name: %{?scl_prefix}coriolis2 Summary: Coriolis 2 VLSI CAD System Version: %{coriolisVersion} Release: 1.%{revdate}git%{githash}%{dist} License: BSD/LGPL/GPL/FLUTE 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/ Packager: Jean-Paul Chaput + +%{!?scl:%define pkg_name %{name}} +%{?scl:Requires:%scl_runtime} Requires(post): ldconfig -Requires: boost >= 1.33.1 +Requires: %{?scl_prefix}boost >= 1.53.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 -BuildRoot: %{_tmppath}/root-%{name} +BuildRoot: %{_tmppath}/root-%{pkg_name} %description @@ -57,7 +63,7 @@ Development files for the Coriolis 2 package. %prep -%setup -n %{name}-%{version}.%{revdate}git%{githash} +%setup -n %{pkg_name}-%{version}.%{revdate}git%{githash} %build @@ -65,12 +71,14 @@ Development files for the Coriolis 2 package. IMPORTEDS_TOP=%{coriolisTop}; export IMPORTEDS_TOP CORIOLIS_TOP=%{coriolisTop}; export CORIOLIS_TOP + SMP_MFLAGS=%{_smp_mflags}; export SMP_MFLAGS # Do build & install in one step, except for documentation. make -f coriolis/bootstrap/Makefile.package \ + prefix=%{coriolisTop} \ DESTDIR=%{buildroot} \ BUILD_DESTDIR=%{_builddir}/%{buildsubdir}/install.dir \ - %{_smp_mflags} build + build %install @@ -79,17 +87,19 @@ Development files for the Coriolis 2 package. # Install & build documentation, in -j1. make -f coriolis/bootstrap/Makefile.package \ + prefix=%{coriolisTop} \ DESTDIR=%{buildroot} \ BUILD_DESTDIR=%{_builddir}/%{buildsubdir}/install.dir \ - -j1 install + install # Copy the license from the Debian package directory. cp coriolis/bootstrap/debian/copyright %{buildroot}%{_datadir}/doc/coriolis2/COPYRIGHT -#%__rm -rf %{buildroot}%{coriolisTop}/share/doc/coriolis2 - -# Removing undistributed binaries. -#%__rm -f %{buildroot}%{coriolisTop}/bin/{cx2y,kite-text} +%if %{with_binarytar} + cd %{buildroot}%{coriolisTop} + tar -jcf %{_sourcedir}/%{name}-%{version}-%{release}.bin-%{_arch}.tar.bz2 \ + bin %{_lib} share +%endif %clean @@ -123,11 +133,10 @@ Development files for the Coriolis 2 package. %{coriolisTop}/%{python_sitedir}/crlcore/helpers/*.py* %{coriolisTop}/%{python_sitedir}/kite/*.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/*.xml -%config(noreplace) %{_sysconfdir}/coriolis2/*.py* %config(noreplace) %{_sysconfdir}/coriolis2/stratus.vim %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}/share/cmake/Modules %dir %{coriolisTop}/include -%dir %{coriolisTop}/include/coloquinte %dir %{coriolisTop}/include/vlsisapd %dir %{coriolisTop}/include/vlsisapd/utilities %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/dtr %dir %{coriolisTop}/include/vlsisapd/openChams +%dir %{coriolisTop}/include/coriolis2/coloquinte %dir %{coriolisTop}/include/coriolis2/hurricane %dir %{coriolisTop}/include/coriolis2/hurricane/viewer %dir %{coriolisTop}/include/coriolis2/hurricane/isobar @@ -162,7 +171,6 @@ Development files for the Coriolis 2 package. %dir %{coriolisTop}/include/coriolis2/unicorn %{coriolisTop}/%{_lib}/*.so %{coriolisTop}/share/cmake/Modules/*.cmake -%{coriolisTop}/include/coloquinte/*.hxx %{coriolisTop}/include/vlsisapd/utilities/*.h %{coriolisTop}/include/vlsisapd/agds/*.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/dtr/*.h %{coriolisTop}/include/vlsisapd/openChams/*.h +%{coriolisTop}/include/coriolis2/coloquinte/*.hxx %{coriolisTop}/include/coriolis2/hurricane/*.h %{coriolisTop}/include/coriolis2/hurricane/viewer/*.h %{coriolisTop}/include/coriolis2/hurricane/isobar/*.h diff --git a/coloquinte/CMakeLists.txt b/coloquinte/CMakeLists.txt index 81d095fe..a773e8b2 100644 --- a/coloquinte/CMakeLists.txt +++ b/coloquinte/CMakeLists.txt @@ -1,4 +1,4 @@ -# -*- explicit-buffer-name: "CMakeLists.txt" -*- +# -*- explicit-buffer-name: "CMakeLists.txt" -*- set(CMAKE_LEGACY_CYGWIN_WIN32 0) project(COLOQUINTE) @@ -14,16 +14,13 @@ set_cmake_policies() set_lib_link_mode() - setup_boost(program_options python regex) + setup_boost() - find_package(LibXml2 REQUIRED) - find_package(PythonLibs REQUIRED) - find_package(PythonSitePackages REQUIRED) - find_package(VLSISAPD REQUIRED) - find_package(LEFDEF REQUIRED) - find_package(HURRICANE REQUIRED) - find_package(CORIOLIS REQUIRED) - find_package(Libexecinfo REQUIRED) + find_package(Libexecinfo REQUIRED) + + if(WITH_OPENMP) + add_definitions( -fopenmp ) + endif() add_subdirectory(src) add_subdirectory(cmake_modules) diff --git a/coloquinte/cmake_modules/FindCOLOQUINTE.cmake b/coloquinte/cmake_modules/FindCOLOQUINTE.cmake index 9f7d26ff..2787bd90 100644 --- a/coloquinte/cmake_modules/FindCOLOQUINTE.cmake +++ b/coloquinte/cmake_modules/FindCOLOQUINTE.cmake @@ -18,7 +18,7 @@ IF(UNIX) FIND_PATH(COLOQUINTE_INCLUDE_PATH NAMES coloquinte/netlist.hxx PATHS # Look in other places. ${CORIOLIS_DIR_SEARCH} - PATH_SUFFIXES include/coriolis + PATH_SUFFIXES include/coriolis2 # Help the user find it if we cannot. DOC "The ${COLOQUINTE_INCLUDE_PATH_DESCRIPTION}" ) diff --git a/coloquinte/src/CMakeLists.txt b/coloquinte/src/CMakeLists.txt index 7e0964fb..11449af8 100644 --- a/coloquinte/src/CMakeLists.txt +++ b/coloquinte/src/CMakeLists.txt @@ -1,9 +1,6 @@ -# -*- explicit-buffer-name: "CMakeLists.txt" -*- +# -*- explicit-buffer-name: "CMakeLists.txt" -*- include_directories( ${COLOQUINTE_SOURCE_DIR}/src - ${CORIOLIS_INCLUDE_DIR} - ${HURRICANE_INCLUDE_DIR} - ${CONFIGURATION_INCLUDE_DIR} ) set ( includes coloquinte/circuit.hxx diff --git a/documentation/UsersGuide/UsersGuide.rst b/documentation/UsersGuide/UsersGuide.rst index 8b24f5e9..c7ab3301 100644 --- a/documentation/UsersGuide/UsersGuide.rst +++ b/documentation/UsersGuide/UsersGuide.rst @@ -359,9 +359,8 @@ Main building prerequisites: * latex * latex2html. * 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: * |SL6|: `ftp://pub/linux/distributions/slsoc/slsoc/soc/addons/i386/RPMS `_ @@ -387,7 +386,6 @@ automatically created either by |ccb| or the build system. +--------------------------+-----------------------------------------------------------------------------+ | | Sources root | | ~/coriolis-2.x/src | | | **under git** | | ~/coriolis-2.x/src/coriolis | -| | **under git** | | ~/coriolis-2.x/src/importeds/Coloquinte | +--------------------------+-----------------------------------------------------------------------------+ | **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:~$ cd ~/coriolis-2.x/src 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: :: - dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ - --project=coriolis \ + dummy@lepka:src$ ./bootstrap/ccp.py --project=coriolis \ --make="-j4 install" dummy@lepka:src$ ./bootstrap/ccb.py --project=coriolis \ --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|: :: - dummy@lepka:src$ ./bootstrap/ccp.py --project=importeds \ - --project=coriolis \ + dummy@lepka:src$ ./bootstrap/ccp.py --project=coriolis \ --devtoolset-2 --make="-j4 install" 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 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. -|Coloquinte| is provided as a separate library, see the building instructions. .. note:: *Instance Uniquification Unsupported:* a same logical instance cannot have two different placements. So, either you manually make a clone of it or you