From 045afc878878e0ba5bf5909711948a1a46474e92 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Thu, 17 Dec 2020 10:00:06 +0100 Subject: xlc, xlf: added new packages (#18154) --- var/spack/repos/builtin/packages/xlc/package.py | 81 +++++++++++++++++++++++++ var/spack/repos/builtin/packages/xlf/package.py | 69 +++++++++++++++++++++ 2 files changed, 150 insertions(+) create mode 100644 var/spack/repos/builtin/packages/xlc/package.py create mode 100644 var/spack/repos/builtin/packages/xlf/package.py diff --git a/var/spack/repos/builtin/packages/xlc/package.py b/var/spack/repos/builtin/packages/xlc/package.py new file mode 100644 index 0000000000..561528403a --- /dev/null +++ b/var/spack/repos/builtin/packages/xlc/package.py @@ -0,0 +1,81 @@ +# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) +import collections +import re + +import spack.compiler +import llnl.util.tty as tty + + +class Xlc(Package): + """IBM XL C/C++ is an advanced, high-performance compiler that can be + used for developing complex, computationally intensive programs, including + interlanguage calls with C and Fortran programs. + """ + + homepage = "https://www.ibm.com/support/knowledgecenter/SSXVZZ_16.1.1/com.ibm.compilers.linux.doc/welcome.html" + + variant('r', default=True, description='The _r version of compilers') + + def install(self, spec, prefix): + raise InstallError( + 'XL compilers are not installable yet, but can be ' + 'detected on a system where they are supplied by vendor' + ) + + executables = [r'xlc', r'xlC', r'xlc\+\+'] + + @classmethod + def determine_version(cls, exe): + version_regex = re.compile(r'([0-9]?[0-9]\.[0-9])') + try: + output = spack.compiler.get_compiler_version_output( + exe, '-qversion' + ) + # Exclude spurious Fortran compilers + if 'Fortran' in output: + return None + + 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)) + + @classmethod + def determine_variants(cls, exes, version_str): + variants = collections.defaultdict(dict) + for exe in exes: + # Determine the variant of the spec + variant_str = '+r' if '_r' in exe else '~r' + if 'xlc++' in exe: + variants[variant_str]['cxx'] = exe + continue + + if 'xlc' in exe: + variants[variant_str]['c'] = exe + continue + + results = [] + for variant_str, compilers in variants.items(): + results.append((variant_str, {'compilers': compilers})) + + return results + + @property + def cc(self): + if self.spec.external: + return self.spec.extra_attributes['compilers']['c'] + msg = "cannot retrieve C compiler [spec is not concrete]" + assert self.spec.concrete, msg + + @property + def cxx(self): + if self.spec.external: + return self.spec.extra_attributes['compilers']['cxx'] + msg = "cannot retrieve C compiler [spec is not concrete]" + assert self.spec.concrete, msg diff --git a/var/spack/repos/builtin/packages/xlf/package.py b/var/spack/repos/builtin/packages/xlf/package.py new file mode 100644 index 0000000000..2e37136da2 --- /dev/null +++ b/var/spack/repos/builtin/packages/xlf/package.py @@ -0,0 +1,69 @@ +# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os.path +import collections +import re + +import spack.compiler +import llnl.util.tty as tty + + +class Xlf(Package): + """IBM XL Fortran is an advanced, high-performance compiler that can be + used for developing complex, computationally intensive programs, including + interlanguage calls with C and Fortran programs. + """ + + homepage = "https://www.ibm.com/support/knowledgecenter/SSXVZZ_16.1.1/com.ibm.compilers.linux.doc/welcome.html" + + variant('r', default=True, description='The _r version of compilers') + + def install(self, spec, prefix): + raise InstallError( + 'XL compilers are not installable yet, but can be ' + 'detected on a system where they are supplied by vendor' + ) + + executables = [r'xlf'] + + @classmethod + def determine_version(cls, exe): + version_regex = re.compile(r'([0-9]?[0-9]\.[0-9])') + try: + output = spack.compiler.get_compiler_version_output( + exe, '-qversion' + ) + match = version_regex.search(output) + if match: + return match.group(1) + except spack.util.executable.ProcessError: + pass + except Exception as e: + tty.debug(e) + + @classmethod + def determine_variants(cls, exes, version_str): + variants = collections.defaultdict(dict) + for exe in exes: + if os.path.basename(exe) == 'xlf': + variants['~r']['fortran'] = exe + continue + + if os.path.basename(exe) == 'xlf_r': + variants['+r']['fortran'] = exe + continue + + results = [] + for variant_str, compilers in variants.items(): + results.append((variant_str, {'compilers': compilers})) + + return results + + @property + def fortran(self): + if self.spec.external: + return self.spec.extra_attributes['compilers']['fortran'] + msg = "cannot retrieve C compiler [spec is not concrete]" + assert self.spec.concrete, msg -- cgit v1.2.3-60-g2f50