Basic package file for plumed and boilerplate for external intel mpi

This commit is contained in:
Andrew Williams
2016-08-15 11:19:40 +01:00
parent e6a122417a
commit 3edfa390f7
3 changed files with 46 additions and 76 deletions

5
etc/spack/packages.yaml Normal file
View File

@@ -0,0 +1,5 @@
packages:
intelmpi:
paths:
intelmpi@4.1.0%gcc@4.4.7 arch=linux-x86_64: /software/compilers/intel/13.0/impi/4.1.0.024
buildable: False

View File

@@ -0,0 +1,17 @@
from spack import *
class Intelmpi(Package):
"""Intel MPI"""
homepage = "http://www.example.com"
url = "https://software.intel.com/en-us/intel-mpi-library"
version('4.1.0')
# Provides a virtual dependency 'mpi'
provides('mpi')
# def install(self, spec, prefix):
# configure("--prefix=%s" % prefix)
# make()
# make("install")

View File

@@ -22,91 +22,39 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
import subprocess #
# This is a template package file for Spack. We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
# spack install plumed
#
# You can edit this file again by typing:
#
# spack edit plumed
#
# See the Spack documentation for more information on packaging.
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import * from spack import *
class Plumed(Package): class Plumed(Package):
"""PLUMED is an open source library for free energy calculations in """PLUMED is an open source library for free energy calculations in
molecular systems which works together with some of the most popular molecular systems which works together with some of the most popular
molecular dynamics engines. molecular dynamics engines."""
Free energy calculations can be performed as a function of many order # FIXME: Add a proper url for your package's homepage here.
parameters with a particular focus on biological problems, using state homepage = "http://www.plumed.org/home"
of the art methods such as metadynamics, umbrella sampling and url = "https://github.com/plumed/plumed2"
Jarzynski-equation based steered MD.
The software, written in C++, can be easily interfaced with both fortran version('2.2.3', git="https://github.com/plumed/plumed2.git", tag='v2.2.3')
and C/C++ codes.
"""
homepage = 'http://www.plumed.org/'
url = 'https://github.com/plumed/plumed2/archive/v2.2.3.tar.gz'
version('2.2.3', 'a6e3863e40aac07eb8cf739cbd14ecf8') # FIXME: Add additional dependencies if required.
depends_on('intelmpi')
variant('shared', default=True, description='Builds shared libraries')
variant('mpi', default=True, description='Activates MPI support')
variant('gsl', default=True, description='Activates GSL support')
depends_on('zlib')
depends_on('blas')
depends_on('lapack')
depends_on('mpi', when='+mpi')
depends_on('gsl', when='+gsl')
# Dictionary mapping PLUMED versions to the patches it provides
# interactively
plumed_patches = {
'2.2.3': {
'amber-14': '1',
'gromacs-4.5.7': '2',
'gromacs-4.6.7': '3',
'gromacs-5.0.7': '4',
'gromacs-5.1.2': '5',
'lammps-6Apr13': '6',
'namd-2.8': '7',
'namd-2.9': '8',
'espresso-5.0.2': '9'
}
}
def apply_patch(self, other):
plumed = subprocess.Popen(
[join_path(self.spec.prefix.bin, 'plumed'), 'patch', '-p'],
stdin=subprocess.PIPE
)
opts = Plumed.plumed_patches[str(self.version)]
search = '{0.name}-{0.version}'.format(other)
choice = opts[search] + '\n'
plumed.stdin.write(choice)
plumed.wait()
def setup_dependent_package(self, module, ext_spec):
# Make plumed visible from dependent packages
module.plumed = Executable(join_path(self.spec.prefix.bin, 'plumed'))
def install(self, spec, prefix): def install(self, spec, prefix):
# From plumed docs : # FIXME: Unknown build system
# Also consider that this is different with respect to what some other
# configure script does in that variables such as MPICXX are
# completely ignored here. In case you work on a machine where CXX is
# set to a serial compiler and MPICXX to a MPI compiler, to compile
# with MPI you should use:
#
# > ./configure CXX="$MPICXX"
configure_opts = [
'CXX={0}'.format(spec['mpi'].mpicxx)
] if '+mpi' in self.spec else []
configure_opts.extend([
'--prefix={0}'.format(prefix),
'--enable-shared={0}'.format('yes' if '+shared' in spec else 'no'),
'--enable-mpi={0}'.format('yes' if '+mpi' in spec else 'no'),
'--enable-gsl={0}'.format('yes' if '+gsl' in spec else 'no')
])
configure(*configure_opts)
make() make()
make('install') make('install')