After clang update, we got the below error: external/libcxx/libcxx_test_template.cpp clang++: error: unknown argument: '-fcoroutines-ts' Since this option has been removed in clang, remove test for it. Bug: 280683256 Test: build with clang-r498229 Change-Id: Icecd7152f8d724d680bf17e3f920f15365b285a6
134 lines
5.3 KiB
Python
134 lines
5.3 KiB
Python
import os
|
|
import re
|
|
import sys
|
|
|
|
import libcxx.test.config
|
|
import libcxx.android.compiler
|
|
import libcxx.android.test.format
|
|
|
|
|
|
class Configuration(libcxx.test.config.Configuration):
|
|
def __init__(self, lit_config, config):
|
|
super(Configuration, self).__init__(lit_config, config)
|
|
self.exec_env = {}
|
|
|
|
@property
|
|
def is_host(self):
|
|
"""Returns True if configured to run host tests."""
|
|
return self.lit_config.params.get('android_mode') == 'host'
|
|
|
|
def configure(self):
|
|
self.configure_src_root()
|
|
self.configure_obj_root()
|
|
|
|
self.configure_cxx()
|
|
self.configure_triple()
|
|
self.configure_features()
|
|
if self.is_host:
|
|
self.configure_filesystem_host()
|
|
else:
|
|
self.configure_filesystem_device()
|
|
|
|
def print_config_info(self):
|
|
self.lit_config.note(
|
|
'Using compiler: {}'.format(self.cxx.path))
|
|
self.lit_config.note(
|
|
'Using compile template: {}'.format(self.cxx.cxx_template))
|
|
self.lit_config.note(
|
|
'Using link template: {}'.format(self.cxx.link_template))
|
|
self.lit_config.note('Using available_features: %s' %
|
|
list(self.config.available_features))
|
|
|
|
def configure_obj_root(self):
|
|
if self.is_host:
|
|
self.libcxx_obj_root = os.getenv('ANDROID_HOST_OUT')
|
|
else:
|
|
self.libcxx_obj_root = os.getenv('ANDROID_PRODUCT_OUT')
|
|
|
|
def configure_cxx(self):
|
|
cxx_under_test = self.lit_config.params.get('cxx_under_test')
|
|
cxx_template = self.lit_config.params.get('cxx_template')
|
|
link_template = self.lit_config.params.get('link_template')
|
|
|
|
self.cxx = libcxx.android.compiler.AndroidCXXCompiler(
|
|
cxx_under_test, cxx_template, link_template)
|
|
|
|
def configure_triple(self):
|
|
# The libcxxabi test suite needs this but it doesn't actually
|
|
# use it for anything important.
|
|
self.config.host_triple = ''
|
|
|
|
self.config.target_triple = self.cxx.get_triple()
|
|
|
|
def configure_filesystem_host(self):
|
|
# TODO: We shouldn't be writing to the source directory for the host.
|
|
static_env = os.path.join(self.libcxx_src_root, 'test', 'std',
|
|
'input.output', 'filesystems', 'Inputs',
|
|
'static_test_env')
|
|
static_env = os.path.realpath(static_env)
|
|
assert os.path.isdir(static_env)
|
|
self.cxx.extra_cflags.append(
|
|
'-DLIBCXX_FILESYSTEM_STATIC_TEST_ROOT="{}"'.format(static_env))
|
|
|
|
dynamic_env = os.path.join(self.config.test_exec_root, 'filesystem',
|
|
'Output', 'dynamic_env')
|
|
dynamic_env = os.path.realpath(dynamic_env)
|
|
if not os.path.isdir(dynamic_env):
|
|
os.makedirs(dynamic_env)
|
|
self.cxx.extra_cflags.append(
|
|
'-DLIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT="{}"'.format(dynamic_env))
|
|
self.exec_env['LIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT'] = dynamic_env
|
|
|
|
dynamic_helper = os.path.join(self.libcxx_src_root, 'test', 'support',
|
|
'filesystem_dynamic_test_helper.py')
|
|
assert os.path.isfile(dynamic_helper)
|
|
self.cxx.extra_cflags.append(
|
|
'-DLIBCXX_FILESYSTEM_DYNAMIC_TEST_HELPER="{} {}"'.format(
|
|
sys.executable, dynamic_helper))
|
|
|
|
def configure_filesystem_device(self):
|
|
static_env = '/data/local/tmp/libcxx/static_test_env'
|
|
self.cxx.extra_cflags.append(
|
|
'-DLIBCXX_FILESYSTEM_STATIC_TEST_ROOT="{}"'.format(static_env))
|
|
|
|
dynamic_env = '/data/local/tmp/libcxx/dynamic_test_env'
|
|
self.cxx.extra_cflags.append(
|
|
'-DLIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT="{}"'.format(dynamic_env))
|
|
self.exec_env['LIBCXX_FILESYSTEM_DYNAMIC_TEST_ROOT'] = dynamic_env
|
|
|
|
dynamic_helper = ('/data/nativetest/filesystem_dynamic_test_helper.py/'
|
|
'filesystem_dynamic_test_helper.py')
|
|
self.cxx.extra_cflags.append(
|
|
'-DLIBCXX_FILESYSTEM_DYNAMIC_TEST_HELPER="{}"'.format(
|
|
dynamic_helper))
|
|
|
|
def configure_features(self):
|
|
self.config.available_features.add('long_tests')
|
|
self.config.available_features.add('c++experimental')
|
|
self.config.available_features.add('c++fs')
|
|
self.config.available_features.add('c++filesystem')
|
|
std_pattern = re.compile(r'-std=(c\+\+\d[0-9x-z])')
|
|
match = std_pattern.search(self.cxx.cxx_template)
|
|
if match:
|
|
self.config.available_features.add(match.group(1))
|
|
|
|
def get_test_format(self):
|
|
mode = self.lit_config.params.get('android_mode', 'device')
|
|
if mode == 'device':
|
|
return libcxx.android.test.format.TestFormat(
|
|
self.cxx,
|
|
self.libcxx_src_root,
|
|
self.libcxx_obj_root,
|
|
getattr(self.config, 'device_dir', '/data/local/tmp/'),
|
|
getattr(self.config, 'timeout', '60'),
|
|
self.exec_env)
|
|
elif mode == 'host':
|
|
return libcxx.android.test.format.HostTestFormat(
|
|
self.cxx,
|
|
self.libcxx_src_root,
|
|
self.libcxx_obj_root,
|
|
getattr(self.config, 'timeout', '60'),
|
|
self.exec_env)
|
|
else:
|
|
raise RuntimeError('Invalid android_mode: {}'.format(mode))
|