summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorMichael Sternberg <sternberg@anl.gov>2018-08-29 23:09:34 -0500
committerscheibelp <scheibel1@llnl.gov>2018-08-29 21:09:34 -0700
commita86f22d755887c66b03b62c8be2fa708b79fad0a (patch)
tree15f6aa056527ca8abaed0c758d882a9645668f4c /var
parente860307c31567df9e270673a89a4e4974e4bc11f (diff)
downloadspack-a86f22d755887c66b03b62c8be2fa708b79fad0a.tar.gz
spack-a86f22d755887c66b03b62c8be2fa708b79fad0a.tar.bz2
spack-a86f22d755887c66b03b62c8be2fa708b79fad0a.tar.xz
spack-a86f22d755887c66b03b62c8be2fa708b79fad0a.zip
Intel prefixes (#7469)
Consolidate prefix calculation logic for intel packages into the IntelPackage class. Add documentation on installing Intel packages with Spack an (alternatively) adding them as external packages in Spack.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/intel-daal/package.py36
-rw-r--r--var/spack/repos/builtin/packages/intel-ipp/package.py37
-rw-r--r--var/spack/repos/builtin/packages/intel-mkl/package.py169
-rw-r--r--var/spack/repos/builtin/packages/intel-mpi/package.py103
-rw-r--r--var/spack/repos/builtin/packages/intel-parallel-studio/package.py550
-rw-r--r--var/spack/repos/builtin/packages/intel/package.py104
6 files changed, 154 insertions, 845 deletions
diff --git a/var/spack/repos/builtin/packages/intel-daal/package.py b/var/spack/repos/builtin/packages/intel-daal/package.py
index 434ecf0f73..420f8e009a 100644
--- a/var/spack/repos/builtin/packages/intel-daal/package.py
+++ b/var/spack/repos/builtin/packages/intel-daal/package.py
@@ -22,10 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
-
from spack import *
-from spack.environment import EnvironmentModifications
class IntelDaal(IntelPackage):
@@ -57,36 +54,3 @@ class IntelDaal(IntelPackage):
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8687/l_daal_2016.2.181.tgz")
provides('daal')
-
- @property
- def license_required(self):
- # The Intel libraries are provided without requiring a license as of
- # version 2017.2. Trying to specify the license will fail. See:
- # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
- if self.version >= Version('2017.2'):
- return False
- else:
- return True
-
- def setup_environment(self, spack_env, run_env):
- """Adds environment variables to the generated module file.
-
- These environment variables come from running:
-
- .. code-block:: console
-
- $ source daal/bin/daalvars.sh intel64
- """
- # NOTE: Spack runs setup_environment twice, once pre-build to set up
- # the build environment, and once post-installation to determine
- # the environment variables needed at run-time to add to the module
- # file. The script we need to source is only present post-installation,
- # so check for its existence before sourcing.
- # TODO: At some point we should split setup_environment into
- # setup_build_environment and setup_run_environment to get around
- # this problem.
- daalvars = os.path.join(self.prefix.daal.bin, 'daalvars.sh')
-
- if os.path.isfile(daalvars):
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- daalvars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intel-ipp/package.py b/var/spack/repos/builtin/packages/intel-ipp/package.py
index e7dfe3d4e6..3e4a553090 100644
--- a/var/spack/repos/builtin/packages/intel-ipp/package.py
+++ b/var/spack/repos/builtin/packages/intel-ipp/package.py
@@ -22,10 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
-
from spack import *
-from spack.environment import EnvironmentModifications
class IntelIpp(IntelPackage):
@@ -49,40 +46,8 @@ class IntelIpp(IntelPackage):
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11031/l_ipp_2017.1.132.tgz")
version('2017.0.098', 'e7be757ebe351d9f9beed7efdc7b7118',
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9663/l_ipp_2017.0.098.tgz")
+ # built from parallel_studio_xe_2016.3.067
version('9.0.3.210', '0e1520dd3de7f811a6ef6ebc7aa429a3',
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9067/l_ipp_9.0.3.210.tgz")
provides('ipp')
-
- @property
- def license_required(self):
- # The Intel libraries are provided without requiring a license as of
- # version 2017.2. Trying to specify the license will fail. See:
- # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
- if self.version >= Version('2017.2'):
- return False
- else:
- return True
-
- def setup_environment(self, spack_env, run_env):
- """Adds environment variables to the generated module file.
-
- These environment variables come from running:
-
- .. code-block:: console
-
- $ source ipp/bin/ippvars.sh intel64
- """
- # NOTE: Spack runs setup_environment twice, once pre-build to set up
- # the build environment, and once post-installation to determine
- # the environment variables needed at run-time to add to the module
- # file. The script we need to source is only present post-installation,
- # so check for its existence before sourcing.
- # TODO: At some point we should split setup_environment into
- # setup_build_environment and setup_run_environment to get around
- # this problem.
- ippvars = os.path.join(self.prefix.ipp.bin, 'ippvars.sh')
-
- if os.path.isfile(ippvars):
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- ippvars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intel-mkl/package.py b/var/spack/repos/builtin/packages/intel-mkl/package.py
index b8ce9a96aa..7eb217ac38 100644
--- a/var/spack/repos/builtin/packages/intel-mkl/package.py
+++ b/var/spack/repos/builtin/packages/intel-mkl/package.py
@@ -22,11 +22,9 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
import sys
from spack import *
-from spack.environment import EnvironmentModifications
class IntelMkl(IntelPackage):
@@ -52,8 +50,10 @@ class IntelMkl(IntelPackage):
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11024/l_mkl_2017.1.132.tgz")
version('2017.0.098', '3cdcb739ab5ab1e047eb130b9ffdd8d0',
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9662/l_mkl_2017.0.098.tgz")
+ # built from parallel_studio_xe_2016.3.x
version('11.3.3.210', 'f72546df27f5ebb0941b5d21fd804e34',
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9068/l_mkl_11.3.3.210.tgz")
+ # built from parallel_studio_xe_2016.2.062
version('11.3.2.181', '536dbd82896d6facc16de8f961d17d65',
url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8711/l_mkl_11.3.2.181.tgz")
@@ -62,7 +62,7 @@ class IntelMkl(IntelPackage):
variant(
'threads', default='none',
description='Multithreading support',
- values=('openmp', 'none'),
+ values=('openmp', 'tbb', 'none'),
multi=False
)
@@ -74,166 +74,3 @@ class IntelMkl(IntelPackage):
if sys.platform == 'darwin':
# there is no libmkl_gnu_thread on macOS
conflicts('threads=openmp', when='%gcc')
-
- @property
- def license_required(self):
- # The Intel libraries are provided without requiring a license as of
- # version 2017.2. Trying to specify the license will fail. See:
- # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
- if self.version >= Version('2017.2'):
- return False
- else:
- return True
-
- @property
- def blas_libs(self):
- spec = self.spec
- prefix = self.prefix
- shared = '+shared' in spec
-
- if '+ilp64' in spec:
- mkl_integer = ['libmkl_intel_ilp64']
- else:
- mkl_integer = ['libmkl_intel_lp64']
-
- mkl_threading = ['libmkl_sequential']
-
- omp_libs = LibraryList([])
-
- if spec.satisfies('threads=openmp'):
- if '%intel' in spec:
- mkl_threading = ['libmkl_intel_thread']
- omp_threading = ['libiomp5']
-
- if sys.platform != 'darwin':
- omp_root = prefix.compilers_and_libraries.linux.lib.intel64
- else:
- omp_root = prefix.lib
- omp_libs = find_libraries(
- omp_threading, root=omp_root, shared=shared)
- elif '%gcc' in spec:
- mkl_threading = ['libmkl_gnu_thread']
-
- gcc = Executable(self.compiler.cc)
- libgomp = gcc('--print-file-name', 'libgomp.{0}'.format(
- dso_suffix), output=str)
- omp_libs = LibraryList(libgomp)
-
- # TODO: TBB threading: ['libmkl_tbb_thread', 'libtbb', 'libstdc++']
-
- if sys.platform != 'darwin':
- mkl_root = prefix.compilers_and_libraries.linux.mkl.lib.intel64
- else:
- mkl_root = prefix.mkl.lib
-
- mkl_libs = find_libraries(
- mkl_integer + mkl_threading + ['libmkl_core'],
- root=mkl_root,
- shared=shared
- )
-
- # Intel MKL link line advisor recommends these system libraries
- system_libs = find_system_libraries(
- ['libpthread', 'libm', 'libdl'],
- shared=shared
- )
-
- return mkl_libs + omp_libs + system_libs
-
- @property
- def lapack_libs(self):
- return self.blas_libs
-
- @property
- def scalapack_libs(self):
- libnames = ['libmkl_scalapack']
-
- # Intel MKL does not directly depend on mpi but the scalapack
- # interface does and the corresponding BLACS library changes
- # depending on the MPI implementation we are using. We need then to
- # inspect the root package which asked for Scalapack and check which
- # MPI it depends on.
- root = self.spec.root
- if sys.platform == 'darwin' and '^mpich' in root:
- # MKL 2018 supports only MPICH on darwin
- libnames.append('libmkl_blacs_mpich')
- elif '^openmpi' in root:
- libnames.append('libmkl_blacs_openmpi')
- elif '^mpich@1' in root:
- libnames.append('libmkl_blacs')
- elif '^mpich@2:' in root:
- libnames.append('libmkl_blacs_intelmpi')
- elif '^mvapich2' in root:
- libnames.append('libmkl_blacs_intelmpi')
- elif '^mpt' in root:
- libnames.append('libmkl_blacs_sgimpt')
- elif '^intel-mpi' in root:
- libnames.append('libmkl_blacs_intelmpi')
- else:
- raise InstallError('No MPI found for scalapack')
-
- integer = 'ilp64' if '+ilp64' in self.spec else 'lp64'
- mkl_root = self.prefix.mkl.lib if sys.platform == 'darwin' else \
- self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
-
- shared = True if '+shared' in self.spec else False
-
- libs = find_libraries(
- ['{0}_{1}'.format(l, integer) for l in libnames],
- root=mkl_root,
- shared=shared
- )
-
- return libs
-
- @property
- def headers(self):
- prefix = self.spec.prefix
- if sys.platform != 'darwin':
- include_dir = prefix.compilers_and_libraries.linux.mkl.include
- else:
- include_dir = prefix.include
-
- cblas_h = join_path(include_dir, 'mkl_cblas.h')
- lapacke_h = join_path(include_dir, 'mkl_lapacke.h')
- return HeaderList([cblas_h, lapacke_h])
-
- def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
- # set up MKLROOT for everyone using MKL package
- if sys.platform == 'darwin':
- mkl_lib = self.prefix.mkl.lib
- mkl_root = self.prefix.mkl
- else:
- mkl_lib = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
- mkl_root = self.prefix.compilers_and_libraries.linux.mkl
-
- spack_env.set('MKLROOT', mkl_root)
- spack_env.append_path('SPACK_COMPILER_EXTRA_RPATHS', mkl_lib)
-
- def setup_environment(self, spack_env, run_env):
- """Adds environment variables to the generated module file.
-
- These environment variables come from running:
-
- .. code-block:: console
-
- $ source mkl/bin/mklvars.sh intel64
- """
- # NOTE: Spack runs setup_environment twice, once pre-build to set up
- # the build environment, and once post-installation to determine
- # the environment variables needed at run-time to add to the module
- # file. The script we need to source is only present post-installation,
- # so check for its existence before sourcing.
- # TODO: At some point we should split setup_environment into
- # setup_build_environment and setup_run_environment to get around
- # this problem.
- mklvars = os.path.join(self.prefix.mkl.bin, 'mklvars.sh')
-
- if sys.platform == 'darwin':
- if os.path.isfile(mklvars):
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- mklvars))
- else:
- if os.path.isfile(mklvars):
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- mklvars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intel-mpi/package.py b/var/spack/repos/builtin/packages/intel-mpi/package.py
index 44b501fbe1..ed2f87a0cc 100644
--- a/var/spack/repos/builtin/packages/intel-mpi/package.py
+++ b/var/spack/repos/builtin/packages/intel-mpi/package.py
@@ -22,10 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
-
from spack import *
-from spack.environment import EnvironmentModifications
class IntelMpi(IntelPackage):
@@ -49,95 +46,21 @@ class IntelMpi(IntelPackage):
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11334/l_mpi_2017.2.174.tgz')
version('2017.1.132', 'd5e941ac2bcf7c5576f85f6bcfee4c18',
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11014/l_mpi_2017.1.132.tgz')
+ # built from parallel_studio_xe_2016.3.068
version('5.1.3.223', '4316e78533a932081b1a86368e890800',
url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz')
provides('mpi')
- @property
- def license_required(self):
- # The Intel libraries are provided without requiring a license as of
- # version 2017.2. Trying to specify the license will fail. See:
- # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
- if self.version >= Version('2017.2'):
- return False
- else:
- return True
-
- @property
- def mpi_libs(self):
- mpi_root = self.prefix.compilers_and_libraries.linux.mpi.lib64
- query_parameters = self.spec.last_query.extra_parameters
- libraries = ['libmpifort', 'libmpi']
-
- if 'cxx' in query_parameters:
- libraries = ['libmpicxx'] + libraries
-
- return find_libraries(
- libraries, root=mpi_root, shared=True, recursive=True
- )
-
- @property
- def mpi_headers(self):
- # recurse from self.prefix will find too many things for all the
- # supported sub-architectures like 'mic'
- mpi_root = self.prefix.compilers_and_libraries.linux.mpi.include64
- return find_headers('mpi', root=mpi_root, recursive=False)
-
- def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
- spack_env.set('I_MPI_CC', spack_cc)
- spack_env.set('I_MPI_CXX', spack_cxx)
- spack_env.set('I_MPI_F77', spack_fc)
- spack_env.set('I_MPI_F90', spack_f77)
- spack_env.set('I_MPI_FC', spack_fc)
-
- def setup_dependent_package(self, module, dep_spec):
- # Intel comes with 2 different flavors of MPI wrappers:
- #
- # * mpiicc, mpiicpc, and mpifort are hardcoded to wrap around
- # the Intel compilers.
- # * mpicc, mpicxx, mpif90, and mpif77 allow you to set which
- # compilers to wrap using I_MPI_CC and friends. By default,
- # wraps around the GCC compilers.
- #
- # In theory, these should be equivalent as long as I_MPI_CC
- # and friends are set to point to the Intel compilers, but in
- # practice, mpicc fails to compile some applications while
- # mpiicc works.
- bindir = self.prefix.compilers_and_libraries.linux.mpi.intel64.bin
-
- if self.compiler.name == 'intel':
- self.spec.mpicc = bindir.mpiicc
- self.spec.mpicxx = bindir.mpiicpc
- self.spec.mpifc = bindir.mpiifort
- self.spec.mpif77 = bindir.mpiifort
- else:
- self.spec.mpicc = bindir.mpicc
- self.spec.mpicxx = bindir.mpicxx
- self.spec.mpifc = bindir.mpif90
- self.spec.mpif77 = bindir.mpif77
-
- def setup_environment(self, spack_env, run_env):
- """Adds environment variables to the generated module file.
-
- These environment variables come from running:
-
- .. code-block:: console
-
- $ source compilers_and_libraries/linux/mpi/intel64/bin/mpivars.sh
- """
- # NOTE: Spack runs setup_environment twice, once pre-build to set up
- # the build environment, and once post-installation to determine
- # the environment variables needed at run-time to add to the module
- # file. The script we need to source is only present post-installation,
- # so check for its existence before sourcing.
- # TODO: At some point we should split setup_environment into
- # setup_build_environment and setup_run_environment to get around
- # this problem.
- mpivars = os.path.join(
- self.prefix.compilers_and_libraries.linux.mpi.intel64.bin,
- 'mpivars.sh')
-
- if os.path.isfile(mpivars):
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- mpivars))
+ def setup_dependent_environment(self, *args):
+ # Handle in callback, conveying client's compilers in additional arg.
+ # CAUTION - DUP code in:
+ # ../intel-mpi/package.py
+ # ../intel-parallel-studio/package.py
+ self._setup_dependent_env_callback(*args, compilers_of_client={
+ 'CC': spack_cc,
+ 'CXX': spack_cxx,
+ 'F77': spack_f77,
+ 'F90': spack_fc,
+ 'FC': spack_fc,
+ })
diff --git a/var/spack/repos/builtin/packages/intel-parallel-studio/package.py b/var/spack/repos/builtin/packages/intel-parallel-studio/package.py
index e1f8c208d3..ab72c95fc1 100644
--- a/var/spack/repos/builtin/packages/intel-parallel-studio/package.py
+++ b/var/spack/repos/builtin/packages/intel-parallel-studio/package.py
@@ -22,11 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import glob
-import os
-
from spack import *
-from spack.environment import EnvironmentModifications
class IntelParallelStudio(IntelPackage):
@@ -34,80 +30,85 @@ class IntelParallelStudio(IntelPackage):
homepage = "https://software.intel.com/en-us/intel-parallel-studio-xe"
- version('professional.2018.3', 'e0fb828de0a5f238f775b6122cc7e2c5',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12999/parallel_studio_xe_2018_update3_professional_edition.tgz')
- version('cluster.2018.3', '7112837d20a100b895d9cd9ba9b6748d',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12998/parallel_studio_xe_2018_update3_cluster_edition.tgz')
- version('composer.2018.3', '234223cc470717c2095456d9f048d690',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
- version('professional.2018.1', '91669ff7afbfd07868a429a122c90357',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12375/parallel_studio_xe_2018_update1_professional_edition.tgz')
- version('cluster.2018.1', '9c007011e0e3fc72747b58756fbf01cd',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12374/parallel_studio_xe_2018_update1_cluster_edition.tgz')
- version('composer.2018.1', '28cb807126d713350f4aa6f9f167448a',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
- version('professional.2018.0', '9a233854e9218937bc5f46f02b3c7542',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12062/parallel_studio_xe_2018_professional_edition.tgz')
- version('cluster.2018.0', 'fa9baeb83dd2e8e4a464e3db38f28d0f',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12058/parallel_studio_xe_2018_cluster_edition.tgz')
- version('composer.2018.0', '31ba768fba6e7322957b03feaa3add28',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
- version('cluster.2017.5', 'baeb8e584317fcdf1f60b8208bd4eab5',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12138/parallel_studio_xe_2017_update5.tgz')
- version('professional.2017.4', '27398416078e1e4005afced3e9a6df7e',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
- version('cluster.2017.4', '27398416078e1e4005afced3e9a6df7e',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
- version('composer.2017.4', 'd03d351809e182c481dc65e07376d9a2',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
- version('professional.2017.3', '691874735458d3e88fe0bcca4438b2a9',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
- version('cluster.2017.3', '691874735458d3e88fe0bcca4438b2a9',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
- version('composer.2017.3', '52344df122c17ddff3687f84ceb21623',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
- version('professional.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
- version('cluster.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
- version('composer.2017.2', '2891ab1ece43eb61b6ab892f07c47f01',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
- version('professional.2017.1', '7f75a4a7e2c563be778c377f9d35a542',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
- version('cluster.2017.1', '7f75a4a7e2c563be778c377f9d35a542',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
- version('composer.2017.1', '1f31976931ed8ec424ac7c3ef56f5e85',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
- version('professional.2017.0', '34c98e3329d6ac57408b738ae1daaa01',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
- version('cluster.2017.0', '34c98e3329d6ac57408b738ae1daaa01',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
- version('composer.2017.0', 'b67da0065a17a05f110ed1d15c3c6312',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
- version('professional.2016.4', '16a641a06b156bb647c8a56e71f3bb33',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
- version('cluster.2016.4', '16a641a06b156bb647c8a56e71f3bb33',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
- version('composer.2016.4', '2bc9bfc9be9c1968a6e42efb4378f40e',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
- version('professional.2016.3', 'eda19bb0d0d19709197ede58f13443f3',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
- version('cluster.2016.3', 'eda19bb0d0d19709197ede58f13443f3',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
- version('composer.2016.3', '3208eeabee951fc27579177b593cefe9',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
- version('professional.2016.2', '70be832f2d34c9bf596a5e99d5f2d832',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
- version('cluster.2016.2', '70be832f2d34c9bf596a5e99d5f2d832',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
- version('composer.2016.2', '1133fb831312eb519f7da897fec223fa',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
- version('professional.2015.6', 'd460f362c30017b60f85da2e51ad25bf',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
- version('cluster.2015.6', 'd460f362c30017b60f85da2e51ad25bf',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
- version('composer.2015.6', 'da9f8600c18d43d58fba0488844f79c9',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
+ # As of 2016, the product comes in three "editions" that vary by scope.
+ #
+ # In Spack, select the edition via the version number in the spec, e.g.:
+ # intel-parallel-studio@cluster.2018
+
+ # Cluster Edition (top tier; all components included)
+ version('cluster.2018.3', '7112837d20a100b895d9cd9ba9b6748d', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12998/parallel_studio_xe_2018_update3_cluster_edition.tgz')
+ version('cluster.2018.2', '3b8d93a3fa10869dde024b739b96a9c4', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12717/parallel_studio_xe_2018_update2_cluster_edition.tgz')
+ version('cluster.2018.1', '9c007011e0e3fc72747b58756fbf01cd', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12374/parallel_studio_xe_2018_update1_cluster_edition.tgz')
+ version('cluster.2018.0', 'fa9baeb83dd2e8e4a464e3db38f28d0f', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12058/parallel_studio_xe_2018_cluster_edition.tgz')
+ #
+ version('cluster.2017.7', '158461b000b31f0ef8169b6f0277bfb5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12856/parallel_studio_xe_2017_update7.tgz')
+ version('cluster.2017.6', 'b0bbddeec3e78a84b967c9ca70dade77', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12534/parallel_studio_xe_2017_update6.tgz')
+ version('cluster.2017.5', 'baeb8e584317fcdf1f60b8208bd4eab5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12138/parallel_studio_xe_2017_update5.tgz')
+ version('cluster.2017.4', '27398416078e1e4005afced3e9a6df7e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
+ version('cluster.2017.3', '691874735458d3e88fe0bcca4438b2a9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
+ version('cluster.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
+ version('cluster.2017.1', '7f75a4a7e2c563be778c377f9d35a542', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
+ version('cluster.2017.0', '34c98e3329d6ac57408b738ae1daaa01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
+ #
+ version('cluster.2016.4', '16a641a06b156bb647c8a56e71f3bb33', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
+ version('cluster.2016.3', 'eda19bb0d0d19709197ede58f13443f3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
+ version('cluster.2016.2', '70be832f2d34c9bf596a5e99d5f2d832', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
+ version('cluster.2016.1', '83b260ef3fcfd4e30afbeb7eb31b6b20', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8365/parallel_studio_xe_2016_update1.tgz')
+ version('cluster.2016.0', '00b4de9727a906a3aff468c26dd3f89c', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/7997/parallel_studio_xe_2016.tgz')
+ #
+ version('cluster.2015.6', 'd460f362c30017b60f85da2e51ad25bf', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
+ version('cluster.2015.1', '542b78c86beff9d7b01076a7be9c6ddc', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4992/parallel_studio_xe_2015_update1.tgz')
+
+ # Professional Edition (middle tier; excluded: MPI/TAC/Cluster Checker)
+ #
+ # NB: Pre-2018 download packages for Professional are the same as for
+ # Cluster; differences manifest only in the tokens present in the license
+ # file delivered as part of the purchase.
+ version('professional.2018.3', 'e0fb828de0a5f238f775b6122cc7e2c5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12999/parallel_studio_xe_2018_update3_professional_edition.tgz')
+ version('professional.2018.2', '91ed14aeb6157d60a0ec39929d0bc778', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12718/parallel_studio_xe_2018_update2_professional_edition.tgz')
+ version('professional.2018.1', '91669ff7afbfd07868a429a122c90357', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12375/parallel_studio_xe_2018_update1_professional_edition.tgz')
+ version('professional.2018.0', '9a233854e9218937bc5f46f02b3c7542', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12062/parallel_studio_xe_2018_professional_edition.tgz')
+ #
+ version('professional.2017.7', '158461b000b31f0ef8169b6f0277bfb5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12856/parallel_studio_xe_2017_update7.tgz')
+ version('professional.2017.6', 'b0bbddeec3e78a84b967c9ca70dade77', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12534/parallel_studio_xe_2017_update6.tgz')
+ version('professional.2017.5', 'baeb8e584317fcdf1f60b8208bd4eab5', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12138/parallel_studio_xe_2017_update5.tgz')
+ version('professional.2017.4', '27398416078e1e4005afced3e9a6df7e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
+ version('professional.2017.3', '691874735458d3e88fe0bcca4438b2a9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
+ version('professional.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
+ version('professional.2017.1', '7f75a4a7e2c563be778c377f9d35a542', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
+ version('professional.2017.0', '34c98e3329d6ac57408b738ae1daaa01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
+ #
+ version('professional.2016.4', '16a641a06b156bb647c8a56e71f3bb33', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
+ version('professional.2016.3', 'eda19bb0d0d19709197ede58f13443f3', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
+ version('professional.2016.2', '70be832f2d34c9bf596a5e99d5f2d832', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
+ version('professional.2016.1', '83b260ef3fcfd4e30afbeb7eb31b6b20', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8365/parallel_studio_xe_2016_update1.tgz')
+ version('professional.2016.0', '00b4de9727a906a3aff468c26dd3f89c', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/7997/parallel_studio_xe_2016.tgz')
+ #
+ version('professional.2015.6', 'd460f362c30017b60f85da2e51ad25bf', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
+ version('professional.2015.1', '542b78c86beff9d7b01076a7be9c6ddc', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4992/parallel_studio_xe_2015_update1.tgz')
+
+ # Composer Edition (basic tier; excluded: MPI/..., Advisor/Inspector/Vtune)
+ version('composer.2018.3', '234223cc470717c2095456d9f048d690', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
+ version('composer.2018.2', '76f820f53de4c1ff998229c983cf4f53', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12722/parallel_studio_xe_2018_update2_composer_edition.tgz')
+ version('composer.2018.1', '28cb807126d713350f4aa6f9f167448a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
+ version('composer.2018.0', '31ba768fba6e7322957b03feaa3add28', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
+ #
+ version('composer.2017.7', '4c02a4a29a8f2424f31baa23116a1001', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12860/parallel_studio_xe_2017_update7_composer_edition.tgz')
+ version('composer.2017.6', 'd96cce0c3feef20091efde458f581a9f', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12538/parallel_studio_xe_2017_update6_composer_edition.tgz')
+ # version('composer.2017.5', -- TBD --
+ version('composer.2017.4', 'd03d351809e182c481dc65e07376d9a2', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
+ version('composer.2017.3', '52344df122c17ddff3687f84ceb21623', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
+ version('composer.2017.2', '2891ab1ece43eb61b6ab892f07c47f01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
+ version('composer.2017.1', '1f31976931ed8ec424ac7c3ef56f5e85', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
+ version('composer.2017.0', 'b67da0065a17a05f110ed1d15c3c6312', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
+ #
+ version('composer.2016.4', '2bc9bfc9be9c1968a6e42efb4378f40e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
+ version('composer.2016.3', '3208eeabee951fc27579177b593cefe9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
+ version('composer.2016.2', '1133fb831312eb519f7da897fec223fa', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
+ #
+ # Pre-2016, the only product was "Composer XE"; dir structure is different.
+ version('composer.2015.6', 'da9f8600c18d43d58fba0488844f79c9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
+ version('composer.2015.1', '85beae681ae56411a8e791a7c44a5c0a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4933/l_compxe_2015.1.133.tgz')
# Generic Variants
variant('rpath', default=True,
@@ -151,373 +152,46 @@ class IntelParallelStudio(IntelPackage):
variant('vtune', default=False,
description='Install the Intel VTune Amplifier XE')
- provides('daal', when='+daal')
-
- provides('ipp', when='+ipp')
+ provides('daal', when='+daal')
+ provides('ipp', when='+ipp')
- provides('mkl', when='+mkl')
- provides('blas', when='+mkl')
- provides('lapack', when='+mkl')
- provides('scalapack', when='+mkl')
+ provides('mkl', when='+mkl')
+ provides('blas', when='+mkl')
+ provides('lapack', when='+mkl')
+ provides('scalapack', when='+mkl')
- provides('mpi', when='+mpi')
+ provides('mpi', when='+mpi')
+ provides('tbb', when='+tbb')
- provides('tbb', when='+tbb')
+ # For TBB, static linkage is not and has never been supported by Intel:
+ # https://www.threadingbuildingblocks.org/faq/there-version-tbb-provides-statically-linked-libraries
+ conflicts('+tbb', when='~shared')
- # The following components are not available in the Composer Edition
conflicts('+advisor', when='@composer.0:composer.9999')
conflicts('+clck', when='@composer.0:composer.9999')
conflicts('+inspector', when='@composer.0:composer.9999')
conflicts('+itac', when='@composer.0:composer.9999')
+ conflicts('+mpi', when='@composer.0:composer.9999')
conflicts('+vtune', when='@composer.0:composer.9999')
- @property
- def blas_libs(self):
- spec = self.spec
- prefix = self.prefix
- shared = '+shared' in spec
-
- if '+ilp64' in spec:
- mkl_integer = ['libmkl_intel_ilp64']
- else:
- mkl_integer = ['libmkl_intel_lp64']
-
- mkl_threading = ['libmkl_sequential']
-
- omp_libs = LibraryList([])
-
- if spec.satisfies('threads=openmp'):
- if '%intel' in spec:
- mkl_threading = ['libmkl_intel_thread']
- omp_threading = ['libiomp5']
-
- omp_root = prefix.compilers_and_libraries.linux.lib.intel64
- omp_libs = find_libraries(
- omp_threading, root=omp_root, shared=shared)
- elif '%gcc' in spec:
- mkl_threading = ['libmkl_gnu_thread']
-
- gcc = Executable(self.compiler.cc)
- omp_libs = gcc('--print-file-name', 'libgomp.{0}'.format(
- dso_suffix), output=str)
- omp_libs = LibraryList(omp_libs)
-
- # TODO: TBB threading: ['libmkl_tbb_thread', 'libtbb', 'libstdc++']
-
- mkl_root = prefix.compilers_and_libraries.linux.mkl.lib.intel64
-
- mkl_libs = find_libraries(
- mkl_integer + mkl_threading + ['libmkl_core'],
- root=mkl_root,
- shared=shared
- )
-
- # Intel MKL link line advisor recommends these system libraries
- system_libs = find_system_libraries(
- ['libpthread', 'libm', 'libdl'],
- shared=shared
- )
-
- return mkl_libs + omp_libs + system_libs
-
- @property
- def lapack_libs(self):
- return self.blas_libs
-
- @property
- def scalapack_libs(self):
- libnames = ['libmkl_scalapack']
- if self.spec.satisfies('^openmpi'):
- libnames.append('libmkl_blacs_openmpi')
- elif self.spec.satisfies('^mpich@1'):
- libnames.append('libmkl_blacs')
- elif self.spec.satisfies('^mpich@2:'):
- libnames.append('libmkl_blacs_intelmpi')
- elif self.spec.satisfies('^mvapich2'):
- libnames.append('libmkl_blacs_intelmpi')
- elif self.spec.satisfies('^mpt'):
- libnames.append('libmkl_blacs_sgimpt')
- # TODO: ^intel-parallel-studio can mean intel mpi, a compiler or a lib
- # elif self.spec.satisfies('^intel-parallel-studio'):
- # libnames.append('libmkl_blacs_intelmpi')
- else:
- raise InstallError('No MPI found for scalapack')
-
- integer = 'ilp64' if '+ilp64' in self.spec else 'lp64'
- mkl_root = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
- shared = True if '+shared' in self.spec else False
-
- libs = find_libraries(
- ['{0}_{1}'.format(l, integer) for l in libnames],
- root=mkl_root,
- shared=shared
- )
- return libs
-
- @property
- def mpi_libs(self):
- mpi_root = self.prefix.compilers_and_libraries.linux.mpi.lib64
- query_parameters = self.spec.last_query.extra_parameters
- libraries = ['libmpifort', 'libmpi']
-
- if 'cxx' in query_parameters:
- libraries = ['libmpicxx'] + libraries
-
- return find_libraries(
- libraries, root=mpi_root, shared=True, recursive=True
- )
-
- @property
- def mpi_headers(self):
- # recurse from self.prefix will find too many things for all the
- # supported sub-architectures like 'mic'
- mpi_root = self.prefix.compilers_and_libraries.linux.mpi.include64
- return find_headers('mpi', root=mpi_root, recursive=False)
-
- @property
- def components(self):
- spec = self.spec
- edition = self.version[0]
-
- # Intel(R) Compilers
- components = [
- # Common files
- 'intel-comp-',
- 'intel-openmp',
-
- # C/C++
- 'intel-icc',
-
- # Fortran
- 'intel-ifort',
-
- # Parallel Studio Documentation and Licensing Files
- 'intel-psxe',
- ]
-
- # Intel(R) Parallel Studio XE Suite Files and Documentation
- if edition == 'cluster':
- components.append('intel-icsxe')
- elif edition == 'professional':
- components.extend(['intel-ips', 'intel-ipsc', 'intel-ipsf'])
- elif edition == 'composer':
- components.extend([
- 'intel-compxe', 'intel-ccompxe', 'intel-fcompxe'
- ])
-
- # Intel(R) Data Analytics Acceleration Library
- if '+daal' in spec:
- components.append('intel-daal')
-
- # Intel(R) Debugger for Heterogeneous Compute
- if '+gdb' in spec:
- components.append('intel-gdb')
-
- # Intel(R) Integrated Performance Primitives
- if '+ipp' in spec:
- components.extend(['intel-ipp', 'intel-crypto-ipp'])
-
- # Intel(R) Math Kernel Library
- if '+mkl' in spec:
- components.append('intel-mkl')
-
- # Intel(R) MPI Library
- if '+mpi' in spec:
- components.extend(['intel-mpi', 'intel-mpirt', 'intel-imb'])
-
- # Intel(R) Threading Building Blocks
- if '+tbb' in spec:
- components.append('intel-tbb')
-
- # Intel(R) Advisor
- if '+advisor' in spec:
- components.append('intel-advisor')
-
- # Intel(R) Cluster Checker
- if '+clck' in spec:
- components.append('intel_clck')
-
- # Intel(R) Inspector
- if '+inspector' in spec:
- components.append('intel-inspector')
-
- # Intel(R) Trace Analyzer and Collector
- if '+itac' in spec:
- components.extend(['intel-itac', 'intel-ta', 'intel-tc'])
-
- # Intel(R) VTune(TM) Amplifier XE
- if '+vtune' in spec:
- components.append('intel-vtune-amplifier')
-
- return components
-
- @property
- def bin_dir(self):
- """The relative path to the bin directory with symlinks resolved."""
-
- bin_path = os.path.join(self.prefix.bin, 'icc')
- absolute_path = os.path.realpath(bin_path) # resolve symlinks
- relative_path = os.path.relpath(absolute_path, self.prefix)
- return os.path.dirname(relative_path)
-
- @property
- def lib_dir(self):
- """The relative path to the lib directory with symlinks resolved."""
-
- lib_path = os.path.join(self.prefix.lib, 'intel64', 'libimf.a')
- absolute_path = os.path.realpath(lib_path) # resolve symlinks
- relative_path = os.path.relpath(absolute_path, self.prefix)
- return os.path.dirname(relative_path)
-
- @property
- def license_files(self):
- spec = self.spec
- year = self.version[1]
-
- directories = [
- 'Licenses',
- self.bin_dir
- ]
-
- if '+advisor' in spec:
- advisor_dir = 'advisor_xe/licenses'
-
- if year >= 2017:
- advisor_dir = 'advisor/licenses'
-
- directories.append(advisor_dir)
-
- if '+inspector' in spec:
- inspector_dir = 'inspector_xe/licenses'
-
- if year >= 2017:
- inspector_dir = 'inspector/licenses'
-
- directories.append(inspector_dir)
-
- if '+itac' in spec:
- itac_dir = 'itac_{0}'.format(year)
-
- directories.append(itac_dir)
-
- if '+vtune' in spec:
- vtune_dir = 'vtune_amplifier_xe/licenses'
-
- if year >= 2018:
- vtune_dir = 'vtune_amplifier/licenses'
-
- directories.append(vtune_dir)
-
- return [os.path.join(dir, 'license.lic') for dir in directories]
-
- @run_after('install')
- def filter_compiler_wrappers(self):
- spec = self.spec
-
- if '+mpi' in spec:
- if '~newdtags' in spec:
- wrappers = [
- 'mpif77', 'mpif90', 'mpigcc', 'mpigxx',
- 'mpiicc', 'mpiicpc', 'mpiifort'
- ]
- wrapper_paths = []
- for root, dirs, files in os.walk(spec.prefix):
- for name in files:
- if name in wrappers:
- wrapper_paths.append(os.path.join(spec.prefix,
- root, name))
- for wrapper in wrapper_paths:
- filter_file('-Xlinker --enable-new-dtags', ' ',
- wrapper, string=True)
-
- @run_after('install')
- def rpath_configuration(self):
- spec = self.spec
-
- if '+rpath' in spec:
- lib_dir = os.path.join(self.prefix, self.lib_dir)
- for compiler in ['icc', 'icpc', 'ifort']:
- cfgfilename = os.path.join(
- self.prefix, self.bin_dir, '{0}.cfg'.format(compiler))
- cfgfilename = os.path.abspath(cfgfilename)
- with open(cfgfilename, 'w') as f:
- f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir))
-
- @run_after('install')
- def fix_psxevars(self):
- """Newer versions (>2016) of Intel Parallel Studio have a bug in the
- ``psxevars.sh`` script."""
-
- bindir = glob.glob(join_path(
- self.prefix, 'parallel_studio*', 'bin'))[0]
- bindir = os.path.abspath(bindir)
- if self.version[1] > 2016:
- filter_file('^SCRIPTPATH=.*', 'SCRIPTPATH={0}'.format(self.prefix),
- os.path.join(bindir, 'psxevars.sh'),
- os.path.join(bindir, 'psxevars.csh'))
-
- def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
- if '+mpi' in self.spec:
- spack_env.set('I_MPI_CC', spack_cc)
- spack_env.set('I_MPI_CXX', spack_cxx)
- spack_env.set('I_MPI_F77', spack_fc)
- spack_env.set('I_MPI_F90', spack_f77)
- spack_env.set('I_MPI_FC', spack_fc)
-
- # set up MKLROOT for everyone using MKL package
- if '+mkl' in self.spec:
- mkl_root = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64 # noqa
-
- spack_env.set('MKLROOT', self.prefix)
- spack_env.append_path('SPACK_COMPILER_EXTRA_RPATHS', mkl_root)
-
- def setup_dependent_package(self, module, dep_spec):
- if '+mpi' in self.spec:
- # Intel comes with 2 different flavors of MPI wrappers:
- #
- # * mpiicc, mpiicpc, and mpifort are hardcoded to wrap around
- # the Intel compilers.
- # * mpicc, mpicxx, mpif90, and mpif77 allow you to set which
- # compilers to wrap using I_MPI_CC and friends. By default,
- # wraps around the GCC compilers.
- #
- # In theory, these should be equivalent as long as I_MPI_CC
- # and friends are set to point to the Intel compilers, but in
- # practice, mpicc fails to compile some applications while
- # mpiicc works.
- bindir = self.prefix.compilers_and_libraries.linux.mpi.intel64.bin
-
- if self.compiler.name == 'intel':
- self.spec.mpicc = bindir.mpiicc
- self.spec.mpicxx = bindir.mpiicpc
- self.spec.mpifc = bindir.mpiifort
- self.spec.mpif77 = bindir.mpiifort
- else:
- self.spec.mpicc = bindir.mpicc
- self.spec.mpicxx = bindir.mpicxx
- self.spec.mpifc = bindir.mpif90
- self.spec.mpif77 = bindir.mpif77
-
- def setup_environment(self, spack_env, run_env):
- """Adds environment variables to the generated module file.
-
- These environment variables come from running:
-
- .. code-block:: console
-
- $ source parallel_studio_xe_2017/bin/psxevars.sh intel64
- """
- # NOTE: Spack runs setup_environment twice, once pre-build to set up
- # the build environment, and once post-installation to determine
- # the environment variables needed at run-time to add to the module
- # file. The script we need to source is only present post-installation,
- # so check for its existence before sourcing.
- # TODO: At some point we should split setup_environment into
- # setup_build_environment and setup_run_environment to get around
- # this problem.
- psxevars = glob.glob(join_path(
- self.prefix, 'parallel_studio*', 'bin', 'psxevars.sh'))
-
- if psxevars:
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- psxevars[0], 'intel64'))
+ conflicts('+clck', when='@professional.0:professional.9999')
+ conflicts('+itac', when='@professional.0:professional.9999')
+ conflicts('+mpi', when='@professional.0:professional.9999')
+
+ # The following components are not available before 2016
+ conflicts('+daal', when='@professional.0:professional.2015.7')
+ conflicts('+daal', when='@cluster.0:cluster.2015.7')
+ conflicts('+daal', when='@composer.0:composer.2015.7')
+
+ def setup_dependent_environment(self, *args):
+ # Handle in callback, conveying client's compilers in additional arg.
+ # CAUTION - DUP code in:
+ # ../intel-mpi/package.py
+ # ../intel-parallel-studio/package.py
+ self._setup_dependent_env_callback(*args, compilers_of_client={
+ 'CC': spack_cc,
+ 'CXX': spack_cxx,
+ 'F77': spack_f77,
+ 'F90': spack_fc,
+ 'FC': spack_fc,
+ })
diff --git a/var/spack/repos/builtin/packages/intel/package.py b/var/spack/repos/builtin/packages/intel/package.py
index 220ff5bcf0..edb4526462 100644
--- a/var/spack/repos/builtin/packages/intel/package.py
+++ b/var/spack/repos/builtin/packages/intel/package.py
@@ -22,10 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
-
from spack import *
-from spack.environment import EnvironmentModifications
class Intel(IntelPackage):
@@ -33,82 +30,31 @@ class Intel(IntelPackage):
homepage = "https://software.intel.com/en-us/intel-parallel-studio-xe"
- version('18.0.3', '234223cc470717c2095456d9f048d690',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
- version('18.0.1', '28cb807126d713350f4aa6f9f167448a',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
- version('18.0.0', '31ba768fba6e7322957b03feaa3add28',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
- version('17.0.4', 'd03d351809e182c481dc65e07376d9a2',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
- version('17.0.3', '52344df122c17ddff3687f84ceb21623',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
- version('17.0.2', '2891ab1ece43eb61b6ab892f07c47f01',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
- version('17.0.1', '1f31976931ed8ec424ac7c3ef56f5e85',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
- version('17.0.0', 'b67da0065a17a05f110ed1d15c3c6312',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
- version('16.0.4', '2bc9bfc9be9c1968a6e42efb4378f40e',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
- version('16.0.3', '3208eeabee951fc27579177b593cefe9',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
- version('16.0.2', '1133fb831312eb519f7da897fec223fa',
- url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
+ # Same as in ../intel-parallel-studio/package.py, Composer Edition,
+ # but the version numbering in Spack differs.
+ version('18.0.3', '234223cc470717c2095456d9f048d690', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13002/parallel_studio_xe_2018_update3_composer_edition.tgz')
+ version('18.0.2', '76f820f53de4c1ff998229c983cf4f53', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12722/parallel_studio_xe_2018_update2_composer_edition.tgz')
+ version('18.0.1', '28cb807126d713350f4aa6f9f167448a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12381/parallel_studio_xe_2018_update1_composer_edition.tgz')
+ version('18.0.0', '31ba768fba6e7322957b03feaa3add28', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
+ #
+ version('17.0.7', '4c02a4a29a8f2424f31baa23116a1001', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12860/parallel_studio_xe_2017_update7_composer_edition.tgz')
+ version('17.0.6', 'd96cce0c3feef20091efde458f581a9f', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12538/parallel_studio_xe_2017_update6_composer_edition.tgz')
+ # version('17.0.5', -- TBD --
+ version('17.0.4', 'd03d351809e182c481dc65e07376d9a2', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
+ version('17.0.3', '52344df122c17ddff3687f84ceb21623', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
+ version('17.0.2', '2891ab1ece43eb61b6ab892f07c47f01', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
+ version('17.0.1', '1f31976931ed8ec424ac7c3ef56f5e85', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
+ version('17.0.0', 'b67da0065a17a05f110ed1d15c3c6312', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
+ #
+ version('16.0.4', '2bc9bfc9be9c1968a6e42efb4378f40e', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
+ version('16.0.3', '3208eeabee951fc27579177b593cefe9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
+ version('16.0.2', '1133fb831312eb519f7da897fec223fa', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
+ #
+ # Grandfathered release; different directory structure.
+ version('15.0.6', 'da9f8600c18d43d58fba0488844f79c9', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
+ version('15.0.1', '85beae681ae56411a8e791a7c44a5c0a', url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/4933/l_compxe_2015.1.133.tgz')
variant('rpath', default=True, description='Add rpath to .cfg files')
- components = [
- # Common files
- 'intel-comp-',
- 'intel-openmp',
-
- # C/C++
- 'intel-icc',
-
- # Fortran
- 'intel-ifort',
- ]
-
- @property
- def license_files(self):
- return [
- 'Licenses/license.lic',
- join_path('compilers_and_libraries', 'linux', 'bin',
- 'intel64', 'license.lic')
- ]
-
- @run_after('install')
- def rpath_configuration(self):
- if '+rpath' in self.spec:
- bin_dir = join_path(self.prefix, 'compilers_and_libraries',
- 'linux', 'bin', 'intel64')
- lib_dir = join_path(self.prefix, 'compilers_and_libraries',
- 'linux', 'compiler', 'lib', 'intel64_lin')
- for compiler in ['icc', 'icpc', 'ifort']:
- cfgfilename = join_path(bin_dir, '{0}.cfg'.format(compiler))
- with open(cfgfilename, 'w') as f:
- f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir))
-
- def setup_environment(self, spack_env, run_env):
- """Adds environment variables to the generated module file.
-
- These environment variables come from running:
-
- .. code-block:: console
-
- $ source bin/compilervars.sh intel64
- """
- # NOTE: Spack runs setup_environment twice, once pre-build to set up
- # the build environment, and once post-installation to determine
- # the environment variables needed at run-time to add to the module
- # file. The script we need to source is only present post-installation,
- # so check for its existence before sourcing.
- # TODO: At some point we should split setup_environment into
- # setup_build_environment and setup_run_environment to get around
- # this problem.
- compilervars = os.path.join(self.prefix.bin, 'compilervars.sh')
-
- if os.path.isfile(compilervars):
- run_env.extend(EnvironmentModifications.from_sourcing_file(
- compilervars, 'intel64'))
+ # Since the current package is a subset of 'intel-parallel-studio',
+ # all remaining Spack actions are handled in the package class.