arm: added new package (#18019)
The package is at the moment not installable, just detectable.
This commit is contained in:
parent
045afc8788
commit
076ea2fe4c
1 changed files with 86 additions and 0 deletions
86
var/spack/repos/builtin/packages/arm/package.py
Normal file
86
var/spack/repos/builtin/packages/arm/package.py
Normal file
|
@ -0,0 +1,86 @@
|
|||
# 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 re
|
||||
|
||||
import llnl.util.tty as tty
|
||||
import spack.compiler
|
||||
import spack.util.executable
|
||||
|
||||
|
||||
class Arm(Package):
|
||||
"""Arm Compiler combines the optimized tools and libraries from Arm
|
||||
with a modern LLVM-based compiler framework.
|
||||
"""
|
||||
|
||||
homepage = "https://developer.arm.com/tools-and-software/server-and-hpc/arm-allinea-studio"
|
||||
url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-allinea-studio/20-2-1/Ubuntu16.04/arm-compiler-for-linux_20.2.1_Ubuntu-16.04_aarch64.tar"
|
||||
|
||||
# FIXME: The version is checksummed for Ubuntu 16.04, but this is not
|
||||
# FIXME: important at the moment since the package is only meant to
|
||||
# FIXME: provide detection
|
||||
version('20.2.1', sha256='dc3f945b05b867809d9b507cb8ebba9cf72a6818d349207dbe1392c13dc0ad79')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
raise InstallError(
|
||||
'No install method available yet, only system detection.'
|
||||
)
|
||||
|
||||
executables = [r'armclang', r'armclang\+\+', r'armflang']
|
||||
|
||||
@classmethod
|
||||
def determine_version(cls, exe):
|
||||
regex_str = r'Arm C\/C\+\+\/Fortran Compiler version ([\d\.]+) '\
|
||||
r'\(build number (\d+)\) '
|
||||
version_regex = re.compile(regex_str)
|
||||
try:
|
||||
output = spack.compiler.get_compiler_version_output(
|
||||
exe, '--version'
|
||||
)
|
||||
match = version_regex.search(output)
|
||||
if match:
|
||||
if match.group(1).count('.') == 1:
|
||||
return match.group(1) + ".0." + match.group(2)
|
||||
return match.group(1) + "." + match.group(2)
|
||||
except spack.util.executable.ProcessError:
|
||||
pass
|
||||
except Exception as e:
|
||||
tty.debug(e)
|
||||
|
||||
@classmethod
|
||||
def determine_variants(cls, exes, version_str):
|
||||
compilers = {}
|
||||
for exe in exes:
|
||||
if 'armclang' in exe:
|
||||
compilers['c'] = exe
|
||||
if 'armclang++' in exe:
|
||||
compilers['cxx'] = exe
|
||||
if 'armflang' 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.armclang)
|
||||
|
||||
@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 os.path.join(self.spec.prefix.bin, 'armclang++')
|
||||
|
||||
@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.armflang)
|
Loading…
Reference in a new issue