summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-08-19 08:20:57 +0200
committerGitHub <noreply@github.com>2020-08-19 08:20:57 +0200
commitbef560636df1a029ea398b657ae9f0d6e1f82ca4 (patch)
treed5aa9b6eb662d5c0722843f216ee8478d8e4b9c3 /var
parent71748a3b7a86b5de9141194f660d8d2c55f64f46 (diff)
downloadspack-bef560636df1a029ea398b657ae9f0d6e1f82ca4.tar.gz
spack-bef560636df1a029ea398b657ae9f0d6e1f82ca4.tar.bz2
spack-bef560636df1a029ea398b657ae9f0d6e1f82ca4.tar.xz
spack-bef560636df1a029ea398b657ae9f0d6e1f82ca4.zip
intel: added external detection capabilities (#17991)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/intel/package.py58
1 files changed, 57 insertions, 1 deletions
diff --git a/var/spack/repos/builtin/packages/intel/package.py b/var/spack/repos/builtin/packages/intel/package.py
index 7d9363e98f..ee7249fb06 100644
--- a/var/spack/repos/builtin/packages/intel/package.py
+++ b/var/spack/repos/builtin/packages/intel/package.py
@@ -2,8 +2,9 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import re
-from spack import *
+import llnl.util.tty as tty
class Intel(IntelPackage):
@@ -65,5 +66,60 @@ class Intel(IntelPackage):
conflicts('auto_dispatch=SSE3', 'platform=darwin target=x86_64:',
msg='SSE3 is not supported on MacOS x86_64')
+ executables = ['^icc$', '^icpc$', '^ifort$']
+
+ @classmethod
+ def determine_version(cls, exe):
+ version_regex = re.compile(r'\((?:IFORT|ICC)\) ([^ ]+)')
+ try:
+ output = spack.compiler.get_compiler_version_output(
+ exe, '--version'
+ )
+ match = version_regex.search(output)
+ if match:
+ return match.group(1)
+ except spack.util.executable.ProcessError:
+ pass
+ except Exception as e:
+ tty.debug(str(e))
+
+ return None
+
+ @classmethod
+ def determine_variants(cls, exes, version_str):
+ compilers = {}
+ for exe in exes:
+ if 'icc' in exe:
+ compilers['c'] = exe
+ if 'icpc' in exe:
+ compilers['cxx'] = exe
+ if 'ifort' in exe:
+ compilers['fortran'] = exe
+ return '', {'compilers': compilers}
+
+ @property
+ def cc(self):
+ msg = "cannot retrieve C compiler [spec is not concrete]"
+ assert self.spec.concrete, msg
+ if self.spec.external:
+ return self.spec.extra_attributes['compilers'].get('c', None)
+ return str(self.spec.prefix.bin.intel64.icc)
+
+ @property
+ def cxx(self):
+ msg = "cannot retrieve C++ compiler [spec is not concrete]"
+ assert self.spec.concrete, msg
+ if self.spec.external:
+ return self.spec.extra_attributes['compilers'].get('cxx', None)
+ return str(self.spec.prefix.bin.intel64.icpc)
+
+ @property
+ def fortran(self):
+ msg = "cannot retrieve Fortran compiler [spec is not concrete]"
+ assert self.spec.concrete, msg
+ if self.spec.external:
+ return self.spec.extra_attributes['compilers'].get('fortran', None)
+ return str(self.spec.prefix.bin.intel64.ifort)
+
# Since the current package is a subset of 'intel-parallel-studio',
# all remaining Spack actions are handled in the package class.