From bef560636df1a029ea398b657ae9f0d6e1f82ca4 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 19 Aug 2020 08:20:57 +0200 Subject: intel: added external detection capabilities (#17991) --- var/spack/repos/builtin/packages/intel/package.py | 58 ++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'var') 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. -- cgit v1.2.3-70-g09d2