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.
This commit is contained in:
Michael Sternberg
2018-08-29 23:09:34 -05:00
committed by scheibelp
parent e860307c31
commit a86f22d755
14 changed files with 3039 additions and 943 deletions

View File

@@ -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'))

View File

@@ -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'))

View File

@@ -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'))

View File

@@ -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,
})

View File

@@ -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('daal', when='+daal')
provides('ipp', when='+ipp')
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('tbb', when='+tbb')
provides('mpi', when='+mpi')
# 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')
provides('tbb', when='+tbb')
# 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,
})

View File

@@ -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.