From a86f22d755887c66b03b62c8be2fa708b79fad0a Mon Sep 17 00:00:00 2001 From: Michael Sternberg Date: Wed, 29 Aug 2018 23:09:34 -0500 Subject: 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. --- .../repos/builtin/packages/intel-daal/package.py | 36 -- .../repos/builtin/packages/intel-ipp/package.py | 37 +- .../repos/builtin/packages/intel-mkl/package.py | 169 +------ .../repos/builtin/packages/intel-mpi/package.py | 103 +--- .../packages/intel-parallel-studio/package.py | 550 +++++---------------- var/spack/repos/builtin/packages/intel/package.py | 104 +--- 6 files changed, 154 insertions(+), 845 deletions(-) (limited to 'var') 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. -- cgit v1.2.3-70-g09d2