diff options
Diffstat (limited to 'var')
-rw-r--r-- | var/spack/repos/builtin/packages/superlu-dist/package.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/superlu-dist/package.py b/var/spack/repos/builtin/packages/superlu-dist/package.py index f5c92e0aa8..adb53a740e 100644 --- a/var/spack/repos/builtin/packages/superlu-dist/package.py +++ b/var/spack/repos/builtin/packages/superlu-dist/package.py @@ -102,3 +102,53 @@ class SuperluDist(CMakePackage, CudaPackage): if name == 'cflags' and '%pgi' not in self.spec: flags.append('-std=c99') return (None, None, flags) + + examples_src_dir = 'EXAMPLE' + mk_hdr = 'make.inc' + mk_hdr_in = mk_hdr + '.in' + + @run_after('install') + 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`.""" + self.cache_extra_test_sources([self.examples_src_dir, self.mk_hdr]) + + def test(self): + mk_file = join_path(self.install_test_root, self.mk_hdr) + # Replace 'SRC' with 'lib' in the library's path + filter_file(r'^(DSUPERLULIB.+)SRC(.+)', '\\1lib\\2', mk_file) + # Set library flags for all libraries superlu-dist depends on + filter_file(r'^LIBS.+\+=.+', '', mk_file) + filter_file(r'^LIBS[^\+]+=.+', 'LIBS = $(DSUPERLULIB)' + + ' {0}'.format(self.spec['blas'].libs.ld_flags) + + ' {0}'.format(self.spec['lapack'].libs.ld_flags) + + ' {0}'.format(self.spec['parmetis'].libs.ld_flags) + + ' {0}'.format(self.spec['metis'].libs.ld_flags) + + ' $(CUDALIBS)', + mk_file) + cuda_lib_opts = '' + if '+cuda' in self.spec: + cuda_lib_opts = ',-rpath,{0}'.format( + self.spec['cuda'].libs.directories[0]) + # Set the rpath for all the libs + filter_file(r'^LOADOPTS.+', 'LOADOPTS = -Wl' + + ',-rpath,{0}'.format(self.prefix.lib) + + ',-rpath,{0}'.format(self.spec['blas'].prefix.lib) + + ',-rpath,{0}'.format(self.spec['lapack'].prefix.lib) + + ',-rpath,{0}'.format(self.spec['parmetis'].prefix.lib) + + ',-rpath,{0}'.format(self.spec['metis'].prefix.lib) + + cuda_lib_opts, + mk_file) + + test_dir = join_path(self.install_test_root, self.examples_src_dir) + test_exe = 'pddrive' + with working_dir(test_dir, create=False): + make(test_exe) + # Smoke test input parameters: -r 2 -c 2 g20.rua + test_args = ['-n', '4', test_exe, '-r', '2', '-c', '2', 'g20.rua'] + # Find the correct mpirun command + mpiexe_f = which('srun', 'mpirun', 'mpiexec') + if mpiexe_f: + self.run_test(mpiexe_f.command, test_args, work_dir='.', + purpose='superlu-dist smoke test') + make('clean') |