_run never gets called any more, so the LD_LIBRARY_PATH wasn't being set any more. The tests were still passing locally for me because the tests were happily using the libc++.so from my system rather than the one we build. Wasn't obvious from the buildbot because the display for the test results is absolutely terrible and they got lost in the noise of the known failures. Change-Id: Ib2df196ec6748718930e70887b7d0099884d792c
92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
import os
|
|
|
|
import lit.util # pylint: disable=import-error
|
|
|
|
from libcxx.android.executors import AdbExecutor
|
|
from libcxx.test.executor import LocalExecutor, TimeoutExecutor
|
|
import libcxx.test.format
|
|
import libcxx.android.adb as adb
|
|
|
|
|
|
class HostTestFormat(libcxx.test.format.LibcxxTestFormat):
|
|
# pylint: disable=super-init-not-called
|
|
def __init__(self, cxx, libcxx_src_root, libcxx_obj_root, timeout,
|
|
exec_env=None):
|
|
self.cxx = cxx
|
|
self.libcxx_src_root = libcxx_src_root
|
|
self.libcxx_obj_root = libcxx_obj_root
|
|
self.use_verify_for_fail = False
|
|
self.executor = TimeoutExecutor(timeout, LocalExecutor())
|
|
|
|
# We need to use LD_LIBRARY_PATH because the build system's rpath is
|
|
# relative, which won't work since we're running from /tmp. We can
|
|
# either scan `cxx_under_test`/`link_template` to determine whether
|
|
# we're 32-bit or 64-bit, scan testconfig.mk, or just add both
|
|
# directories and let the linker sort it out. I'm choosing the lazy
|
|
# option.
|
|
outdir = os.getenv('ANDROID_HOST_OUT')
|
|
libpath = os.pathsep.join([
|
|
os.path.join(outdir, 'lib'),
|
|
os.path.join(outdir, 'lib64'),
|
|
])
|
|
default_env = {'LD_LIBRARY_PATH': libpath}
|
|
self.exec_env = default_env if exec_env is None else exec_env
|
|
|
|
|
|
class TestFormat(HostTestFormat):
|
|
def __init__(self, cxx, libcxx_src_root, libcxx_obj_root, device_dir,
|
|
timeout, exec_env=None):
|
|
HostTestFormat.__init__(
|
|
self,
|
|
cxx,
|
|
libcxx_src_root,
|
|
libcxx_obj_root,
|
|
timeout,
|
|
exec_env)
|
|
self.device_dir = device_dir
|
|
self.executor = TimeoutExecutor(timeout, AdbExecutor())
|
|
|
|
def _working_directory(self, file_name):
|
|
return os.path.join(self.device_dir, file_name)
|
|
|
|
def _wd_path(self, test_name, file_name):
|
|
return os.path.join(self._working_directory(test_name), file_name)
|
|
|
|
def _build(self, exec_path, source_path, compile_only=False,
|
|
use_verify=False):
|
|
# pylint: disable=protected-access
|
|
cmd, report, rc = libcxx.test.format.LibcxxTestFormat._build(
|
|
self, exec_path, source_path, compile_only, use_verify)
|
|
if rc != 0:
|
|
return cmd, report, rc
|
|
|
|
try:
|
|
exec_file = os.path.basename(exec_path)
|
|
|
|
adb.mkdir(self._working_directory(exec_file))
|
|
adb.push(exec_path, self._wd_path(exec_file, exec_file))
|
|
|
|
# Push any .dat files in the same directory as the source to the
|
|
# working directory.
|
|
src_dir = os.path.dirname(source_path)
|
|
data_files = [f for f in os.listdir(src_dir) if f.endswith('.dat')]
|
|
for data_file in data_files:
|
|
df_path = os.path.join(src_dir, data_file)
|
|
df_dev_path = self._wd_path(exec_file, data_file)
|
|
adb.push(df_path, df_dev_path)
|
|
return cmd, report, rc
|
|
except adb.AdbError as ex:
|
|
return self._make_report(ex.cmd, ex.out, ex.err, ex.exit_code)
|
|
|
|
def _clean(self, exec_path):
|
|
exec_file = os.path.basename(exec_path)
|
|
cmd = ['adb', 'shell', 'rm', '-rf', self._working_directory(exec_file)]
|
|
lit.util.executeCommand(cmd)
|
|
try:
|
|
os.remove(exec_path)
|
|
except OSError:
|
|
pass
|
|
|
|
def _run(self, exec_path, _, in_dir=None):
|
|
raise NotImplementedError()
|