phist: Fix build of 1.9.6, fix build- and install-tests (#26727)
Primary fix: Due to a typo in a version range, overlapping PR merges resulted in a build failure of the latest version: Don't attempt to remove a non-existing file for version 1.9.6. Secondary fixes: update_tpetra_gotypes.patch was mentioned twice, and the version range has to exclude @1.4.2, to which it cannot be applied. Add depend_on() py-pytest, py-numpy and pkgconfig with type='test' @:1.9.0 fail with 'Rank mismatch with gfortran@10:, add a conflicts(). raise InstallError('~mpi not possible with kernel_lib=builtin!') when applicable. Fixes for spack install --test=root phist: mpiexec -n12 puts a lot of stress on a pod and gets stuck in a loop very often: Reduce the mpiexec procs and the number of threads. Remove @run_after('build') @on_package_attributes(run_tests=True): from 'def check()': fixes it from getting called twice The build script of 'make test_install' for the installcheck expects the examples to be copied to self.stage.path: Provide them.
This commit is contained in:
parent
8c1399ff7c
commit
a61853816f
@ -3,8 +3,6 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
import spack.hooks.sbang as sbang
|
import spack.hooks.sbang as sbang
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
@ -21,7 +19,7 @@ class Phist(CMakePackage):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
homepage = "https://bitbucket.org/essex/phist/"
|
homepage = "https://bitbucket.org/essex/phist/"
|
||||||
url = "https://bitbucket.org/essex/phist/get/phist-1.4.3.tar.gz"
|
url = "https://bitbucket.org/essex/phist/get/phist-1.9.6.tar.gz"
|
||||||
git = "https://bitbucket.org/essex/phist.git"
|
git = "https://bitbucket.org/essex/phist.git"
|
||||||
|
|
||||||
maintainers = ['jthies']
|
maintainers = ['jthies']
|
||||||
@ -108,8 +106,7 @@ class Phist(CMakePackage):
|
|||||||
# Only applies to 1.9.4: While SSE instructions are handled correctly,
|
# Only applies to 1.9.4: While SSE instructions are handled correctly,
|
||||||
# build fails on ppc64le unless -DNO_WARN_X86_INTRINSICS is defined.
|
# build fails on ppc64le unless -DNO_WARN_X86_INTRINSICS is defined.
|
||||||
patch('ppc64_sse.patch', when='@1.9.4')
|
patch('ppc64_sse.patch', when='@1.9.4')
|
||||||
patch('update_tpetra_gotypes.patch', when='@:1.8')
|
patch('update_tpetra_gotypes.patch', when='@1.6:1.8')
|
||||||
patch('update_tpetra_gotypes.patch', when='@:1.8.99')
|
|
||||||
patch('sbang.patch', when='+fortran')
|
patch('sbang.patch', when='+fortran')
|
||||||
|
|
||||||
# ###################### Dependencies ##########################
|
# ###################### Dependencies ##########################
|
||||||
@ -134,6 +131,10 @@ class Phist(CMakePackage):
|
|||||||
depends_on('trilinos+anasazi+belos', when='+trilinos')
|
depends_on('trilinos+anasazi+belos', when='+trilinos')
|
||||||
depends_on('parmetis+int64', when='+parmetis+int64')
|
depends_on('parmetis+int64', when='+parmetis+int64')
|
||||||
depends_on('parmetis~int64', when='+parmetis~int64')
|
depends_on('parmetis~int64', when='+parmetis~int64')
|
||||||
|
depends_on('py-pytest', type='test')
|
||||||
|
depends_on('py-numpy', type='test', when='+mpi')
|
||||||
|
# The test_install compiles the examples and needs pkgconfig for it
|
||||||
|
depends_on('pkgconfig', type='test')
|
||||||
|
|
||||||
# Fortran 2003 bindings were included in version 1.7, previously they
|
# Fortran 2003 bindings were included in version 1.7, previously they
|
||||||
# required a separate package
|
# required a separate package
|
||||||
@ -142,12 +143,20 @@ class Phist(CMakePackage):
|
|||||||
# older gcc's may produce incorrect SIMD code and fail
|
# older gcc's may produce incorrect SIMD code and fail
|
||||||
# to compile some OpenMP statements
|
# to compile some OpenMP statements
|
||||||
conflicts('%gcc@:4.9.1')
|
conflicts('%gcc@:4.9.1')
|
||||||
|
# gcc@10: Error: Rank mismatch between actual argument at (1)
|
||||||
|
# and actual argument at (2) (scalar and rank-1)
|
||||||
|
conflicts('%gcc@10:', when='@:1.9.0')
|
||||||
|
|
||||||
# the phist repo came with it's own FindMPI.cmake before, which may cause some other
|
# the phist repo came with it's own FindMPI.cmake before, which may cause some other
|
||||||
# MPI installation to be used than the one spack wants.
|
# MPI installation to be used than the one spack wants.
|
||||||
@when('@:1.9.6')
|
|
||||||
def patch(self):
|
def patch(self):
|
||||||
os.unlink('cmake/FindMPI.cmake')
|
if self.spec.satisfies('@:1.9.5'):
|
||||||
|
force_remove('cmake/FindMPI.cmake')
|
||||||
|
# mpiexec -n12 puts a lot of stress on a pod and gets stuck in a loop very often
|
||||||
|
test = FileFilter('CMakeLists.txt')
|
||||||
|
test.filter('1 2 3 12', '1 2 3')
|
||||||
|
test.filter('12/', '6/')
|
||||||
|
test.filter('TEST_DRIVERS_NUM_THREADS 6', 'TEST_DRIVERS_NUM_THREADS 3')
|
||||||
|
|
||||||
def setup_build_environment(self, env):
|
def setup_build_environment(self, env):
|
||||||
env.set('SPACK_SBANG', sbang.sbang_install_path())
|
env.set('SPACK_SBANG', sbang.sbang_install_path())
|
||||||
@ -156,6 +165,9 @@ def cmake_args(self):
|
|||||||
spec = self.spec
|
spec = self.spec
|
||||||
define = CMakePackage.define
|
define = CMakePackage.define
|
||||||
|
|
||||||
|
if spec.satisfies('kernel_lib=builtin') and spec.satisfies('~mpi'):
|
||||||
|
raise InstallError('~mpi not possible with kernel_lib=builtin!')
|
||||||
|
|
||||||
kernel_lib = spec.variants['kernel_lib'].value
|
kernel_lib = spec.variants['kernel_lib'].value
|
||||||
outlev = spec.variants['outlev'].value
|
outlev = spec.variants['outlev'].value
|
||||||
|
|
||||||
@ -195,8 +207,7 @@ def cmake_args(self):
|
|||||||
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
@run_after('build')
|
# removing @run_after('build') fixes it from getting called twice
|
||||||
@on_package_attributes(run_tests=True)
|
|
||||||
def check(self):
|
def check(self):
|
||||||
with working_dir(self.build_directory):
|
with working_dir(self.build_directory):
|
||||||
make("check")
|
make("check")
|
||||||
@ -204,5 +215,8 @@ def check(self):
|
|||||||
@run_after('install')
|
@run_after('install')
|
||||||
@on_package_attributes(run_tests=True)
|
@on_package_attributes(run_tests=True)
|
||||||
def test_install(self):
|
def test_install(self):
|
||||||
|
# The build script of test_install expects the sources to be copied here:
|
||||||
|
install_tree(join_path(self.stage.source_path, 'exampleProjects'),
|
||||||
|
join_path(self.stage.path, 'exampleProjects'))
|
||||||
with working_dir(self.build_directory):
|
with working_dir(self.build_directory):
|
||||||
make("test_install")
|
make("test_install")
|
||||||
|
Loading…
Reference in New Issue
Block a user