Basic support for IBM XL compilers
This commit is contained in:
parent
42c88aa3ca
commit
3cfbc0520a
8
lib/spack/env/cc
vendored
8
lib/spack/env/cc
vendored
@ -86,19 +86,19 @@ done
|
|||||||
#
|
#
|
||||||
command=$(basename "$0")
|
command=$(basename "$0")
|
||||||
case "$command" in
|
case "$command" in
|
||||||
cc|gcc|c89|c99|clang)
|
cc|gcc|c89|c99|clang|xlc)
|
||||||
command="$SPACK_CC"
|
command="$SPACK_CC"
|
||||||
language="C"
|
language="C"
|
||||||
;;
|
;;
|
||||||
c++|CC|g++|clang++)
|
c++|CC|g++|clang++|xlC)
|
||||||
command="$SPACK_CXX"
|
command="$SPACK_CXX"
|
||||||
language="C++"
|
language="C++"
|
||||||
;;
|
;;
|
||||||
f77)
|
f77|xlf)
|
||||||
command="$SPACK_F77"
|
command="$SPACK_F77"
|
||||||
language="Fortran 77"
|
language="Fortran 77"
|
||||||
;;
|
;;
|
||||||
fc|f90|f95)
|
fc|f90|f95|xlf90)
|
||||||
command="$SPACK_FC"
|
command="$SPACK_FC"
|
||||||
language="Fortran 90"
|
language="Fortran 90"
|
||||||
;;
|
;;
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
_imported_compilers_module = 'spack.compilers'
|
_imported_compilers_module = 'spack.compilers'
|
||||||
_required_instance_vars = ['cc', 'cxx', 'f77', 'fc']
|
_required_instance_vars = ['cc', 'cxx', 'f77', 'fc']
|
||||||
|
|
||||||
_default_order = ['gcc', 'intel', 'pgi', 'clang']
|
_default_order = ['gcc', 'intel', 'pgi', 'clang', 'xlc']
|
||||||
|
|
||||||
def _auto_compiler_spec(function):
|
def _auto_compiler_spec(function):
|
||||||
def converter(cspec_like):
|
def converter(cspec_like):
|
||||||
|
97
lib/spack/spack/compilers/xl.py
Normal file
97
lib/spack/spack/compilers/xl.py
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Written by François Bissey, francois.bissey@canterbury.ac.nz, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://scalability-llnl.github.io/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License (as published by
|
||||||
|
# the Free Software Foundation) version 2.1 dated February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
||||||
|
from spack.compiler import *
|
||||||
|
|
||||||
|
class Xl(Compiler):
|
||||||
|
# Subclasses use possible names of C compiler
|
||||||
|
cc_names = ['xlc','xlc_r']
|
||||||
|
|
||||||
|
# Subclasses use possible names of C++ compiler
|
||||||
|
cxx_names = ['xlC','xlC_r','xlc++','xlc++_r']
|
||||||
|
|
||||||
|
# Subclasses use possible names of Fortran 77 compiler
|
||||||
|
f77_names = ['xlf','xlf_r']
|
||||||
|
|
||||||
|
# Subclasses use possible names of Fortran 90 compiler
|
||||||
|
fc_names = ['xlf90','xlf90_r','xlf95','xlf95_r','xlf2003','xlf2003_r','xlf2008','xlf2008_r']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx11_flag(self):
|
||||||
|
if self.version < ver('13.1'):
|
||||||
|
tty.die("Only xlC 13.1 and above have some c++11 support.")
|
||||||
|
else:
|
||||||
|
return "-qlanglvl=extended0x"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def default_version(self, comp):
|
||||||
|
"""The '-qversion' is the standard option fo XL compilers.
|
||||||
|
Output looks like this::
|
||||||
|
|
||||||
|
IBM XL C/C++ for Linux, V11.1 (5724-X14)
|
||||||
|
Version: 11.01.0000.0000
|
||||||
|
|
||||||
|
or::
|
||||||
|
|
||||||
|
IBM XL Fortran for Linux, V13.1 (5724-X16)
|
||||||
|
Version: 13.01.0000.0000
|
||||||
|
|
||||||
|
or::
|
||||||
|
|
||||||
|
IBM XL C/C++ for AIX, V11.1 (5724-X13)
|
||||||
|
Version: 11.01.0000.0009
|
||||||
|
|
||||||
|
or::
|
||||||
|
|
||||||
|
IBM XL C/C++ Advanced Edition for Blue Gene/P, V9.0
|
||||||
|
Version: 09.00.0000.0017
|
||||||
|
"""
|
||||||
|
|
||||||
|
return get_compiler_version(
|
||||||
|
comp, '-qversion',r'([0-9]?[0-9]\.[0-9])')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def fc_version(cls, fc):
|
||||||
|
"""The fortran and C/C++ versions of the XL compiler are always two units apart.
|
||||||
|
By this we mean that the fortran release that goes with XL C/C++ 11.1 is 13.1.
|
||||||
|
Having such a difference in version number is confusing spack quite a lot.
|
||||||
|
Most notably if you keep the versions as is the default xl compiler will only
|
||||||
|
have fortran and no C/C++.
|
||||||
|
So we associate the Fortran compiler with the version associated to the C/C++
|
||||||
|
compiler.
|
||||||
|
One last stumble. Version numbers over 10 have at least a .1 those under 10
|
||||||
|
a .0. There is no xlf 9.x or under currently available. BG/P and BG/L can
|
||||||
|
such a compiler mix and possibly older version of AIX and linux on power.
|
||||||
|
"""
|
||||||
|
fver = get_compiler_version(fc, '-qversion',r'([0-9]?[0-9]\.[0-9])')
|
||||||
|
cver = float(fver) - 2
|
||||||
|
if cver < 10 :
|
||||||
|
cver = cver - 0.1
|
||||||
|
return str(cver)
|
||||||
|
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def f77_version(cls, f77):
|
||||||
|
return cls.fc_version(f77)
|
Loading…
Reference in New Issue
Block a user