compilers: add arm compiler detection to Spack
- added arm.py with support for detecting `armclang` and `armflang` Co-authored-by: Srinath Vadlamani <srinath.vadlamani@arm.com>
This commit is contained in:
parent
36ddcc2e97
commit
9f5865a68d
1 changed files with 73 additions and 0 deletions
73
lib/spack/spack/compilers/arm.py
Normal file
73
lib/spack/spack/compilers/arm.py
Normal file
|
@ -0,0 +1,73 @@
|
|||
# Copyright 2013-2018 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 re
|
||||
|
||||
from spack.compiler import Compiler, _version_cache
|
||||
from spack.util.executable import Executable
|
||||
|
||||
|
||||
class Arm(Compiler):
|
||||
# Subclasses use possible names of C compiler
|
||||
cc_names = ['armclang']
|
||||
|
||||
# Subclasses use possible names of C++ compiler
|
||||
cxx_names = ['armclang++']
|
||||
|
||||
# Subclasses use possible names of Fortran 77 compiler
|
||||
f77_names = ['armflang']
|
||||
|
||||
# Subclasses use possible names of Fortran 90 compiler
|
||||
fc_names = ['armflang']
|
||||
|
||||
# Named wrapper links within lib/spack/env
|
||||
link_paths = {'cc': 'clang/clang',
|
||||
'cxx': 'clang/clang++',
|
||||
'f77': 'clang/flang',
|
||||
'fc': 'clang/flang'}
|
||||
|
||||
@property
|
||||
def openmp_flag(self):
|
||||
return "-fopenmp"
|
||||
|
||||
@property
|
||||
def cxx11_flag(self):
|
||||
return "-std=c++11"
|
||||
|
||||
@property
|
||||
def cxx14_flag(self):
|
||||
return "-std=c++14"
|
||||
|
||||
@property
|
||||
def cxx17_flag(self):
|
||||
return "-std=c++1z"
|
||||
|
||||
@property
|
||||
def pic_flag(self):
|
||||
return "-fPIC"
|
||||
|
||||
@classmethod
|
||||
def default_version(cls, comp):
|
||||
if comp not in _version_cache:
|
||||
compiler = Executable(comp)
|
||||
output = compiler('--version', output=str, error=str)
|
||||
|
||||
ver = 'unknown'
|
||||
match = re.search(r'Arm C/C++/Fortran Compiler version ([^ )]+)',
|
||||
output)
|
||||
if match:
|
||||
ver = match.group(1)
|
||||
|
||||
_version_cache[comp] = ver
|
||||
|
||||
return _version_cache[comp]
|
||||
|
||||
@classmethod
|
||||
def fc_version(cls, fc):
|
||||
return cls.default_version(fc)
|
||||
|
||||
@classmethod
|
||||
def f77_version(cls, f77):
|
||||
return cls.fc_version(f77)
|
Loading…
Reference in a new issue