Armcompiler (#9840)

* Initial compiler support

* added arm.py

* Changed licence to Arm suggested header

* Changed licence to the same as clang.py
Main author of file is Nick Forrington <Nick.Forrington@arm.com>
Minor changes by Srinath Vadlamani <srinath.vadlamani@arm.com>

* 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>

* Changed to using get get_compiler_version

* linking to general cc for arm compiler

* For arm compiler add CFLAGS to use compiler-rt rtlib.

* Escape for special characters in rexep

* Cleaned up for Flake8 to pass.

* libcompiler-rt should be part of the LDFLAGS not CFLAGS

* fixed m4 when using clang to used LDFLAGS.  Fixed comments for arm.py to display compiler --version output with # NOAQ for flakes pass.

* added arm compilers

* proper linked names
This commit is contained in:
Srinath Vadlamani 2019-01-08 17:31:25 -07:00 committed by Greg Becker
parent ee64db4764
commit 4fdd3b6794
6 changed files with 28 additions and 26 deletions

1
lib/spack/env/arm/armclang vendored Symbolic link
View File

@ -0,0 +1 @@
../cc

1
lib/spack/env/arm/armclang++ vendored Symbolic link
View File

@ -0,0 +1 @@
../cc

1
lib/spack/env/arm/armflang vendored Symbolic link
View File

@ -0,0 +1 @@
../cc

6
lib/spack/env/cc vendored
View File

@ -106,19 +106,19 @@ case "$command" in
cpp)
mode=cpp
;;
cc|c89|c99|gcc|clang|icc|pgcc|xlc|xlc_r)
cc|c89|c99|gcc|clang|armclang|icc|pgcc|xlc|xlc_r)
command="$SPACK_CC"
language="C"
comp="CC"
lang_flags=C
;;
c++|CC|g++|clang++|icpc|pgc++|xlc++|xlc++_r)
c++|CC|g++|clang++|armclang++|icpc|pgc++|xlc++|xlc++_r)
command="$SPACK_CXX"
language="C++"
comp="CXX"
lang_flags=CXX
;;
ftn|f90|fc|f95|gfortran|flang|ifort|pgfortran|xlf90|xlf90_r|nagfor)
ftn|f90|fc|f95|gfortran|flang|armflang|ifort|pgfortran|xlf90|xlf90_r|nagfor)
command="$SPACK_FC"
language="Fortran 90"
comp="FC"

View File

@ -3,10 +3,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import re
from spack.compiler import Compiler, _version_cache
from spack.util.executable import Executable
from spack.compiler import Compiler, get_compiler_version
class Arm(Compiler):
@ -23,10 +20,10 @@ class Arm(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'}
link_paths = {'cc': 'arm/armclang',
'cxx': 'arm/armclang++',
'f77': 'arm/armflang',
'fc': 'arm/armflang'}
@property
def openmp_flag(self):
@ -50,19 +47,19 @@ def pic_flag(self):
@classmethod
def default_version(cls, comp):
if comp not in _version_cache:
compiler = Executable(comp)
output = compiler('--version', output=str, error=str)
"""The ``--version`` option seems to be the most consistent one
for arm compilers. Output looks like this::
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]
$ arm<c/f>lang --version
Arm C/C++/Fortran Compiler version 19.0 (build number 73) (based on LLVM 7.0.2) # NOQA
Target: aarch64--linux-gnu
Thread model: posix
InstalledDir:
/opt/arm/arm-hpc-compiler-19.0_Generic-AArch64_RHEL-7_aarch64-linux/bin # NOQA
"""
return get_compiler_version(
comp, '--version',
r'Arm C\/C\+\+\/Fortran Compiler version ([^ )]+)')
@classmethod
def fc_version(cls, fc):

View File

@ -34,9 +34,11 @@ def configure_args(self):
spec = self.spec
args = ['--enable-c++']
if (spec.satisfies('%clang') or spec.satisfies('%arm')) and not \
spec.satisfies('platform=darwin'):
args.append('CFLAGS=-rtlib=compiler-rt')
if spec.satisfies('%clang') and not spec.satisfies('platform=darwin'):
args.append('LDFLAGS=-rtlib=compiler-rt')
if spec.satisfies('%arm') and not spec.satisfies('platform=darwin'):
args.append('LDFLAGS=-rtlib=compiler-rt')
if spec.satisfies('%intel'):
args.append('CFLAGS=-no-gcc')