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
This commit is contained in:
Gustavo Chávez 2018-10-11 08:06:43 -07:00 committed by Satish Balay
parent a6fb2fdea4
commit 4b50928a36

View File

@ -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):
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):
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)