summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py')
-rw-r--r--var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py278
1 files changed, 156 insertions, 122 deletions
diff --git a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py
index 2d0807fd60..5579e3146f 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py
@@ -3,13 +3,93 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-import glob
import platform
-import subprocess
-from os import path
+from spack.build_environment import dso_suffix
from spack.package import *
+linux_versions = [
+ {
+ 'version': '2022.1.0',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18717/l_dpcpp-cpp-compiler_p_2022.1.0.137_offline.sh',
+ 'sha256': '1027819581ba820470f351abfc2b2658ff2684ed8da9ed0e722a45774a2541d6'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18703/l_fortran-compiler_p_2022.1.0.134_offline.sh',
+ 'sha256': '583082abe54a657eb933ea4ba3e988eef892985316be13f3e23e18a3c9515020'
+ }
+ },
+
+ {
+ 'version': '2022.0.2',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18478/l_dpcpp-cpp-compiler_p_2022.0.2.84_offline.sh',
+ 'sha256': 'ade5bbd203e7226ca096d7bf758dce07857252ec54e83908cac3849e6897b8f3'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18481/l_fortran-compiler_p_2022.0.2.83_offline.sh',
+ 'sha256': '78532b4118fc3d7afd44e679fc8e7aed1e84efec0d892908d9368e0c7c6b190c'
+ }
+ },
+
+ {
+ 'version': '2022.0.1',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18435/l_dpcpp-cpp-compiler_p_2022.0.1.71_offline.sh',
+ 'sha256': 'c7cddc64c3040eece2dcaf48926ba197bb27e5a46588b1d7b3beddcdc379926a'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18436/l_fortran-compiler_p_2022.0.1.70_offline.sh',
+ 'sha256': '2cb28a04f93554bfeffd6cad8bd0e7082735f33d73430655dea86df8933f50d1'
+ }
+ },
+ {
+ 'version': '2021.4.0',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18209/l_dpcpp-cpp-compiler_p_2021.4.0.3201_offline.sh',
+ 'sha256': '9206bff1c2fdeb1ca0d5f79def90dcf3e6c7d5711b9b5adecd96a2ba06503828'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18210/l_fortran-compiler_p_2021.4.0.3224_offline.sh',
+ 'sha256': 'de2fcf40e296c2e882e1ddf2c45bb8d25aecfbeff2f75fcd7494068d621eb7e0'
+ }
+ },
+ {
+ 'version': '2021.3.0',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/17928/l_dpcpp-cpp-compiler_p_2021.3.0.3168_offline.sh',
+ 'sha256': 'f848d81b7cabc76c2841c9757abb2290921efd7b82491d830605f5785600e7a1'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/17959/l_fortran-compiler_p_2021.3.0.3168_offline.sh',
+ 'sha256': 'c4553f7e707be8e8e196f625e4e7fbc8eff5474f64ab85fc7146b5ed53ebc87c'
+ }
+ },
+ {
+ 'version': '2021.2.0',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/17749/l_dpcpp-cpp-compiler_p_2021.2.0.118_offline.sh',
+ 'sha256': '5d01cbff1a574c3775510cd97ffddd27fdf56d06a6b0c89a826fb23da4336d59'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/17756/l_fortran-compiler_p_2021.2.0.136_offline.sh',
+ 'sha256': 'a62e04a80f6d2f05e67cd5acb03fa58857ee22c6bd581ec0651c0ccd5bdec5a1'
+ }
+ },
+ {
+ 'version': '2021.1.2',
+ 'cpp': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/17513/l_dpcpp-cpp-compiler_p_2021.1.2.63_offline.sh',
+ 'sha256': '68d6cb638091990e578e358131c859f3bbbbfbf975c581fd0b4b4d36476d6f0a'
+ },
+ 'ftn': {
+ 'url': 'https://registrationcenter-download.intel.com/akdlm/irc_nas/17508/l_fortran-compiler_p_2021.1.2.62_offline.sh',
+ 'sha256': '29345145268d08a59fa7eb6e58c7522768466dd98f6d9754540d1a0803596829'
+ }
+ }
+]
+
@IntelOneApiPackage.update_description
class IntelOneapiCompilers(IntelOneApiPackage):
@@ -25,125 +105,15 @@ class IntelOneapiCompilers(IntelOneApiPackage):
depends_on('patchelf', type='build')
if platform.system() == 'Linux':
- version('2022.1.0',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18717/l_dpcpp-cpp-compiler_p_2022.1.0.137_offline.sh',
- sha256='1027819581ba820470f351abfc2b2658ff2684ed8da9ed0e722a45774a2541d6',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18703/l_fortran-compiler_p_2022.1.0.134_offline.sh',
- sha256='583082abe54a657eb933ea4ba3e988eef892985316be13f3e23e18a3c9515020',
- expand=False,
- placement='fortran-installer',
- when='@2022.1.0')
- version('2022.0.2',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18478/l_dpcpp-cpp-compiler_p_2022.0.2.84_offline.sh',
- sha256='ade5bbd203e7226ca096d7bf758dce07857252ec54e83908cac3849e6897b8f3',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18481/l_fortran-compiler_p_2022.0.2.83_offline.sh',
- sha256='78532b4118fc3d7afd44e679fc8e7aed1e84efec0d892908d9368e0c7c6b190c',
- expand=False,
- placement='fortran-installer',
- when='@2022.0.2')
- version('2022.0.1',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18435/l_dpcpp-cpp-compiler_p_2022.0.1.71_offline.sh',
- sha256='c7cddc64c3040eece2dcaf48926ba197bb27e5a46588b1d7b3beddcdc379926a',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18436/l_fortran-compiler_p_2022.0.1.70_offline.sh',
- sha256='2cb28a04f93554bfeffd6cad8bd0e7082735f33d73430655dea86df8933f50d1',
- expand=False,
- placement='fortran-installer',
- when='@2022.0.1')
- version('2021.4.0',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18209/l_dpcpp-cpp-compiler_p_2021.4.0.3201_offline.sh',
- sha256='9206bff1c2fdeb1ca0d5f79def90dcf3e6c7d5711b9b5adecd96a2ba06503828',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/18210/l_fortran-compiler_p_2021.4.0.3224_offline.sh',
- sha256='de2fcf40e296c2e882e1ddf2c45bb8d25aecfbeff2f75fcd7494068d621eb7e0',
- expand=False,
- placement='fortran-installer',
- when='@2021.4.0')
- version('2021.3.0',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/17928/l_dpcpp-cpp-compiler_p_2021.3.0.3168_offline.sh',
- sha256='f848d81b7cabc76c2841c9757abb2290921efd7b82491d830605f5785600e7a1',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/17959/l_fortran-compiler_p_2021.3.0.3168_offline.sh',
- sha256='c4553f7e707be8e8e196f625e4e7fbc8eff5474f64ab85fc7146b5ed53ebc87c',
- expand=False,
- placement='fortran-installer',
- when='@2021.3.0')
- version('2021.2.0',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/17749/l_dpcpp-cpp-compiler_p_2021.2.0.118_offline.sh',
- sha256='5d01cbff1a574c3775510cd97ffddd27fdf56d06a6b0c89a826fb23da4336d59',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/17756/l_fortran-compiler_p_2021.2.0.136_offline.sh',
- sha256='a62e04a80f6d2f05e67cd5acb03fa58857ee22c6bd581ec0651c0ccd5bdec5a1',
- expand=False,
- placement='fortran-installer',
- when='@2021.2.0')
- version('2021.1.2',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/17513/l_dpcpp-cpp-compiler_p_2021.1.2.63_offline.sh',
- sha256='68d6cb638091990e578e358131c859f3bbbbfbf975c581fd0b4b4d36476d6f0a',
- expand=False)
- resource(name='fortran-installer',
- url='https://registrationcenter-download.intel.com/akdlm/irc_nas/17508/l_fortran-compiler_p_2021.1.2.62_offline.sh',
- sha256='29345145268d08a59fa7eb6e58c7522768466dd98f6d9754540d1a0803596829',
- expand=False,
- placement='fortran-installer',
- when='@2021.1.2')
+ for v in linux_versions:
+ version(v['version'], expand=False, **v['cpp'])
+ resource(name='fortran-installer', placement='fortran-installer',
+ when='@{0}'.format(v['version']), expand=False, **v['ftn'])
@property
def component_dir(self):
return 'compiler'
- def _ld_library_path(self):
- dirs = ['lib',
- join_path('lib', 'x64'),
- join_path('lib', 'emu'),
- join_path('lib', 'oclfpga', 'host', 'linux64', 'lib'),
- join_path('lib', 'oclfpga', 'linux64', 'lib'),
- join_path('compiler', 'lib', 'intel64_lin'),
- join_path('compiler', 'lib')]
- for dir in dirs:
- yield join_path(self.component_path, 'linux', dir)
-
- def install(self, spec, prefix):
- # install cpp
- # Copy instead of install to speed up debugging
- # subprocess.run(f'cp -r /opt/intel/oneapi/compiler {prefix}', shell=True)
- super(IntelOneapiCompilers, self).install(spec, prefix)
-
- # install fortran
- super(IntelOneapiCompilers, self).install(
- spec,
- prefix,
- installer_path=glob.glob(join_path('fortran-installer', '*'))[0])
-
- # Some installers have a bug and do not return an error code when failing
- if not path.isfile(join_path(self.component_path, 'linux',
- 'bin', 'intel64', 'ifort')):
- raise RuntimeError('install failed')
-
- # set rpath so 'spack compiler add' can check version strings
- # without setting LD_LIBRARY_PATH
- rpath = ':'.join(self._ld_library_path())
- patch_dirs = [join_path('lib'),
- join_path('compiler', 'lib', 'intel64_lin'),
- join_path('compiler', 'lib', 'intel64'),
- 'bin']
- for pd in patch_dirs:
- patchables = glob.glob(join_path(self.component_path, 'linux', pd, '*'))
- patchables.append(join_path(self.component_path,
- 'linux', 'lib', 'icx-lto.so'))
- for file in patchables:
- # Try to patch all files, patchelf will do nothing if
- # file should not be patched
- subprocess.call(['patchelf', '--set-rpath', rpath, file])
-
def setup_run_environment(self, env):
"""Adds environment variables to the generated module file.
@@ -157,8 +127,72 @@ class IntelOneapiCompilers(IntelOneApiPackage):
"""
super(IntelOneapiCompilers, self).setup_run_environment(env)
- bin = join_path(self.component_path, 'linux', 'bin')
- env.set('CC', join_path(bin, 'icx'))
- env.set('CXX', join_path(bin, 'icpx'))
- env.set('F77', join_path(bin, 'ifx'))
- env.set('FC', join_path(bin, 'ifx'))
+ env.set('CC', self.component_prefix.bin.icx)
+ env.set('CXX', self.component_prefix.bin.icpx)
+ env.set('F77', self.component_prefix.bin.ifx)
+ env.set('FC', self.component_prefix.bin.ifx)
+
+ def install(self, spec, prefix):
+ # Copy instead of install to speed up debugging
+ # install_tree('/opt/intel/oneapi/compiler', self.prefix)
+
+ # install cpp
+ super(IntelOneapiCompilers, self).install(spec, prefix)
+
+ # install fortran
+ self.install_component(find('fortran-installer', '*')[0])
+
+ # Some installers have a bug and do not return an error code when failing
+ if not is_exe(self.component_prefix.linux.bin.intel64.ifort):
+ raise RuntimeError('install failed')
+
+ @run_after('install')
+ def inject_rpaths(self):
+ # Sets rpath so the compilers can work without setting LD_LIBRARY_PATH.
+ patchelf = which('patchelf')
+ patchelf.add_default_arg('--set-rpath')
+ patchelf.add_default_arg(':'.join(self._ld_library_path()))
+ for pd in ['bin', 'lib', join_path('compiler', 'lib', 'intel64_lin')]:
+ for file in find(self.component_prefix.linux.join(pd), '*',
+ recursive=False):
+ # Try to patch all files, patchelf will do nothing and fail if file
+ # should not be patched
+ patchelf(file, fail_on_error=False)
+
+ @run_after('install')
+ def extend_config_flags(self):
+ # Extends compiler config files to inject additional compiler flags.
+
+ # Inject rpath flags to the runtime libraries.
+ # TODO: this uses a static string for the rpath argument, but should actually
+ # make sure that it matches the cc_rpath_arg etc. arguments defined in
+ # spack.compilers.oneapi and spack.compilers.intel (for now, these are
+ # inherited from spack.compilers.compiler.Compiler): these can theoretically be
+ # different for different compiler versions and for different languages (C,
+ # C++, and Fortran), but in practice are not.
+ # TODO: it is unclear whether we should really use all elements of
+ # _ld_library_path because it looks like the only rpath that needs to be
+ # injected is self.component_prefix.linux.compiler.lib.intel64_lin.
+ flags = ' '.join(['-Wl,-rpath,{0}'.format(d) for d in self._ld_library_path()])
+ for cmp in ['icx', 'icpx', 'ifx',
+ join_path('intel64', 'icc'),
+ join_path('intel64', 'icpc'),
+ join_path('intel64', 'ifort')]:
+ cfg_file = self.component_prefix.linux.bin.join(cmp + '.cfg')
+ with open(cfg_file, 'w') as f:
+ f.write(flags)
+ set_install_permissions(cfg_file)
+
+ def _ld_library_path(self):
+ # Returns an iterable of directories that might contain shared runtime libraries
+ # of the compilers themselves and the executables they produce.
+ for d in ['lib',
+ join_path('lib', 'x64'),
+ join_path('lib', 'emu'),
+ join_path('lib', 'oclfpga', 'host', 'linux64', 'lib'),
+ join_path('lib', 'oclfpga', 'linux64', 'lib'),
+ join_path('compiler', 'lib', 'intel64_lin'),
+ join_path('compiler', 'lib')]:
+ p = join_path(self.component_prefix.linux, d)
+ if find(p, '*.' + dso_suffix, recursive=False):
+ yield p