summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/amdblis/package.py39
-rw-r--r--var/spack/repos/builtin/packages/amdfftw/package.py180
-rw-r--r--var/spack/repos/builtin/packages/amdlibflame/package.py34
-rw-r--r--var/spack/repos/builtin/packages/amdlibm/package.py28
-rw-r--r--var/spack/repos/builtin/packages/amdscalapack/package.py24
-rw-r--r--var/spack/repos/builtin/packages/aocl-sparse/package.py2
-rw-r--r--var/spack/repos/builtin/packages/mumps/package.py5
7 files changed, 259 insertions, 53 deletions
diff --git a/var/spack/repos/builtin/packages/amdblis/package.py b/var/spack/repos/builtin/packages/amdblis/package.py
index 22fa9165eb..7e3ebba99f 100644
--- a/var/spack/repos/builtin/packages/amdblis/package.py
+++ b/var/spack/repos/builtin/packages/amdblis/package.py
@@ -22,17 +22,50 @@ class Amdblis(BlisBase):
maintainers = ['amd-toolchain-support']
+ version('3.1', sha256='2891948925b9db99eec02a1917d9887a7bee9ad2afc5421c9ba58602a620f2bf')
+ version('3.0.1', sha256='dff643e6ef946846e91e8f81b75ff8fe21f1f2d227599aecd654d184d9beff3e')
version('3.0', sha256='ac848c040cd6c3550fe49148dbdf109216cad72d3235763ee7ee8134e1528517')
version('2.2', sha256='e1feb60ac919cf6d233c43c424f6a8a11eab2c62c2c6e3f2652c15ee9063c0c9')
+ variant(
+ 'ilp64',
+ default=False,
+ description='Build with ILP64 support')
+
+ conflicts(
+ '+ilp64',
+ when='@:3.0.0',
+ msg='ilp64 is supported from amdblis 3.0.1 version onwards')
+
def configure_args(self):
spec = self.spec
args = super(Amdblis, self).configure_args()
- if spec.satisfies('@3.0 %aocc'):
- """ To enabled Fortran to C calling convention for
- complex types when compiling with aocc flang"""
+ if spec.satisfies('+ilp64'):
+ args.append('--blas-int-size=64')
+
+ """ To enable Fortran to C calling convention for
+ complex types when compiling with aocc flang"""
+ if self.spec.satisfies("@3.0 %aocc"):
args.append('CFLAGS={0}'.format("-DAOCL_F2C"))
args.append('CXXFLAGS={0}'.format("-DAOCL_F2C"))
+ elif self.spec.satisfies("@3.0.1: %aocc"):
+ args.append('--complex-return=intel')
+
+ if self.spec.satisfies("@3.1:"):
+ args.append('--disable-aocl-dynamic')
return args
+
+ def configure(self, spec, prefix):
+ config_args = self.configure_args()
+
+ # "amdzen" - A fat binary or multiarchitecture binary
+ # support for 3.1 release onwards
+ if self.spec.satisfies("@3.1:"):
+ config_args.append("amdzen")
+ else:
+ config_args.append("auto")
+
+ configure("--prefix=" + prefix,
+ *config_args)
diff --git a/var/spack/repos/builtin/packages/amdfftw/package.py b/var/spack/repos/builtin/packages/amdfftw/package.py
index a43baa1094..8e77b17199 100644
--- a/var/spack/repos/builtin/packages/amdfftw/package.py
+++ b/var/spack/repos/builtin/packages/amdfftw/package.py
@@ -31,36 +31,150 @@ class Amdfftw(FftwBase):
maintainers = ['amd-toolchain-support']
+ version('3.1', sha256='3e777f3acef13fa1910db097e818b1d0d03a6a36ef41186247c6ab1ab0afc132')
+ version('3.0.1', sha256='87030c6bbb9c710f0a64f4f306ba6aa91dc4b182bb804c9022b35aef274d1a4c')
version('3.0', sha256='a69deaf45478a59a69f77c4f7e9872967f1cfe996592dd12beb6318f18ea0bcd')
version('2.2', sha256='de9d777236fb290c335860b458131678f75aa0799c641490c644c843f0e246f8')
- variant('shared', default=True, description="Builds a shared version of the library")
- variant('openmp', default=True, description="Enable OpenMP support")
- variant('threads', default=False, description="Enable SMP threads support")
- variant('debug', default=False, description="Builds a debug version of the library")
+ variant('shared', default=True,
+ description='Builds a shared version of the library')
+ variant('openmp', default=True,
+ description='Enable OpenMP support')
+ variant('threads', default=False,
+ description='Enable SMP threads support')
+ variant('debug', default=False,
+ description='Builds a debug version of the library')
variant(
'amd-fast-planner',
default=False,
- description="Option to reduce the planning time without much"
- "tradeoff in the performance. It is supported for"
- "Float and double precisions only.")
+ description='Option to reduce the planning time without much'
+ 'tradeoff in the performance. It is supported for'
+ 'Float and double precisions only.')
+ variant(
+ 'amd-top-n-planner',
+ default=False,
+ description='Build with amd-top-n-planner support')
+ variant(
+ 'amd-mpi-vader-limit',
+ default=False,
+ description='Build with amd-mpi-vader-limit support')
+ variant(
+ 'static',
+ default=False,
+ description='Build with static suppport')
+ variant(
+ 'amd-trans',
+ default=False,
+ description='Build with amd-trans suppport')
+ variant(
+ 'amd-app-opt',
+ default=False,
+ description='Build with amd-app-opt suppport')
depends_on('texinfo')
provides('fftw-api@3', when='@2:')
- conflicts('precision=quad', when='@2.2 %aocc', msg="AOCC clang doesn't support quad precision")
- conflicts('+debug', when='@2.2 %aocc', msg="AOCC clang doesn't support debug")
- conflicts('%gcc@:7.2', when="@2.2:", msg="Required GCC version above 7.2 for AMDFFTW")
- conflicts('+amd-fast-planner', when="@2.2", msg="amd-fast-planner is supported from 3.0 onwards")
+ conflicts(
+ 'precision=quad',
+ when='@2.2 %aocc',
+ msg='Quad precision is not supported by AOCC clang version 2.2')
+ conflicts(
+ '+debug',
+ when='@2.2 %aocc',
+ msg='debug mode is not supported by AOCC clang version 2.2')
+ conflicts(
+ '%gcc@:7.2',
+ when='@2.2:',
+ msg='GCC version above 7.2 is required for AMDFFTW')
+ conflicts(
+ '+amd-fast-planner ',
+ when='+mpi',
+ msg='mpi thread is not supported with amd-fast-planner')
+ conflicts(
+ '+amd-fast-planner',
+ when='@2.2',
+ msg='amd-fast-planner is supported from 3.0 onwards')
conflicts(
'+amd-fast-planner',
when='precision=quad',
- msg="amd-fast-planner doesn't support quad precision")
+ msg='Quad precision is not supported with amd-fast-planner')
conflicts(
'+amd-fast-planner',
when='precision=long_double',
- msg="amd-fast-planner doesn't support long_double precision")
+ msg='long_double precision is not supported with amd-fast-planner')
+ conflicts(
+ '+amd-top-n-planner',
+ when='@:3.0.0',
+ msg='amd-top-n-planner is supported from 3.0.1 onwards')
+ conflicts(
+ '+amd-top-n-planner',
+ when='precision=long_double',
+ msg='long_double precision is not supported with amd-top-n-planner')
+ conflicts(
+ '+amd-top-n-planner',
+ when='precision=quad',
+ msg='Quad precision is not supported with amd-top-n-planner')
+ conflicts(
+ '+amd-top-n-planner',
+ when='+amd-fast-planner',
+ msg='amd-top-n-planner cannot be used with amd-fast-planner')
+ conflicts(
+ '+amd-top-n-planner',
+ when='+threads',
+ msg='amd-top-n-planner works only for single thread')
+ conflicts(
+ '+amd-top-n-planner',
+ when='+mpi',
+ msg='mpi thread is not supported with amd-top-n-planner')
+ conflicts(
+ '+amd-top-n-planner',
+ when='+openmp',
+ msg='openmp thread is not supported with amd-top-n-planner')
+ conflicts(
+ '+amd-mpi-vader-limit',
+ when='@:3.0.0',
+ msg='amd-mpi-vader-limit is supported from 3.0.1 onwards')
+ conflicts(
+ '+amd-mpi-vader-limit',
+ when='precision=quad',
+ msg='Quad precision is not supported with amd-mpi-vader-limit')
+ conflicts(
+ '+amd-trans',
+ when='+threads',
+ msg='amd-trans works only for single thread')
+ conflicts(
+ '+amd-trans',
+ when='+mpi',
+ msg='mpi thread is not supported with amd-trans')
+ conflicts(
+ '+amd-trans',
+ when='+openmp',
+ msg='openmp thread is not supported with amd-trans')
+ conflicts(
+ '+amd-trans',
+ when='precision=long_double',
+ msg='long_double precision is not supported with amd-trans')
+ conflicts(
+ '+amd-trans',
+ when='precision=quad',
+ msg='Quad precision is not supported with amd-trans')
+ conflicts(
+ '+amd-app-opt',
+ when='@:3.0.1',
+ msg='amd-app-opt is supported from 3.1 onwards')
+ conflicts(
+ '+amd-app-opt',
+ when='+mpi',
+ msg='mpi thread is not supported with amd-app-opt')
+ conflicts(
+ '+amd-app-opt',
+ when='precision=long_double',
+ msg='long_double precision is not supported with amd-app-opt')
+ conflicts(
+ '+amd-app-opt',
+ when='precision=quad',
+ msg='Quad precision is not supported with amd-app-opt')
def configure(self, spec, prefix):
"""Configure function"""
@@ -72,28 +186,13 @@ class Amdfftw(FftwBase):
# Check if compiler is AOCC
if '%aocc' in spec:
- options.append("CC={0}".format(os.path.basename(spack_cc)))
- options.append("FC={0}".format(os.path.basename(spack_fc)))
- options.append("F77={0}".format(os.path.basename(spack_fc)))
-
- if '+shared' in spec:
- options.append('--enable-shared')
- else:
- options.append('--disable-shared')
+ options.append('CC={0}'.format(os.path.basename(spack_cc)))
+ options.append('FC={0}'.format(os.path.basename(spack_fc)))
+ options.append('F77={0}'.format(os.path.basename(spack_fc)))
if '+debug' in spec:
options.append('--enable-debug')
- if '+openmp' in spec:
- options.append('--enable-openmp')
- else:
- options.append('--disable-openmp')
-
- if '+threads' in spec:
- options.append('--enable-threads')
- else:
- options.append('--disable-threads')
-
if '+mpi' in spec:
options.append('--enable-mpi')
options.append('--enable-amd-mpifft')
@@ -101,13 +200,18 @@ class Amdfftw(FftwBase):
options.append('--disable-mpi')
options.append('--disable-amd-mpifft')
- if '+amd-fast-planner' in spec:
- options.append('--enable-amd-fast-planner')
- else:
- options.append('--disable-amd-fast-planner')
+ options.extend(self.enable_or_disable('shared'))
+ options.extend(self.enable_or_disable('openmp'))
+ options.extend(self.enable_or_disable('threads'))
+ options.extend(self.enable_or_disable('amd-fast-planner'))
+ options.extend(self.enable_or_disable('amd-top-n-planner'))
+ options.extend(self.enable_or_disable('amd-mpi-vader-limit'))
+ options.extend(self.enable_or_disable('static'))
+ options.extend(self.enable_or_disable('amd-trans'))
+ options.extend(self.enable_or_disable('amd-app-opt'))
if not self.compiler.f77 or not self.compiler.fc:
- options.append("--disable-fortran")
+ options.append('--disable-fortran')
# Cross compilation is supported in amd-fftw by making use of target
# variable to set AMD_ARCH configure option.
@@ -115,9 +219,9 @@ class Amdfftw(FftwBase):
# use target variable to set appropriate -march option in AMD_ARCH.
arch = spec.architecture
options.append(
- "AMD_ARCH={0}".format(
+ 'AMD_ARCH={0}'.format(
arch.target.optimization_flags(
- spec.compiler).split("=")[-1]))
+ spec.compiler).split('=')[-1]))
# Specific SIMD support.
# float and double precisions are supported
diff --git a/var/spack/repos/builtin/packages/amdlibflame/package.py b/var/spack/repos/builtin/packages/amdlibflame/package.py
index 56e97e5894..fc27de6d52 100644
--- a/var/spack/repos/builtin/packages/amdlibflame/package.py
+++ b/var/spack/repos/builtin/packages/amdlibflame/package.py
@@ -36,11 +36,22 @@ class Amdlibflame(LibflameBase):
maintainers = ['amd-toolchain-support']
+ version('3.1', sha256='97c74086306fa6dea9233a3730407c400c196b55f4461d4861364b1ac131ca42')
+ version('3.0.1', sha256='5859e7b39ffbe73115dd598b035f212d36310462cf3a45e555a5087301710776')
version('3.0', sha256='d94e08b688539748571e6d4c1ec1ce42732eac18bd75de989234983c33f01ced')
version('2.2', sha256='12b9c1f92d2c2fa637305aaa15cf706652406f210eaa5cbc17aaea9fcfa576dc')
+ variant('ilp64', default=False, description='Build with ILP64 support')
+
+ conflicts('+ilp64', when="@:3.0.0",
+ msg="ILP64 is supported from 3.0.1 onwards")
+ conflicts('threads=pthreads',
+ msg='pthread is not supported')
+ conflicts('threads=openmp',
+ msg='openmp is not supported')
+
patch('aocc-2.2.0.patch', when="@:2", level=1)
- patch('cray-compiler-wrapper.patch')
+ patch('cray-compiler-wrapper.patch', when="@:3.0.0", level=1)
provides('flame@5.2', when='@2:')
@@ -64,8 +75,29 @@ class Amdlibflame(LibflameBase):
if "@3.0: %aocc" in self.spec:
args.append("--enable-f2c-dotc")
+ if "@3.0.1: +ilp64" in self.spec:
+ args.append("--enable-ilp64")
+
+ if "@3.1: %aocc" in self.spec:
+ args.append("--enable-void-return-complex")
+
+ if "@3.1: " in self.spec:
+ args.append("--enable-blas-ext-gemmt")
+
return args
+ @run_after('build')
+ @on_package_attributes(run_tests=True)
+ def check(self):
+ """make check for single and multithread"""
+ blas_flags = self.spec['blas'].libs.ld_flags
+ if self.spec.variants['threads'].value != 'none':
+ make('check',
+ 'LIBBLAS = -fopenmp {0}'.format(blas_flags), parallel=False)
+ else:
+ make('check',
+ 'LIBBLAS = {0}'.format(blas_flags), parallel=False)
+
def install(self, spec, prefix):
"""make install function"""
# make install in parallel fails with message 'File already exists'
diff --git a/var/spack/repos/builtin/packages/amdlibm/package.py b/var/spack/repos/builtin/packages/amdlibm/package.py
index c38c98fd1e..fa88f3bf56 100644
--- a/var/spack/repos/builtin/packages/amdlibm/package.py
+++ b/var/spack/repos/builtin/packages/amdlibm/package.py
@@ -25,6 +25,7 @@ class Amdlibm(SConsPackage):
# of master branch.
# To install amdlibm from latest master branch:
# spack install amdlibm ^amdlibm@master
+ version("3.1", branch="aocl-3.1")
version("3.0", branch="aocl-3.0")
version("2.2", commit="4033e022da428125747e118ccd6fdd9cee21c470")
@@ -32,6 +33,7 @@ class Amdlibm(SConsPackage):
description="Building with verbosity")
# Mandatory dependencies
+ depends_on("python@3.6.2", when="%aocc@3.2.0:", type=("build", "run"))
depends_on("python@3.6.1:", type=("build", "run"))
depends_on("scons@3.1.2:", type=("build"))
depends_on("mpfr", type=("link"))
@@ -39,25 +41,35 @@ class Amdlibm(SConsPackage):
patch("0001-libm-ose-Scripts-cleanup-pyc-files.patch", when="@2.2")
patch("0002-libm-ose-prevent-log-v3.c-from-building.patch", when="@2.2")
- conflicts("%gcc@:9.1", msg="Minimum required GCC version is 9.2.0")
+ conflicts(
+ '%gcc@:9.1.0',
+ msg='Minimum required GCC version is 9.2.0')
+ conflicts(
+ '%gcc@11.2.0:',
+ msg='Maximum required GCC version is 11.1.0')
+ conflicts(
+ '%aocc@3.2.0',
+ when='@2.2:3.0',
+ msg='amdlibm 2.2 and 3.0 versions are not supported with AOCC 3.2.0')
def build_args(self, spec, prefix):
"""Setting build arguments for amdlibm """
args = ["--prefix={0}".format(prefix)]
- if "%aocc" in spec:
- args.append("--compiler=aocc")
-
# we are circumventing the use of
# Spacks compiler wrappers because
# SCons wipes out all environment variables.
- args.append("CC={0}".format(self.compiler.cc))
- args.append("CXX={0}".format(self.compiler.cxx))
+ if spec.satisfies("@:3.0 %aocc"):
+ args.append("--compiler=aocc")
+
+ var_prefix = '' if spec.satisfies("@:3.0") else 'ALM_'
+ args.append("{0}CC={1}".format(var_prefix, self.compiler.cc))
+ args.append("{0}CXX={1}".format(var_prefix, self.compiler.cxx))
if "+verbose" in spec:
- args.append("verbose=1")
+ args.append("--verbose=1")
else:
- args.append("verbose=0")
+ args.append("--verbose=0")
return args
diff --git a/var/spack/repos/builtin/packages/amdscalapack/package.py b/var/spack/repos/builtin/packages/amdscalapack/package.py
index 23ccc2ccb3..d427760dcb 100644
--- a/var/spack/repos/builtin/packages/amdscalapack/package.py
+++ b/var/spack/repos/builtin/packages/amdscalapack/package.py
@@ -20,11 +20,11 @@ class Amdscalapack(ScalapackBase):
_name = 'amdscalapack'
homepage = "https://developer.amd.com/amd-aocl/scalapack/"
- url = "https://github.com/amd/scalapack/archive/3.0.tar.gz"
git = "https://github.com/amd/scalapack.git"
maintainers = ['amd-toolchain-support']
+ version('3.1', sha256='4c2ee2c44644a0feec0c6fc1b1a413fa9028f14d7035d43a398f5afcfdbacb98')
version('3.0', sha256='6e6f3578f44a8e64518d276e7580530599ecfa8729f568303ed2590688e7096f')
version('2.2', sha256='2d64926864fc6d12157b86e3f88eb1a5205e7fc157bf67e7577d0f18b9a7484c')
@@ -33,6 +33,21 @@ class Amdscalapack(ScalapackBase):
default='Release',
description='CMake build type',
values=('Release', 'RelWithDebInfo'))
+ variant(
+ 'ilp64',
+ default=False,
+ description='Build with ILP64 support')
+
+ conflicts('+ilp64', when="@:3.0",
+ msg="ILP64 is supported from 3.1 onwards")
+
+ def url_for_version(self, version):
+ if version == Version('3.1'):
+ return "https://github.com/amd/aocl-scalapack/archive/3.1.tar.gz"
+ elif version == Version('3.0'):
+ return "https://github.com/amd/scalapack/archive/3.0.tar.gz"
+ elif version == Version('2.2'):
+ return "https://github.com/amd/scalapack/archive/2.2.tar.gz"
def cmake_args(self):
""" cmake_args function"""
@@ -47,8 +62,13 @@ class Amdscalapack(ScalapackBase):
args.extend(['-DUSE_DOTC_WRAPPER:BOOL=%s' % (
'ON' if spec.satisfies('%aocc ^amdblis') else 'OFF')])
+ # -DENABLE_ILP64:BOOL=ON
+ args.extend([self.define_from_variant('ENABLE_ILP64', 'ilp64')])
+
+ # -DUSE_F2C:BOOL=ON
+ args.extend([self.define('USE_F2C', spec.satisfies('@:3.0'))])
+
args.extend([
- '-DUSE_F2C=ON',
'-DLAPACK_FOUND=true',
'-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
'-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
diff --git a/var/spack/repos/builtin/packages/aocl-sparse/package.py b/var/spack/repos/builtin/packages/aocl-sparse/package.py
index f23ef06027..426e17faa3 100644
--- a/var/spack/repos/builtin/packages/aocl-sparse/package.py
+++ b/var/spack/repos/builtin/packages/aocl-sparse/package.py
@@ -20,6 +20,7 @@ class AoclSparse(CMakePackage):
maintainers = ['amd-toolchain-support']
+ version('3.1', sha256='8536f06095c95074d4297a3d2910654085dd91bce82e116c10368a9f87e9c7b9')
version('3.0', sha256='1d04ba16e04c065051af916b1ed9afce50296edfa9b1513211a7378e1d6b952e')
version('2.2', sha256='33c2ed6622cda61d2613ee63ff12c116a6cd209c62e54307b8fde986cd65f664')
@@ -34,6 +35,7 @@ class AoclSparse(CMakePackage):
description='Build with ILP64 support')
depends_on('boost', when='@2.2')
+ depends_on('cmake@3.5:', type='build')
@property
def build_directory(self):
diff --git a/var/spack/repos/builtin/packages/mumps/package.py b/var/spack/repos/builtin/packages/mumps/package.py
index 9f5d6194cd..957a4ba9dc 100644
--- a/var/spack/repos/builtin/packages/mumps/package.py
+++ b/var/spack/repos/builtin/packages/mumps/package.py
@@ -182,11 +182,14 @@ class Mumps(Package):
optf.append('-qfixed')
# As of version 5.2.0, MUMPS is able to take advantage
- # of the GEMMT BLAS extension. MKL is currently the only
+ # of the GEMMT BLAS extension. MKL and amdblis are the only
# known BLAS implementation supported.
if '@5.2.0: ^mkl' in self.spec:
optf.append('-DGEMMT_AVAILABLE')
+ if '@5.2.0: ^amdblis@3.0:' in self.spec:
+ optf.append('-DGEMMT_AVAILABLE')
+
if '+openmp' in self.spec:
optc.append(self.compiler.openmp_flag)
optf.append(self.compiler.openmp_flag)