summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinath Vadlamani <srinath.vadlamani@gmail.com>2019-01-08 17:31:25 -0700
committerGreg Becker <becker33@llnl.gov>2019-01-08 16:31:25 -0800
commit4fdd3b6794bee53a3a629615b801f8ee939fe533 (patch)
treec445c63ce62fdf76e5ddf93c2b476791b46e8097
parentee64db4764f8c1eb50d5929e94375d630d82aa43 (diff)
downloadspack-4fdd3b6794bee53a3a629615b801f8ee939fe533.tar.gz
spack-4fdd3b6794bee53a3a629615b801f8ee939fe533.tar.bz2
spack-4fdd3b6794bee53a3a629615b801f8ee939fe533.tar.xz
spack-4fdd3b6794bee53a3a629615b801f8ee939fe533.zip
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
l---------lib/spack/env/arm/armclang1
l---------lib/spack/env/arm/armclang++1
l---------lib/spack/env/arm/armflang1
-rwxr-xr-xlib/spack/env/cc6
-rw-r--r--lib/spack/spack/compilers/arm.py39
-rw-r--r--var/spack/repos/builtin/packages/m4/package.py8
6 files changed, 29 insertions, 27 deletions
diff --git a/lib/spack/env/arm/armclang b/lib/spack/env/arm/armclang
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/arm/armclang
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/arm/armclang++ b/lib/spack/env/arm/armclang++
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/arm/armclang++
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/arm/armflang b/lib/spack/env/arm/armflang
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/arm/armflang
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/cc b/lib/spack/env/cc
index 5e68702c5f..70f429055d 100755
--- a/lib/spack/env/cc
+++ b/lib/spack/env/cc
@@ -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"
diff --git a/lib/spack/spack/compilers/arm.py b/lib/spack/spack/compilers/arm.py
index 33801a1ccc..b2c4871236 100644
--- a/lib/spack/spack/compilers/arm.py
+++ b/lib/spack/spack/compilers/arm.py
@@ -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 @@ class Arm(Compiler):
@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]
+ """The ``--version`` option seems to be the most consistent one
+ for arm compilers. Output looks like this::
+
+ $ 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):
diff --git a/var/spack/repos/builtin/packages/m4/package.py b/var/spack/repos/builtin/packages/m4/package.py
index b14956e3ae..ad180b15a8 100644
--- a/var/spack/repos/builtin/packages/m4/package.py
+++ b/var/spack/repos/builtin/packages/m4/package.py
@@ -34,9 +34,11 @@ class M4(AutotoolsPackage):
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')