Merge pull request #1053 from davydden/pkg/dealii_suite_update
update Petsc, Slepc, Trilinos, Superlu-dist and deal.II
This commit is contained in:
commit
c09111bbef
@ -22,28 +22,28 @@
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
__all__ = ['set_install_permissions', 'install', 'install_tree', 'traverse_tree',
|
||||
'expand_user', 'working_dir', 'touch', 'touchp', 'mkdirp',
|
||||
'force_remove', 'join_path', 'ancestor', 'can_access', 'filter_file',
|
||||
'FileFilter', 'change_sed_delimiter', 'is_exe', 'force_symlink',
|
||||
'set_executable', 'copy_mode', 'unset_executable_mode',
|
||||
'remove_dead_links', 'remove_linked_tree', 'find_library_path',
|
||||
'fix_darwin_install_name']
|
||||
|
||||
import os
|
||||
import glob
|
||||
import sys
|
||||
import re
|
||||
import shutil
|
||||
import stat
|
||||
import errno
|
||||
import getpass
|
||||
from contextlib import contextmanager, closing
|
||||
from tempfile import NamedTemporaryFile
|
||||
import subprocess
|
||||
|
||||
import llnl.util.tty as tty
|
||||
from spack.util.compression import ALLOWED_ARCHIVE_TYPES
|
||||
|
||||
__all__ = ['set_install_permissions', 'install', 'install_tree',
|
||||
'traverse_tree',
|
||||
'expand_user', 'working_dir', 'touch', 'touchp', 'mkdirp',
|
||||
'force_remove', 'join_path', 'ancestor', 'can_access',
|
||||
'filter_file',
|
||||
'FileFilter', 'change_sed_delimiter', 'is_exe', 'force_symlink',
|
||||
'set_executable', 'copy_mode', 'unset_executable_mode',
|
||||
'remove_dead_links', 'remove_linked_tree', 'find_library_path',
|
||||
'fix_darwin_install_name', 'to_link_flags']
|
||||
|
||||
|
||||
def filter_file(regex, repl, *filenames, **kwargs):
|
||||
"""Like sed, but uses python regular expressions.
|
||||
@ -69,6 +69,7 @@ def filter_file(regex, repl, *filenames, **kwargs):
|
||||
# Allow strings to use \1, \2, etc. for replacement, like sed
|
||||
if not callable(repl):
|
||||
unescaped = repl.replace(r'\\', '\\')
|
||||
|
||||
def replace_groups_with_groupid(m):
|
||||
def groupid_to_group(x):
|
||||
return m.group(int(x.group(1)))
|
||||
@ -157,9 +158,12 @@ def set_install_permissions(path):
|
||||
def copy_mode(src, dest):
|
||||
src_mode = os.stat(src).st_mode
|
||||
dest_mode = os.stat(dest).st_mode
|
||||
if src_mode & stat.S_IXUSR: dest_mode |= stat.S_IXUSR
|
||||
if src_mode & stat.S_IXGRP: dest_mode |= stat.S_IXGRP
|
||||
if src_mode & stat.S_IXOTH: dest_mode |= stat.S_IXOTH
|
||||
if src_mode & stat.S_IXUSR:
|
||||
dest_mode |= stat.S_IXUSR
|
||||
if src_mode & stat.S_IXGRP:
|
||||
dest_mode |= stat.S_IXGRP
|
||||
if src_mode & stat.S_IXOTH:
|
||||
dest_mode |= stat.S_IXOTH
|
||||
os.chmod(dest, dest_mode)
|
||||
|
||||
|
||||
@ -224,9 +228,10 @@ def force_remove(*paths):
|
||||
for path in paths:
|
||||
try:
|
||||
os.remove(path)
|
||||
except OSError, e:
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
@contextmanager
|
||||
def working_dir(dirname, **kwargs):
|
||||
if kwargs.get('create', False):
|
||||
@ -240,7 +245,7 @@ def working_dir(dirname, **kwargs):
|
||||
|
||||
def touch(path):
|
||||
"""Creates an empty file at the specified path."""
|
||||
with open(path, 'a') as file:
|
||||
with open(path, 'a'):
|
||||
os.utime(path, None)
|
||||
|
||||
|
||||
@ -253,7 +258,7 @@ def touchp(path):
|
||||
def force_symlink(src, dest):
|
||||
try:
|
||||
os.symlink(src, dest)
|
||||
except OSError as e:
|
||||
except OSError:
|
||||
os.remove(dest)
|
||||
os.symlink(src, dest)
|
||||
|
||||
@ -275,7 +280,7 @@ def ancestor(dir, n=1):
|
||||
|
||||
def can_access(file_name):
|
||||
"""True if we have read/write access to the file."""
|
||||
return os.access(file_name, os.R_OK|os.W_OK)
|
||||
return os.access(file_name, os.R_OK | os.W_OK)
|
||||
|
||||
|
||||
def traverse_tree(source_root, dest_root, rel_path='', **kwargs):
|
||||
@ -343,13 +348,14 @@ def traverse_tree(source_root, dest_root, rel_path='', **kwargs):
|
||||
|
||||
# Treat as a directory
|
||||
if os.path.isdir(source_child) and (
|
||||
follow_links or not os.path.islink(source_child)):
|
||||
follow_links or not os.path.islink(source_child)):
|
||||
|
||||
# When follow_nonexisting isn't set, don't descend into dirs
|
||||
# in source that do not exist in dest
|
||||
if follow_nonexisting or os.path.exists(dest_child):
|
||||
tuples = traverse_tree(source_root, dest_root, rel_child, **kwargs)
|
||||
for t in tuples: yield t
|
||||
tuples = traverse_tree(source_root, dest_root, rel_child, **kwargs) # NOQA: ignore=E501
|
||||
for t in tuples:
|
||||
yield t
|
||||
|
||||
# Treat as a file.
|
||||
elif not ignore(os.path.join(rel_path, f)):
|
||||
@ -379,6 +385,7 @@ def remove_dead_links(root):
|
||||
if not os.path.exists(real_path):
|
||||
os.unlink(path)
|
||||
|
||||
|
||||
def remove_linked_tree(path):
|
||||
"""
|
||||
Removes a directory and its contents. If the directory is a
|
||||
@ -402,28 +409,41 @@ def fix_darwin_install_name(path):
|
||||
Fix install name of dynamic libraries on Darwin to have full path.
|
||||
There are two parts of this task:
|
||||
(i) use install_name('-id',...) to change install name of a single lib;
|
||||
(ii) use install_name('-change',...) to change the cross linking between libs.
|
||||
The function assumes that all libraries are in one folder and currently won't
|
||||
follow subfolders.
|
||||
(ii) use install_name('-change',...) to change the cross linking between
|
||||
libs. The function assumes that all libraries are in one folder and
|
||||
currently won't follow subfolders.
|
||||
|
||||
Args:
|
||||
path: directory in which .dylib files are alocated
|
||||
|
||||
"""
|
||||
libs = glob.glob(join_path(path,"*.dylib"))
|
||||
libs = glob.glob(join_path(path, "*.dylib"))
|
||||
for lib in libs:
|
||||
# fix install name first:
|
||||
subprocess.Popen(["install_name_tool", "-id",lib,lib], stdout=subprocess.PIPE).communicate()[0]
|
||||
long_deps = subprocess.Popen(["otool", "-L",lib], stdout=subprocess.PIPE).communicate()[0].split('\n')
|
||||
subprocess.Popen(["install_name_tool", "-id", lib, lib], stdout=subprocess.PIPE).communicate()[0] # NOQA: ignore=E501
|
||||
long_deps = subprocess.Popen(["otool", "-L", lib], stdout=subprocess.PIPE).communicate()[0].split('\n') # NOQA: ignore=E501
|
||||
deps = [dep.partition(' ')[0][1::] for dep in long_deps[2:-1]]
|
||||
# fix all dependencies:
|
||||
for dep in deps:
|
||||
for loc in libs:
|
||||
if dep == os.path.basename(loc):
|
||||
subprocess.Popen(["install_name_tool", "-change",dep,loc,lib], stdout=subprocess.PIPE).communicate()[0]
|
||||
subprocess.Popen(["install_name_tool", "-change", dep, loc, lib], stdout=subprocess.PIPE).communicate()[0] # NOQA: ignore=E501
|
||||
break
|
||||
|
||||
|
||||
def to_link_flags(library):
|
||||
"""Transforms a path to a <library> into linking flags -L<dir> -l<name>.
|
||||
|
||||
Return:
|
||||
A string of linking flags.
|
||||
"""
|
||||
dir = os.path.dirname(library)
|
||||
# Asume libXYZ.suffix
|
||||
name = os.path.basename(library)[3:].split(".")[0]
|
||||
res = '-L%s -l%s' % (dir, name)
|
||||
return res
|
||||
|
||||
|
||||
def find_library_path(libname, *paths):
|
||||
"""Searches for a file called <libname> in each path.
|
||||
|
||||
|
@ -80,8 +80,8 @@ class Dealii(Package):
|
||||
depends_on("netcdf-cxx", when='+netcdf+mpi')
|
||||
depends_on("oce", when='+oce')
|
||||
depends_on("p4est", when='+p4est+mpi')
|
||||
depends_on("petsc+mpi", when='+petsc+mpi')
|
||||
depends_on("slepc", when='+slepc+petsc+mpi')
|
||||
depends_on("petsc@:3.6.4+mpi", when='+petsc+mpi') # FIXME: update after 3.7 is supported upstream. # NOQA: ignore=E501
|
||||
depends_on("slepc@:3.6.3", when='+slepc+petsc+mpi')
|
||||
depends_on("trilinos", when='+trilinos+mpi')
|
||||
|
||||
# developer dependnecies
|
||||
@ -108,12 +108,11 @@ def install(self, spec, prefix):
|
||||
# of Spack's. Be more specific to avoid this.
|
||||
# Note that both lapack and blas are provided in -DLAPACK_XYZ.
|
||||
'-DLAPACK_FOUND=true',
|
||||
'-DLAPACK_INCLUDE_DIRS=%s;%s' %
|
||||
(spec['lapack'].prefix.include,
|
||||
spec['blas'].prefix.include),
|
||||
'-DLAPACK_LIBRARIES=%s;%s' %
|
||||
(spec['lapack'].lapack_shared_lib,
|
||||
spec['blas'].blas_shared_lib),
|
||||
'-DLAPACK_INCLUDE_DIRS=%s;%s' % (
|
||||
spec['lapack'].prefix.include, spec['blas'].prefix.include),
|
||||
'-DLAPACK_LIBRARIES=%s;%s' % (
|
||||
spec['lapack'].lapack_shared_lib,
|
||||
spec['blas'].blas_shared_lib),
|
||||
'-DMUPARSER_DIR=%s' % spec['muparser'].prefix,
|
||||
'-DUMFPACK_DIR=%s' % spec['suite-sparse'].prefix,
|
||||
'-DTBB_DIR=%s' % spec['tbb'].prefix,
|
||||
@ -168,14 +167,14 @@ def install(self, spec, prefix):
|
||||
if '+netcdf' in spec:
|
||||
options.extend([
|
||||
'-DNETCDF_FOUND=true',
|
||||
'-DNETCDF_LIBRARIES=%s;%s' %
|
||||
(join_path(spec['netcdf-cxx'].prefix.lib,
|
||||
'libnetcdf_c++.%s' % dsuf),
|
||||
join_path(spec['netcdf'].prefix.lib,
|
||||
'libnetcdf.%s' % dsuf)),
|
||||
'-DNETCDF_INCLUDE_DIRS=%s;%s' %
|
||||
(spec['netcdf-cxx'].prefix.include,
|
||||
spec['netcdf'].prefix.include),
|
||||
'-DNETCDF_LIBRARIES=%s;%s' % (
|
||||
join_path(spec['netcdf-cxx'].prefix.lib,
|
||||
'libnetcdf_c++.%s' % dsuf),
|
||||
join_path(spec['netcdf'].prefix.lib,
|
||||
'libnetcdf.%s' % dsuf)),
|
||||
'-DNETCDF_INCLUDE_DIRS=%s;%s' % (
|
||||
spec['netcdf-cxx'].prefix.include,
|
||||
spec['netcdf'].prefix.include),
|
||||
])
|
||||
else:
|
||||
options.extend([
|
||||
@ -266,9 +265,9 @@ def install(self, spec, prefix):
|
||||
filter_file(r'(LA::SolverCG solver\(solver_control\);)', ('TrilinosWrappers::SolverDirect::AdditionalData data(false,"Amesos_Superludist"); TrilinosWrappers::SolverDirect solver(solver_control,data);'), 'step-40.cc') # NOQA: ignore=E501
|
||||
filter_file(r'(LA::MPI::PreconditionAMG preconditioner;)',
|
||||
(''), 'step-40.cc')
|
||||
filter_file(r'(LA::MPI::PreconditionAMG::AdditionalData data;)',
|
||||
filter_file(r'(LA::MPI::PreconditionAMG::AdditionalData data;)', # NOQA: ignore=E501
|
||||
(''), 'step-40.cc')
|
||||
filter_file(r'(preconditioner.initialize\(system_matrix, data\);)',
|
||||
filter_file(r'(preconditioner.initialize\(system_matrix, data\);)', # NOQA: ignore=E501
|
||||
(''), 'step-40.cc')
|
||||
filter_file(r'(solver\.solve \(system_matrix, completely_distributed_solution, system_rhs,)', ('solver.solve (system_matrix, completely_distributed_solution, system_rhs);'), 'step-40.cc') # NOQA: ignore=E501
|
||||
filter_file(r'(preconditioner\);)', (''), 'step-40.cc')
|
||||
|
@ -28,13 +28,16 @@
|
||||
|
||||
class Petsc(Package):
|
||||
"""
|
||||
PETSc is a suite of data structures and routines for the scalable (parallel) solution of scientific applications
|
||||
modeled by partial differential equations.
|
||||
PETSc is a suite of data structures and routines for the scalable
|
||||
(parallel) solution of scientific applications modeled by partial
|
||||
differential equations.
|
||||
"""
|
||||
|
||||
homepage = "http://www.mcs.anl.gov/petsc/index.html"
|
||||
url = "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.5.3.tar.gz"
|
||||
|
||||
version('3.7.2', '50da49867ce7a49e7a0c1b37f4ec7b34')
|
||||
version('3.6.4', '7632da2375a3df35b8891c9526dbdde7')
|
||||
version('3.6.3', '91dd3522de5a5ef039ff8f50800db606')
|
||||
version('3.5.3', 'd4fd2734661e89f18ac6014b5dd1ef2f')
|
||||
version('3.5.2', 'ad170802b3b058b5deb9cd1f968e7e13')
|
||||
@ -69,10 +72,12 @@ class Petsc(Package):
|
||||
depends_on('hdf5+mpi', when='+hdf5+mpi')
|
||||
depends_on('parmetis', when='+metis+mpi')
|
||||
# Hypre does not support complex numbers.
|
||||
# Also PETSc prefer to build it without internal superlu, likely due to conflict in headers
|
||||
# see https://bitbucket.org/petsc/petsc/src/90564b43f6b05485163c147b464b5d6d28cde3ef/config/BuildSystem/config/packages/hypre.py
|
||||
# Also PETSc prefer to build it without internal superlu, likely due to
|
||||
# conflict in headers see
|
||||
# https://bitbucket.org/petsc/petsc/src/90564b43f6b05485163c147b464b5d6d28cde3ef/config/BuildSystem/config/packages/hypre.py # NOQA: ignore=E501
|
||||
depends_on('hypre~internal-superlu', when='+hypre+mpi~complex')
|
||||
depends_on('superlu-dist', when='+superlu-dist+mpi')
|
||||
depends_on('superlu-dist@:4.3', when='@:3.6.4+superlu-dist+mpi')
|
||||
depends_on('superlu-dist@5.0.0:', when='@3.7:+superlu-dist+mpi')
|
||||
depends_on('mumps+mpi', when='+mumps+mpi')
|
||||
depends_on('scalapack', when='+mumps+mpi')
|
||||
|
||||
@ -80,17 +85,17 @@ def mpi_dependent_options(self):
|
||||
if '~mpi' in self.spec:
|
||||
compiler_opts = [
|
||||
'--with-cc=%s' % os.environ['CC'],
|
||||
'--with-cxx=%s' % (os.environ['CXX'] if self.compiler.cxx is not None else '0'),
|
||||
'--with-fc=%s' % (os.environ['FC'] if self.compiler.fc is not None else '0'),
|
||||
'--with-cxx=%s' % (os.environ['CXX'] if self.compiler.cxx is not None else '0'), # NOQA: ignore=E501
|
||||
'--with-fc=%s' % (os.environ['FC'] if self.compiler.fc is not None else '0'), # NOQA: ignore=E501
|
||||
'--with-mpi=0'
|
||||
]
|
||||
error_message_fmt = '\t{library} support requires "+mpi" to be activated'
|
||||
error_message_fmt = '\t{library} support requires "+mpi" to be activated' # NOQA: ignore=E501
|
||||
|
||||
# If mpi is disabled (~mpi), it's an error to have any of these enabled.
|
||||
# This generates a list of any such errors.
|
||||
# If mpi is disabled (~mpi), it's an error to have any of these
|
||||
# enabled. This generates a list of any such errors.
|
||||
errors = [error_message_fmt.format(library=x)
|
||||
for x in ('hdf5', 'hypre', 'parmetis','mumps','superlu-dist')
|
||||
if ('+'+x) in self.spec]
|
||||
for x in ('hdf5', 'hypre', 'parmetis', 'mumps', 'superlu-dist') # NOQA: ignore=E501
|
||||
if ('+' + x) in self.spec]
|
||||
if errors:
|
||||
errors = ['incompatible variants given'] + errors
|
||||
raise RuntimeError('\n'.join(errors))
|
||||
@ -105,26 +110,31 @@ def install(self, spec, prefix):
|
||||
options = ['--with-ssl=0']
|
||||
options.extend(self.mpi_dependent_options())
|
||||
options.extend([
|
||||
'--with-precision=%s' % ('double' if '+double' in spec else 'single'),
|
||||
'--with-scalar-type=%s' % ('complex' if '+complex' in spec else 'real'),
|
||||
'--with-precision=%s' % ('double' if '+double' in spec else 'single'), # NOQA: ignore=E501
|
||||
'--with-scalar-type=%s' % ('complex' if '+complex' in spec else 'real'), # NOQA: ignore=E501
|
||||
'--with-shared-libraries=%s' % ('1' if '+shared' in spec else '0'),
|
||||
'--with-debugging=%s' % ('1' if '+debug' in spec else '0'),
|
||||
'--with-blas-lapack-dir=%s' % spec['lapack'].prefix
|
||||
])
|
||||
# Activates library support if needed
|
||||
for library in ('metis', 'boost', 'hdf5', 'hypre', 'parmetis','mumps','scalapack'):
|
||||
for library in ('metis', 'boost', 'hdf5', 'hypre', 'parmetis',
|
||||
'mumps', 'scalapack'):
|
||||
options.append(
|
||||
'--with-{library}={value}'.format(library=library, value=('1' if library in spec else '0'))
|
||||
'--with-{library}={value}'.format(library=library, value=('1' if library in spec else '0')) # NOQA: ignore=E501
|
||||
)
|
||||
if library in spec:
|
||||
options.append(
|
||||
'--with-{library}-dir={path}'.format(library=library, path=spec[library].prefix)
|
||||
'--with-{library}-dir={path}'.format(library=library, path=spec[library].prefix) # NOQA: ignore=E501
|
||||
)
|
||||
# PETSc does not pick up SuperluDist from the dir as they look for superlu_dist_4.1.a
|
||||
# PETSc does not pick up SuperluDist from the dir as they look for
|
||||
# superlu_dist_4.1.a
|
||||
if 'superlu-dist' in spec:
|
||||
options.extend([
|
||||
'--with-superlu_dist-include=%s' % spec['superlu-dist'].prefix.include,
|
||||
'--with-superlu_dist-lib=%s' % join_path(spec['superlu-dist'].prefix.lib, 'libsuperlu_dist.a'),
|
||||
'--with-superlu_dist-include=%s' %
|
||||
spec['superlu-dist'].prefix.include,
|
||||
'--with-superlu_dist-lib=%s' %
|
||||
join_path(spec['superlu-dist'].prefix.lib,
|
||||
'libsuperlu_dist.a'),
|
||||
'--with-superlu_dist=1'
|
||||
])
|
||||
else:
|
||||
|
@ -34,13 +34,16 @@ class Slepc(Package):
|
||||
homepage = "http://www.grycap.upv.es/slepc"
|
||||
url = "http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz"
|
||||
|
||||
version('3.7.1', '670216f263e3074b21e0623c01bc0f562fdc0bffcd7bd42dd5d8edbe73a532c2')
|
||||
version('3.6.3', '384939d009546db37bc05ed81260c8b5ba451093bf891391d32eb7109ccff876')
|
||||
version('3.6.2', '2ab4311bed26ccf7771818665991b2ea3a9b15f97e29fd13911ab1293e8e65df')
|
||||
|
||||
variant('arpack', default=False, description='Enables Arpack wrappers')
|
||||
variant('arpack', default=True, description='Enables Arpack wrappers')
|
||||
|
||||
depends_on('petsc')
|
||||
depends_on('arpack-ng~mpi',when='+arpack^petsc~mpi')
|
||||
depends_on('arpack-ng+mpi',when='+arpack^petsc+mpi')
|
||||
depends_on('petsc@3.7:', when='@3.7.1:')
|
||||
depends_on('petsc@3.6.3:3.6.4', when='@3.6.2:3.6.3')
|
||||
depends_on('arpack-ng~mpi', when='+arpack^petsc~mpi')
|
||||
depends_on('arpack-ng+mpi', when='+arpack^petsc+mpi')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# set SLEPC_DIR for installation
|
||||
@ -64,7 +67,7 @@ def install(self, spec, prefix):
|
||||
configure('--prefix=%s' % prefix, *options)
|
||||
|
||||
make('MAKE_NP=%s' % make_jobs, parallel=False)
|
||||
#FIXME:
|
||||
# FIXME:
|
||||
# make('test')
|
||||
make('install')
|
||||
|
||||
|
@ -25,50 +25,54 @@
|
||||
from spack import *
|
||||
import glob
|
||||
|
||||
|
||||
class SuperluDist(Package):
|
||||
"""A general purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations on high performance machines."""
|
||||
"""A general purpose library for the direct solution of large, sparse,
|
||||
nonsymmetric systems of linear equations on high performance machines."""
|
||||
homepage = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
|
||||
url = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_dist_4.1.tar.gz"
|
||||
|
||||
version('5.0.0', '2b53baf1b0ddbd9fcf724992577f0670')
|
||||
# default to version 4.3 since petsc and trilinos are not tested with 5.0.
|
||||
version('4.3', 'ee66c84e37b4f7cc557771ccc3dc43ae', preferred=True)
|
||||
version('4.3', 'ee66c84e37b4f7cc557771ccc3dc43ae')
|
||||
version('4.2', 'ae9fafae161f775fbac6eba11e530a65')
|
||||
version('4.1', '4edee38cc29f687bd0c8eb361096a455')
|
||||
version('4.0', 'c0b98b611df227ae050bc1635c6940e0')
|
||||
|
||||
depends_on ('mpi')
|
||||
depends_on ('blas')
|
||||
depends_on ('lapack')
|
||||
depends_on ('parmetis')
|
||||
depends_on ('metis@5:')
|
||||
depends_on('mpi')
|
||||
depends_on('blas')
|
||||
depends_on('lapack')
|
||||
depends_on('parmetis')
|
||||
depends_on('metis@5:')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
makefile_inc = []
|
||||
makefile_inc.extend([
|
||||
'PLAT = _mac_x',
|
||||
'DSuperLUroot = %s' % self.stage.source_path, #self.stage.path, prefix
|
||||
'DSuperLUroot = %s' % self.stage.source_path,
|
||||
'DSUPERLULIB = $(DSuperLUroot)/lib/libsuperlu_dist.a',
|
||||
'BLASDEF = -DUSE_VENDOR_BLAS',
|
||||
'BLASLIB = -L%s -llapack %s -lblas' % (spec['lapack'].prefix.lib, spec['blas'].prefix.lib), # FIXME: avoid hardcoding blas/lapack lib names
|
||||
'BLASLIB = %s %s' %
|
||||
(to_link_flags(spec['lapack'].lapack_shared_lib),
|
||||
to_link_flags(spec['blas'].blas_shared_lib)),
|
||||
'METISLIB = -L%s -lmetis' % spec['metis'].prefix.lib,
|
||||
'PARMETISLIB = -L%s -lparmetis' % spec['parmetis'].prefix.lib,
|
||||
'FLIBS =',
|
||||
'LIBS = $(DSUPERLULIB) $(BLASLIB) $(PARMETISLIB) $(METISLIB)',
|
||||
'LIBS = $(DSUPERLULIB) $(BLASLIB) $(PARMETISLIB) $(METISLIB)', # NOQA: ignore=E501
|
||||
'ARCH = ar',
|
||||
'ARCHFLAGS = cr',
|
||||
'RANLIB = true',
|
||||
'CC = mpicc', # FIXME avoid hardcoding MPI compiler names
|
||||
'CFLAGS = -fPIC -std=c99 -O2 -I%s -I%s' %(spec['parmetis'].prefix.include, spec['metis'].prefix.include),
|
||||
'CC = %s' % spec['mpi'].mpicc,
|
||||
'CFLAGS = -fPIC -std=c99 -O2 -I%s -I%s' %
|
||||
(spec['parmetis'].prefix.include,
|
||||
spec['metis'].prefix.include),
|
||||
'NOOPTS = -fPIC -std=c99',
|
||||
'FORTRAN = mpif77',
|
||||
'FORTRAN = %s' % spec['mpi'].mpif77,
|
||||
'F90FLAGS = -O2',
|
||||
'LOADER = mpif77',
|
||||
'LOADER = %s' % spec['mpi'].mpif77,
|
||||
'LOADOPTS =',
|
||||
'CDEFS = -DAdd_'
|
||||
])
|
||||
])
|
||||
|
||||
#with working_dir('src'):
|
||||
with open('make.inc', 'w') as fh:
|
||||
fh.write('\n'.join(makefile_inc))
|
||||
|
||||
@ -83,9 +87,10 @@ def install(self, spec, prefix):
|
||||
mkdirp(headers_location)
|
||||
mkdirp(prefix.lib)
|
||||
|
||||
headers = glob.glob(join_path(self.stage.source_path, 'SRC','*.h'))
|
||||
headers = glob.glob(join_path(self.stage.source_path, 'SRC', '*.h'))
|
||||
for h in headers:
|
||||
install(h,headers_location)
|
||||
install(h, headers_location)
|
||||
|
||||
superludist_lib = join_path(self.stage.source_path, 'lib/libsuperlu_dist.a')
|
||||
install(superludist_lib,self.prefix.lib)
|
||||
superludist_lib = join_path(self.stage.source_path,
|
||||
'lib/libsuperlu_dist.a')
|
||||
install(superludist_lib, self.prefix.lib)
|
||||
|
@ -45,6 +45,8 @@ class Trilinos(Package):
|
||||
homepage = "https://trilinos.org/"
|
||||
url = "http://trilinos.csbsju.edu/download/files/trilinos-12.2.1-Source.tar.gz"
|
||||
|
||||
version('12.6.3', '960f5f4d3f7c3da818e5a5fb4684559eff7e0c25f959ef576561b8a52f0e4d1e')
|
||||
version('12.6.2', '0c076090508170ddee5efeed317745027f9418319720dc40a072e478775279f9')
|
||||
version('12.6.1', 'adcf2d3aab74cdda98f88fee19cd1442604199b0515ee3da4d80cbe8f37d00e4')
|
||||
version('12.4.2', '7c830f7f0f68b8ad324690603baf404e')
|
||||
version('12.2.1', '6161926ea247863c690e927687f83be9')
|
||||
@ -89,7 +91,8 @@ class Trilinos(Package):
|
||||
# work at the end. But let's avoid all this by simply using shared libs
|
||||
depends_on('mumps@5.0:+mpi+shared', when='+mumps')
|
||||
depends_on('scalapack', when='+mumps')
|
||||
depends_on('superlu-dist', when='+superlu-dist')
|
||||
depends_on('superlu-dist@:4.3', when='@:12.6.1+superlu-dist')
|
||||
depends_on('superlu-dist', when='@12.6.2:+superlu-dist')
|
||||
depends_on('hypre~internal-superlu', when='+hypre')
|
||||
depends_on('hdf5+mpi', when='+hdf5')
|
||||
depends_on('python', when='+python')
|
||||
|
Loading…
Reference in New Issue
Block a user