SuperLU: add v5.2.2 and cmake tweaks (#23863)

- Changed to cmake package with backward compatibility with older
  makefile
- Removed unused cmake variable 'blas_blas_libs'
- Added new version 5.2.2 which change to external blas variable
- Remove unused tcsh dependency
- Change URL to use git repository for current and future versions
- Add older 4.2 version
- Add conflict for older versions with apple-clang
This commit is contained in:
Seth R. Johnson 2021-05-24 07:04:21 -04:00 committed by GitHub
parent b7d0b3ea75
commit d46e49ef7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,49 +4,52 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
class Superlu(Package):
class Superlu(CMakePackage):
"""SuperLU is a general purpose library for the direct solution of large,
sparse, nonsymmetric systems of linear equations on high performance
machines. SuperLU is designed for sequential machines."""
homepage = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/#superlu"
url = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_5.2.1.tar.gz"
url = "https://github.com/xiaoyeli/superlu/archive/refs/tags/v5.2.2.tar.gz"
version('5.2.2', sha256='470334a72ba637578e34057f46948495e601a5988a602604f5576367e606a28c')
version('5.2.1', sha256='28fb66d6107ee66248d5cf508c79de03d0621852a0ddeba7301801d3d859f463')
version('4.3', sha256='169920322eb9b9c6a334674231479d04df72440257c17870aaa0139d74416781')
version('4.3', sha256='169920322eb9b9c6a334674231479d04df72440257c17870aaa0139d74416781',
deprecated=True,
url='https://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz')
version('4.2', sha256='5a06e19bf5a597405dfeea39fe92aa8c5dd41da73c72c7187755a75f581efb28',
deprecated=True,
url='https://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_4.2.tar.gz')
variant('pic', default=True,
description='Build with position independent code')
depends_on('tcsh', type='build')
depends_on('cmake', when='@5.2.1:', type='build')
depends_on('cmake', when='@5:', type='build')
depends_on('blas')
conflicts('@:5.2.1', when='%apple-clang@12:',
msg='Older SuperLU is incompatible with newer compilers')
test_requires_compiler = True
# CMake installation method
def install(self, spec, prefix):
cmake_args = [
'-Denable_blaslib=OFF',
'-DBLAS_blas_LIBRARY={0}'.format(spec['blas'].libs.joined()),
'-DCMAKE_INSTALL_LIBDIR={0}'.format(self.prefix.lib)
def cmake_args(self):
if self.version > Version('5.2.1'):
_blaslib_key = 'enable_internal_blaslib'
else:
_blaslib_key = 'enable_blaslib'
args = [
self.define(_blaslib_key, False),
self.define('CMAKE_INSTALL_LIBDIR', self.prefix.lib),
self.define_from_variant('CMAKE_POSITION_INDEPENDENT_CODE', 'pic'),
self.define('enable_tests', self.run_tests),
]
if '+pic' in spec:
cmake_args.extend([
'-DCMAKE_POSITION_INDEPENDENT_CODE=ON'
])
cmake_args.extend(std_cmake_args)
with working_dir('spack-build', create=True):
cmake('..', *cmake_args)
make()
make('install')
return args
# Pre-cmake installation method
@when('@4.3')
def install(self, spec, prefix):
@when("@:4.999")
def cmake(self, spec, prefix):
"""Use autotools before version 5"""
config = []
# Define make.inc file
@ -105,6 +108,12 @@ def install(self, spec, prefix):
def cache_test_sources(self):
"""Copy the example source files after the package is installed to an
install test subdirectory for use during `spack test run`."""
if self.version == Version('5.2.2'):
# Include dir was hardcoded in 5.2.2
filter_file(r'INCLUDEDIR = -I\.\./SRC',
'INCLUDEDIR = -I' + self.prefix.include,
join_path(self.examples_src_dir, 'Makefile'))
self.cache_extra_test_sources(self.examples_src_dir)
def _generate_make_hdr_for_test(self):
@ -130,7 +139,7 @@ def _generate_make_hdr_for_test(self):
return config_args
# Pre-cmake configuration
@when('@4.3')
@when('@:4.999')
def _generate_make_hdr_for_test(self):
config_args = []
@ -164,10 +173,14 @@ def test(self):
for option in config_args:
inc.write('{0}\n'.format(option))
args = []
if self.version < Version('5.2.2'):
args.append('HEADER=' + self.prefix.include)
args.append('superlu')
test_dir = join_path(self.install_test_root, self.examples_src_dir)
with working_dir(test_dir, create=False):
make('HEADER={0}'.format(self.prefix.include), 'superlu',
parallel=False)
make(*args, parallel=False)
self.run_test('./superlu', purpose='Smoke test for superlu',
work_dir='.')
make('clean')