[libcxx] r223593 - [libcxx] Add logic to probe compiler in tests.
Eric Fiselier
eric at efcs.ca
Sat Dec 6 13:13:15 PST 2014
Author: ericwf
Date: Sat Dec 6 15:13:15 2014
New Revision: 223593
URL: http://llvm.org/viewvc/llvm-project?rev=223593&view=rev
Log:
[libcxx] Add logic to probe compiler in tests.
Summary:
This patch probes the cxx compiler used during testing by getting it to dump its predefined macros. Based on the value of these macros the compiler name and compiler name + version are added to the available features.
There are three compiler names:
- `clang`
- `apple-clang`
- `gcc`.
The available features added are equivalent to:
- `'%s' % compiler_name`
- `'%s-%s.%s' % compiler_name, major_version, minor_version`
This information can be used to XFAIL tests on different compilers / versions.
Reviewers: mclow.lists, danalbert, jroelofs
Reviewed By: jroelofs
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D6399
Modified:
libcxx/trunk/test/lit.cfg
Modified: libcxx/trunk/test/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.cfg?rev=223593&r1=223592&r2=223593&view=diff
==============================================================================
--- libcxx/trunk/test/lit.cfg (original)
+++ libcxx/trunk/test/lit.cfg Sat Dec 6 15:13:15 2014
@@ -228,6 +228,7 @@ class Configuration(object):
def configure(self):
self.configure_cxx()
+ self.probe_cxx()
self.configure_triple()
self.configure_src_root()
self.configure_obj_root()
@@ -271,6 +272,44 @@ class Configuration(object):
self.lit_config.fatal('must specify user parameter cxx_under_test '
'(e.g., --param=cxx_under_test=clang++)')
+ def probe_cxx(self):
+ # Dump all of the predefined macros
+ dump_macro_cmd = [self.cxx, '-dM', '-E', '-x', 'c++', '/dev/null']
+ out, err, rc = lit.util.executeCommand(dump_macro_cmd)
+ if rc != 0:
+ self.lit_config.warning('Failed to dump macros for compiler: %s' %
+ self.cxx)
+ return
+ # Create a dict containing all the predefined macros.
+ macros = {}
+ lines = [l.strip() for l in out.split('\n') if l.strip()]
+ for l in lines:
+ assert l.startswith('#define ')
+ l = l[len('#define '):]
+ macro, _, value = l.partition(' ')
+ macros[macro] = value
+ # Add compiler information to available features.
+ compiler_name = None
+ major_ver = minor_ver = None
+ if '__clang__' in macros.keys():
+ compiler_name = 'clang'
+ # Treat apple's llvm fork differently.
+ if '__apple_build_type__' in macros.keys():
+ compiler_name = 'apple-clang'
+ major_ver = macros['__clang_major__']
+ minor_ver = macros['__clang_minor__']
+ elif '__GNUC__' in macros.keys():
+ compiler_name = 'gcc'
+ major_ver = macros['__GNUC__']
+ minor_ver = macros['__GNUC_MINOR__']
+ else:
+ self.lit_config.warning('Failed to detect compiler for cxx: %s' %
+ self.cxx)
+ if compiler_name is not None:
+ self.config.available_features.add(compiler_name)
+ self.config.available_features.add('%s-%s.%s' % (
+ compiler_name, major_ver, minor_ver))
+
def configure_src_root(self):
self.src_root = self.get_lit_conf(
'libcxx_src_root', os.path.dirname(self.config.test_source_root))
More information about the cfe-commits
mailing list