Fix hydrogen@develop build (#8262)
* Delete support for old versions of Elemental in Hydrogen * Fix cmake_args versions in lbann * Remove unused import (again) * Revert elemental to pre-llnl fork * Strip tailing whitespace from libgfortran.so * Fix flake8 * Remove debug print * * Add back elemental@develop * Prohibit installation of hydrogen previous to 0.99 * Fix flake8 * Change cmake_args error to a conflicts for old versions of Hydrogen * Use ~ not -
This commit is contained in:
parent
1a8bb78824
commit
c8a3a650fa
@ -23,7 +23,6 @@
|
|||||||
# 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 os
|
import os
|
||||||
import sys
|
|
||||||
from spack import *
|
from spack import *
|
||||||
from spack.spec import UnsupportedCompilerError
|
from spack.spec import UnsupportedCompilerError
|
||||||
|
|
||||||
@ -33,9 +32,7 @@ class Elemental(CMakePackage):
|
|||||||
and optimization library."""
|
and optimization library."""
|
||||||
|
|
||||||
homepage = "http://libelemental.org"
|
homepage = "http://libelemental.org"
|
||||||
url = "https://github.com/elemental/Elemental/archive/v0.87.6.tar.gz"
|
url = "https://github.com/elemental/Elemental/archive/v0.87.7.tar.gz"
|
||||||
|
|
||||||
version('hydrogen-develop', git='https://github.com/LLNL/Elemental.git', branch='hydrogen')
|
|
||||||
|
|
||||||
version('develop', git='https://github.com/elemental/Elemental.git', branch='master')
|
version('develop', git='https://github.com/elemental/Elemental.git', branch='master')
|
||||||
version('0.87.7', '6c1e7442021c59a36049e37ea69b8075')
|
version('0.87.7', '6c1e7442021c59a36049e37ea69b8075')
|
||||||
@ -88,7 +85,7 @@ class Elemental(CMakePackage):
|
|||||||
|
|
||||||
depends_on('veclibfort', when='blas=accelerate')
|
depends_on('veclibfort', when='blas=accelerate')
|
||||||
|
|
||||||
depends_on('essl -cuda', when='blas=essl -openmp_blas ~int64_blas')
|
depends_on('essl ~cuda', when='blas=essl ~openmp_blas ~int64_blas')
|
||||||
depends_on('essl threads=openmp', when='blas=essl +openmp_blas ~int64_blas')
|
depends_on('essl threads=openmp', when='blas=essl +openmp_blas ~int64_blas')
|
||||||
|
|
||||||
# Note that this forces us to use OpenBLAS until #1712 is fixed
|
# Note that this forces us to use OpenBLAS until #1712 is fixed
|
||||||
@ -116,7 +113,6 @@ def libs(self):
|
|||||||
'libEl', root=self.prefix, shared=shared, recursive=True
|
'libEl', root=self.prefix, shared=shared, recursive=True
|
||||||
)
|
)
|
||||||
|
|
||||||
@when('@0.87.6:')
|
|
||||||
def cmake_args(self):
|
def cmake_args(self):
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
|
|
||||||
@ -146,20 +142,20 @@ def cmake_args(self):
|
|||||||
ifort = env['SPACK_F77']
|
ifort = env['SPACK_F77']
|
||||||
intel_bin = os.path.dirname(ifort)
|
intel_bin = os.path.dirname(ifort)
|
||||||
intel_root = os.path.dirname(intel_bin)
|
intel_root = os.path.dirname(intel_bin)
|
||||||
libfortran = LibraryList('{0}/lib/intel64/libifcoremt.{1}'
|
libfortran = find_libraries('libifcoremt',
|
||||||
.format(intel_root, dso_suffix))
|
root=intel_root, recursive=True)
|
||||||
elif self.spec.satisfies('%gcc'):
|
elif self.spec.satisfies('%gcc'):
|
||||||
# see <stage_folder>/debian/rules as an example:
|
# see <stage_folder>/debian/rules as an example:
|
||||||
mpif77 = Executable(spec['mpi'].mpif77)
|
mpif77 = Executable(spec['mpi'].mpif77)
|
||||||
libfortran = LibraryList(mpif77('--print-file-name',
|
libfortran = LibraryList(mpif77('--print-file-name',
|
||||||
'libgfortran.%s' % dso_suffix,
|
'libgfortran.%s' % dso_suffix,
|
||||||
output=str))
|
output=str).strip())
|
||||||
elif self.spec.satisfies('%xl') or self.spec.satisfies('%xl_r'):
|
elif self.spec.satisfies('%xl') or self.spec.satisfies('%xl_r'):
|
||||||
xl_fort = env['SPACK_F77']
|
xl_fort = env['SPACK_F77']
|
||||||
xl_bin = os.path.dirname(xl_fort)
|
xl_bin = os.path.dirname(xl_fort)
|
||||||
xl_root = os.path.dirname(xl_bin)
|
xl_root = os.path.dirname(xl_bin)
|
||||||
libfortran = LibraryList('{0}/lib/libxlf90_r.{1}.1'
|
libfortran = find_libraries('libxlf90_r',
|
||||||
.format(xl_root, dso_suffix))
|
root=xl_root, recursive=True)
|
||||||
else:
|
else:
|
||||||
libfortran = None
|
libfortran = None
|
||||||
|
|
||||||
@ -191,51 +187,3 @@ def cmake_args(self):
|
|||||||
'-DPYTHON_SITE_PACKAGES:STRING={0}'.format(site_packages_dir)])
|
'-DPYTHON_SITE_PACKAGES:STRING={0}'.format(site_packages_dir)])
|
||||||
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
@when('@:0.87.6')
|
|
||||||
def cmake_args(self):
|
|
||||||
spec = self.spec
|
|
||||||
|
|
||||||
if '@:0.87.7' in spec and '%intel@:17.0.2' in spec:
|
|
||||||
raise UnsupportedCompilerError(
|
|
||||||
"Elemental {0} has a known bug with compiler: {1} {2}".format(
|
|
||||||
spec.version, spec.compiler.name, spec.compiler.version))
|
|
||||||
|
|
||||||
args = [
|
|
||||||
'-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
|
|
||||||
'-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
|
|
||||||
'-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
|
|
||||||
'-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
|
|
||||||
'-DBUILD_SHARED_LIBS:BOOL=%s' % ('+shared' in spec),
|
|
||||||
'-DHydrogen_ENABLE_OPENMP:BOOL=%s' % ('+hybrid' in spec),
|
|
||||||
'-DHydrogen_ENABLE_QUADMATH:BOOL=%s' % ('+quad' in spec),
|
|
||||||
'-DHydrogen_USE_64BIT_INTS:BOOL=%s' % ('+int64' in spec),
|
|
||||||
'-DHydrogen_USE_64BIT_BLAS_INTS:BOOL=%s' % ('+int64_blas' in spec),
|
|
||||||
'-DHydrogen_ENABLE_MPC:BOOL=%s' % ('+mpfr' in spec),
|
|
||||||
'-DHydrogen_GENERAL_LAPACK_FALLBACK=ON',
|
|
||||||
]
|
|
||||||
|
|
||||||
# Add support for OS X to find OpenMP
|
|
||||||
if (self.spec.satisfies('%clang')):
|
|
||||||
if (sys.platform == 'darwin'):
|
|
||||||
clang = self.compiler.cc
|
|
||||||
clang_bin = os.path.dirname(clang)
|
|
||||||
clang_root = os.path.dirname(clang_bin)
|
|
||||||
args.extend([
|
|
||||||
'-DOpenMP_DIR={0}'.format(clang_root)])
|
|
||||||
|
|
||||||
if 'blas=openblas' in spec:
|
|
||||||
args.extend([
|
|
||||||
'-DHydrogen_USE_OpenBLAS:BOOL=%s' % ('blas=openblas' in spec),
|
|
||||||
'-DOpenBLAS_DIR:STRING={0}'.format(
|
|
||||||
spec['elemental'].prefix)])
|
|
||||||
elif 'blas=mkl' in spec:
|
|
||||||
args.extend([
|
|
||||||
'-DHydrogen_USE_MKL:BOOL=%s' % ('blas=mkl' in spec)])
|
|
||||||
elif 'blas=accelerate' in spec:
|
|
||||||
args.extend(['-DHydrogen_USE_ACCELERATE:BOOL=TRUE'])
|
|
||||||
elif 'blas=essl' in spec:
|
|
||||||
args.extend([
|
|
||||||
'-DHydrogen_USE_ESSL:BOOL=%s' % ('blas=essl' in spec)])
|
|
||||||
|
|
||||||
return args
|
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from spack import *
|
from spack import *
|
||||||
from spack.spec import UnsupportedCompilerError
|
|
||||||
|
|
||||||
|
|
||||||
class Hydrogen(CMakePackage):
|
class Hydrogen(CMakePackage):
|
||||||
@ -60,9 +59,9 @@ class Hydrogen(CMakePackage):
|
|||||||
variant('mpfr', default=False,
|
variant('mpfr', default=False,
|
||||||
description='Support GNU MPFR\'s'
|
description='Support GNU MPFR\'s'
|
||||||
'arbitrary-precision floating-point arithmetic')
|
'arbitrary-precision floating-point arithmetic')
|
||||||
variant('cuda', default=False,
|
variant('cuda', default=False,
|
||||||
description='Builds with support for GPUs via CUDA and cuDNN')
|
description='Builds with support for GPUs via CUDA and cuDNN')
|
||||||
variant('test', default=False,
|
variant('test', default=False,
|
||||||
description='Builds test suite')
|
description='Builds test suite')
|
||||||
|
|
||||||
# Note that #1712 forces us to enumerate the different blas variants
|
# Note that #1712 forces us to enumerate the different blas variants
|
||||||
@ -100,6 +99,9 @@ class Hydrogen(CMakePackage):
|
|||||||
depends_on('cudnn', when='+cuda')
|
depends_on('cudnn', when='+cuda')
|
||||||
depends_on('cub', when='+cuda')
|
depends_on('cub', when='+cuda')
|
||||||
|
|
||||||
|
conflicts('@0:0.98', msg="Hydrogen did not exist before v0.99. " +
|
||||||
|
"Did you mean to use Elemental instead?")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def libs(self):
|
def libs(self):
|
||||||
shared = True if '+shared' in self.spec else False
|
shared = True if '+shared' in self.spec else False
|
||||||
@ -107,15 +109,9 @@ def libs(self):
|
|||||||
'libEl', root=self.prefix, shared=shared, recursive=True
|
'libEl', root=self.prefix, shared=shared, recursive=True
|
||||||
)
|
)
|
||||||
|
|
||||||
@when('@:0.84' or '@0.99:')
|
|
||||||
def cmake_args(self):
|
def cmake_args(self):
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
|
|
||||||
if '@:0.87.7' in spec and '%intel@:17.0.2' in spec:
|
|
||||||
raise UnsupportedCompilerError(
|
|
||||||
"Elemental {0} has a known bug with compiler: {1} {2}".format(
|
|
||||||
spec.version, spec.compiler.name, spec.compiler.version))
|
|
||||||
|
|
||||||
args = [
|
args = [
|
||||||
'-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
|
'-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
|
||||||
'-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
|
'-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
|
||||||
|
@ -106,7 +106,7 @@ def common_config_args(self):
|
|||||||
|
|
||||||
# Get any recent versions or non-numeric version
|
# Get any recent versions or non-numeric version
|
||||||
# Note that develop > numeric and non-develop < numeric
|
# Note that develop > numeric and non-develop < numeric
|
||||||
@when('@:0.90' or '@0.94:')
|
@when('@:0.90,0.94:')
|
||||||
def cmake_args(self):
|
def cmake_args(self):
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
args = self.common_config_args
|
args = self.common_config_args
|
||||||
|
Loading…
Reference in New Issue
Block a user