Skip to content
Snippets Groups Projects
Commit 4b50928a authored by Gustavo Chávez's avatar Gustavo Chávez Committed by Satish Balay
Browse files

Update superlu-dist package.py to support latest release v6.0.0 (#9445)

* superlu-dist: Update package.py for superlu-dist v6.0.0 using CMake

* superlu_dist: Update the header of package.py

* Specify lapack_blas and DCMAKE_INSTALL_LIBDIR
disable support for superlu-dist before v5
parent a6fb2fde
No related branches found
No related tags found
No related merge requests found
...@@ -22,21 +22,20 @@ ...@@ -22,21 +22,20 @@
# 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 glob
import os
from spack import * from spack import *
class SuperluDist(Package): class SuperluDist(CMakePackage):
"""A general purpose library for the direct solution of large, sparse, """A general purpose library for the direct solution of large, sparse,
nonsymmetric systems of linear equations on high performance machines.""" nonsymmetric systems of linear equations on high performance machines."""
homepage = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/" homepage = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/"
url = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_dist_4.1.tar.gz" url = "https://github.com/xiaoyeli/superlu_dist/archive/v6.0.0.tar.gz"
git = "https://github.com/xiaoyeli/superlu_dist.git" git = "https://github.com/xiaoyeli/superlu_dist.git"
version('develop', branch='master') version('develop', branch='master')
version('xsdk-0.2.0', tag='xsdk-0.2.0') version('xsdk-0.2.0', tag='xsdk-0.2.0')
version('6.0.0', '2e3ce927fa5786470dacbdf8c41afb08')
version('5.4.0', 'e64645c5be352ae2c88327af2cac66e1') version('5.4.0', 'e64645c5be352ae2c88327af2cac66e1')
version('5.3.0', '35d5aa8e0a246efaf327988b20106714') version('5.3.0', '35d5aa8e0a246efaf327988b20106714')
version('5.2.2', 'a685ef7fb7859b24c8c9d5d5f121a8a5') version('5.2.2', 'a685ef7fb7859b24c8c9d5d5f121a8a5')
...@@ -45,14 +44,9 @@ class SuperluDist(Package): ...@@ -45,14 +44,9 @@ class SuperluDist(Package):
version('5.1.1', '12638c631733a27dcbd87110e9f9cb1e') version('5.1.1', '12638c631733a27dcbd87110e9f9cb1e')
version('5.1.0', '6bb86e630bd4bd8650243aed8fd92eb9') version('5.1.0', '6bb86e630bd4bd8650243aed8fd92eb9')
version('5.0.0', '2b53baf1b0ddbd9fcf724992577f0670') version('5.0.0', '2b53baf1b0ddbd9fcf724992577f0670')
version('4.3', 'ee66c84e37b4f7cc557771ccc3dc43ae')
version('4.2', 'ae9fafae161f775fbac6eba11e530a65')
version('4.1', '4edee38cc29f687bd0c8eb361096a455')
version('4.0', 'c0b98b611df227ae050bc1635c6940e0')
version('3.3', 'f4805659157d93a962500902c219046b')
variant('int64', default=False, variant('int64', default=False, description='Build with 64 bit integers')
description="Use 64bit integers") variant('shared', default=True, description='Build shared libraries')
depends_on('mpi') depends_on('mpi')
depends_on('blas') depends_on('blas')
...@@ -60,69 +54,34 @@ class SuperluDist(Package): ...@@ -60,69 +54,34 @@ class SuperluDist(Package):
depends_on('parmetis') depends_on('parmetis')
depends_on('metis@5:') depends_on('metis@5:')
def install(self, spec, prefix): def cmake_args(self):
spec = self.spec
lapack_blas = spec['lapack'].libs + spec['blas'].libs lapack_blas = spec['lapack'].libs + spec['blas'].libs
makefile_inc = [] args = [
makefile_inc.extend([ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
'PLAT = _mac_x', '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
'DSuperLUroot = %s' % self.stage.source_path, '-DCMAKE_INSTALL_LIBDIR:STRING=%s' % self.prefix.lib,
'DSUPERLULIB = $(DSuperLUroot)/lib/libsuperlu_dist.a', '-DTPL_BLAS_LIBRARIES=%s' % lapack_blas.ld_flags,
'BLASDEF = -DUSE_VENDOR_BLAS', '-DTPL_PARMETIS_LIBRARIES=%s' % spec['parmetis'].libs.ld_flags +
'BLASLIB = %s' % lapack_blas.ld_flags, ';' + spec['metis'].libs.ld_flags,
'METISLIB = %s' % spec['metis'].libs.ld_flags, '-DTPL_PARMETIS_INCLUDE_DIRS=%s' % spec['parmetis'].prefix.include
'PARMETISLIB = %s' % spec['parmetis'].libs.ld_flags, ]
'HAVE_PARMETIS= TRUE',
'FLIBS =',
'LIBS = $(DSUPERLULIB) $(BLASLIB) $(PARMETISLIB) $(METISLIB)', # noqa
'ARCH = ar',
'ARCHFLAGS = cr',
'RANLIB = true',
'CXX = {0}'.format(self.spec['mpi'].mpicxx),
'CXXFLAGS = {0} {1} {2}'.format(
' '.join(self.spec.compiler_flags['cxxflags']),
self.compiler.pic_flag,
self.compiler.cxx11_flag),
'CC = {0}'.format(self.spec['mpi'].mpicc),
'CFLAGS = %s %s -O2 %s %s %s' % (
self.compiler.pic_flag,
'' if '%pgi' in spec else '-std=c99',
spec['parmetis'].headers.cpp_flags,
spec['metis'].headers.cpp_flags,
'-D_LONGINT' if '+int64' in spec and not
self.spec.satisfies('@5.2.0:') else ''),
'XSDK_INDEX_SIZE = %s' % ('64' if '+int64' in spec else '32'),
'NOOPTS = %s -std=c99' % (
self.compiler.pic_flag),
'FORTRAN = {0}'.format(self.spec['mpi'].mpif77),
'F90FLAGS = -O2',
'LOADER = {0}'.format(self.spec['mpi'].mpif77),
'INCLUDEDIR = $(SuperLUroot)/include',
'LOADOPTS =',
'CDEFS = %s' % ("-DNoChange"
if spack_f77.endswith('xlf') or
spack_f77.endswith('xlf_r')
else "-DAdd_")
])
with open('make.inc', 'w') as fh: if '+int64' in spec:
fh.write('\n'.join(makefile_inc)) args.append('-DXSDK_INDEX_SIZE=64')
else:
args.append('-DXSDK_INDEX_SIZE=32')
mkdirp(os.path.join(self.stage.source_path, 'lib')) if '+shared' in spec:
make("lib", parallel=False) args.append('-DBUILD_SHARED_LIBS:BOOL=ON')
else:
args.append('-DBUILD_SHARED_LIBS:BOOL=OFF')
return args
# FIXME: def flag_handler(self, name, flags):
# cd "EXAMPLE" do flags = list(flags)
# system "make" if name == 'cxxflags':
flags.append(self.compiler.cxx11_flag)
# need to install by hand if name == 'cflags' and '%pgi' not in self.spec:
headers_location = self.prefix.include flags.append('-std=c99')
mkdirp(headers_location) return (None, None, flags)
mkdirp(prefix.lib)
headers = glob.glob(join_path(self.stage.source_path, 'SRC', '*.h'))
for h in headers:
install(h, headers_location)
superludist_lib = join_path(self.stage.source_path,
'lib/libsuperlu_dist.a')
install(superludist_lib, self.prefix.lib)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment