[tests] Add support for a link_flags lit parameter.

- This is useful for testing with custom ABI libraries.
 - Patch by Michael van der Westhuizen.

llvm-svn: 174997
This commit is contained in:
Daniel Dunbar 2013-02-12 19:28:51 +00:00
parent 396088cdb5
commit 62b943935d
1 changed files with 31 additions and 15 deletions

View File

@ -1,4 +1,4 @@
# -*- Python -*-
# -*- Python -*- vim: set syntax=python tabstop=4 expandtab cc=80:
# Configuration file for the 'lit' test runner.
@ -10,6 +10,7 @@ import signal
import subprocess
import errno
import time
import shlex
# FIXME: For now, this is cribbed from lit.TestRunner, to avoid introducing a
# dependency there. What we more ideally would like to do is lift the "xfail"
@ -96,8 +97,8 @@ class LibcxxTestFormat(lit.formats.FileBasedTest):
#
# FIXME: For now, this is cribbed from lit.TestRunner, to avoid
# introducing a dependency there. What we more ideally would like to do
# is lift the "xfail" and "requires" handling to be a core lit framework
# feature.
# is lift the "xfail" and "requires" handling to be a core lit
# framework feature.
missing_required_features = [f for f in requires
if f not in test.config.available_features]
if missing_required_features:
@ -178,10 +179,10 @@ class LibcxxTestFormat(lit.formats.FileBasedTest):
cmd = lit_config.valgrindArgs + cmd
out, err, exitCode = self.execute_command(cmd, source_dir)
if exitCode != 0:
report = """Compiled With: %s\n""" % ' '.join(["'%s'" % a
for a in compile_cmd])
report += """Command: %s\n""" % ' '.join(["'%s'" % a
for a in cmd])
report = """Compiled With: %s\n""" % \
' '.join(["'%s'" % a for a in compile_cmd])
report += """Command: %s\n""" % \
' '.join(["'%s'" % a for a in cmd])
report += """Exit Code: %d\n""" % exitCode
if out:
report += """Standard Output:\n--\n%s--""" % out
@ -258,32 +259,47 @@ else:
use_system_lib = False
lit.note("inferred use_system_lib as: %r" % (use_system_lib,))
link_flags = []
link_flags_str = lit.params.get('link_flags', None)
if link_flags_str is None:
link_flags_str = getattr(config, 'link_flags', None)
if link_flags_str is None:
if sys.platform == 'darwin':
link_flags += ['-lSystem']
elif sys.platform == 'linux2':
link_flags += ['-lsupc++', '-lgcc_eh', '-lc', '-lm', '-lpthread',
'-lrt', '-lgcc_s']
else:
lit.fatal("unrecognized system")
lit.note("inferred link_flags as: %r" % (link_flags,))
if not link_flags_str is None:
link_flags += shlex.split(link_flags_str)
# Configure extra compiler flags.
include_paths = ['-I' + libcxx_src_root + '/include', '-I' + libcxx_src_root + '/test/support']
include_paths = ['-I' + libcxx_src_root + '/include',
'-I' + libcxx_src_root + '/test/support']
library_paths = ['-L' + libcxx_obj_root + '/lib']
compile_flags = []
if cxx_has_stdcxx0x_flag:
compile_flags += ['-std=c++0x']
# Configure extra libraries.
# Configure extra linker parameters.
exec_env = {}
libraries = []
if sys.platform == 'darwin':
libraries += ['-lSystem']
if not use_system_lib:
exec_env['DYLD_LIBRARY_PATH'] = os.path.join(libcxx_obj_root, 'lib')
elif sys.platform == 'linux2':
libraries += ['-lsupc++', '-lgcc_eh', '-lc', '-lm', '-lpthread', '-lrt', '-lgcc_s']
if not use_system_lib:
libraries += ['-Wl,-R', libcxx_obj_root + '/lib']
compile_flags += ['-D__STDC_FORMAT_MACROS', '-D__STDC_LIMIT_MACROS', '-D__STDC_CONSTANT_MACROS']
link_flags += ['-Wl,-R', libcxx_obj_root + '/lib']
compile_flags += ['-D__STDC_FORMAT_MACROS', '-D__STDC_LIMIT_MACROS',
'-D__STDC_CONSTANT_MACROS']
else:
lit.fatal("unrecognized system")
config.test_format = LibcxxTestFormat(
cxx_under_test,
cpp_flags = ['-nostdinc++'] + compile_flags + include_paths,
ld_flags = ['-nodefaultlibs'] + library_paths + ['-lc++'] + libraries,
ld_flags = ['-nodefaultlibs'] + library_paths + ['-lc++'] + link_flags,
exec_env = exec_env)
# Get or infer the target triple.