Reland 2 of GN: Make breakpad_unittests & sandbox_linux_unittests use test()

This simplifies build rules for native tests, and allows us to get rid
of ${target}_deps targets (once recipes are updated).

This change fixes the generated wrapper scripts, which didn't work.

TBR=jbudorick
BUG=589318

Review URL: https://codereview.chromium.org/1854233002

Cr-Original-Commit-Position: refs/heads/master@{#385084}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 62ab0028a0165eecd60568783531d1ad3d031a26
This commit is contained in:
agrieve 2016-04-04 19:03:45 -07:00 коммит произвёл Commit bot
Родитель 724a307f40
Коммит 1590c4ca9e
6 изменённых файлов: 76 добавлений и 69 удалений

Просмотреть файл

@ -27,6 +27,7 @@
{
'variables': {
'include_main_binary%': 1,
'extra_files%': [],
},
'conditions': [
['android_must_copy_system_libraries == 1', {
@ -55,6 +56,14 @@
},
],
}],
['extra_files!=[]', {
'copies': [
{
'destination': '<(output_dir)',
'files': [ '<@(extra_files)' ],
}
],
}],
['include_main_binary==1', {
'copies': [
{

Просмотреть файл

@ -144,9 +144,18 @@ class GtestTestInstance(test_instance.TestInstance):
self._shard_timeout = args.shard_timeout
self._skip_clear_data = args.skip_clear_data
self._suite = args.suite_name[0]
self._exe_dist_dir = None
self._exe_path = os.path.join(constants.GetOutDirectory(),
self._suite)
# GYP:
if args.executable_dist_dir:
self._exe_dist_dir = os.path.abspath(args.executable_dist_dir)
else:
# TODO(agrieve): Remove auto-detection once recipes pass flag explicitly.
exe_dist_dir = os.path.join(constants.GetOutDirectory(),
'%s__dist' % self._suite)
if os.path.exists(exe_dist_dir):
self._exe_dist_dir = exe_dist_dir
incremental_part = ''
if args.test_apk_incremental_install_script:
@ -171,9 +180,7 @@ class GtestTestInstance(test_instance.TestInstance):
self._extras[EXTRA_SHARD_NANO_TIMEOUT] = int(1e9 * self._shard_timeout)
self._shard_timeout = 900
if not os.path.exists(self._exe_path):
self._exe_path = None
if not self._apk_helper and not self._exe_path:
if not self._apk_helper and not self._exe_dist_dir:
error_func('Could not find apk or executable for %s' % self._suite)
self._data_deps = []
@ -234,8 +241,8 @@ class GtestTestInstance(test_instance.TestInstance):
return self._app_data_files
@property
def exe(self):
return self._exe_path
def exe_dist_dir(self):
return self._exe_dist_dir
@property
def extras(self):

Просмотреть файл

@ -161,26 +161,18 @@ class _ApkDelegate(object):
class _ExeDelegate(object):
def __init__(self, tr, exe):
self._exe_host_path = exe
self._exe_file_name = os.path.split(exe)[-1]
self._exe_device_path = '%s/%s' % (
constants.TEST_EXECUTABLE_DIR, self._exe_file_name)
deps_host_path = self._exe_host_path + '_deps'
if os.path.exists(deps_host_path):
self._deps_host_path = deps_host_path
self._deps_device_path = self._exe_device_path + '_deps'
else:
self._deps_host_path = None
def __init__(self, tr, dist_dir):
self._host_dist_dir = dist_dir
self._exe_file_name = os.path.basename(dist_dir)[:-len('__dist')]
self._device_dist_dir = posixpath.join(
constants.TEST_EXECUTABLE_DIR, os.path.basename(dist_dir))
self._test_run = tr
def Install(self, device):
# TODO(jbudorick): Look into merging this with normal data deps pushing if
# executables become supported on nonlocal environments.
host_device_tuples = [(self._exe_host_path, self._exe_device_path)]
if self._deps_host_path:
host_device_tuples.append((self._deps_host_path, self._deps_device_path))
device.PushChangedFiles(host_device_tuples)
device.PushChangedFiles([(self._host_dist_dir, self._device_dist_dir)],
delete_device_stale=True)
def Run(self, test, device, flags=None, **kwargs):
tool = self._test_run.GetTool(device).GetTestWrapper()
@ -188,17 +180,17 @@ class _ExeDelegate(object):
cmd = [tool]
else:
cmd = []
cmd.append(self._exe_device_path)
cmd.append(posixpath.join(self._device_dist_dir, self._exe_file_name))
if test:
cmd.append('--gtest_filter=%s' % ':'.join(test))
if flags:
# TODO(agrieve): This won't work if multiple flags are passed.
cmd.append(flags)
cwd = constants.TEST_EXECUTABLE_DIR
env = {
'LD_LIBRARY_PATH':
'%s/%s_deps' % (constants.TEST_EXECUTABLE_DIR, self._exe_file_name),
'LD_LIBRARY_PATH': self._device_dist_dir
}
try:
gcov_strip_depth = os.environ['NATIVE_COVERAGE_DEPTH_STRIP']
@ -228,8 +220,8 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun):
if self._test_instance.apk:
self._delegate = _ApkDelegate(self._test_instance)
elif self._test_instance.exe:
self._delegate = _ExeDelegate(self, self._test_instance.exe)
elif self._test_instance.exe_dist_dir:
self._delegate = _ExeDelegate(self, self._test_instance.exe_dist_dir)
self._crashes = set()
self._servers = collections.defaultdict(list)

Просмотреть файл

@ -249,6 +249,9 @@ def AddGTestOptions(parser):
group.add_argument('-s', '--suite', dest='suite_name',
nargs='+', metavar='SUITE_NAME', required=True,
help='Executable name of the test suite to run.')
group.add_argument('--executable-dist-dir',
help="Path to executable's dist directory for native"
" (non-apk) tests.")
group.add_argument('--test-apk-incremental-install-script',
help='Path to install script for the test apk.')
group.add_argument('--gtest_also_run_disabled_tests',

Просмотреть файл

@ -2070,22 +2070,32 @@ template("test_runner_script") {
"//build/android:test_runner_py",
]
test_runner_args = [
_test_type,
"--output-directory",
rebase_path(root_build_dir, root_build_dir),
]
# apk_target is not used for native executable tests
# (e.g. breakpad_unittests).
if (defined(invoker.apk_target)) {
assert(!defined(invoker.executable_dist_dir))
deps += [ "${invoker.apk_target}__build_config" ]
_apk_build_config =
get_label_info(invoker.apk_target, "target_gen_dir") + "/" +
get_label_info(invoker.apk_target, "name") + ".build_config"
_rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir)
assert(_rebased_apk_build_config != "") # Mark as used.
} else if (_test_type == "gtest") {
assert(
defined(invoker.executable_dist_dir),
"Must define either apk_target or executable_dist_dir for test_runner_script()")
test_runner_args += [
"--executable-dist-dir",
rebase_path(invoker.executable_dist_dir, root_build_dir),
]
}
test_runner_args = [
_test_type,
"--output-directory",
rebase_path(root_build_dir, root_build_dir),
]
if (_test_type == "gtest") {
assert(defined(invoker.test_suite))
test_runner_args += [

Просмотреть файл

@ -2234,7 +2234,7 @@ template("android_aidl") {
# dist_dir: Directory for the exe and libraries. Everything in this directory
# will be deleted before copying in the exe and libraries.
# binary: Path to (stripped) executable.
# include_main_binary: Whether |binary| should be copied to |dist_dir|.
# extra_files: List of extra files to copy in (optional).
#
# Example
# create_native_executable_dist("foo_dist") {
@ -2243,34 +2243,27 @@ template("android_aidl") {
# deps = [ ":the_thing_that_makes_foo" ]
# }
template("create_native_executable_dist") {
set_sources_assignment_filter([])
forward_variables_from(invoker, [ "testonly" ])
dist_dir = invoker.dist_dir
binary = invoker.binary
template_name = target_name
_libraries_list = "${target_gen_dir}/${target_name}_library_dependencies.list"
libraries_list =
"${target_gen_dir}/${template_name}_library_dependencies.list"
_find_deps_target_name = "${target_name}__find_library_dependencies"
find_deps_target_name = "${template_name}__find_library_dependencies"
copy_target_name = "${template_name}__copy_libraries_and_exe"
action(find_deps_target_name) {
# TODO(agrieve): Extract dependent libs from GN rather than readelf.
action(_find_deps_target_name) {
forward_variables_from(invoker, [ "deps" ])
visibility = [ ":$copy_target_name" ]
script = "//build/android/gyp/write_ordered_libraries.py"
depfile = "$target_gen_dir/$target_name.d"
inputs = [
binary,
invoker.binary,
android_readelf,
]
outputs = [
depfile,
libraries_list,
_libraries_list,
]
rebased_binaries = rebase_path([ binary ], root_build_dir)
rebased_binaries = rebase_path([ invoker.binary ], root_build_dir)
args = [
"--depfile",
rebase_path(depfile, root_build_dir),
@ -2278,47 +2271,40 @@ template("create_native_executable_dist") {
"--libraries-dir",
rebase_path(root_shlib_dir, root_build_dir),
"--output",
rebase_path(libraries_list, root_build_dir),
rebase_path(_libraries_list, root_build_dir),
"--readelf",
rebase_path(android_readelf, root_build_dir),
]
}
copy_ex(copy_target_name) {
visibility = [ ":$template_name" ]
copy_ex(target_name) {
clear_dir = true
inputs = [
libraries_list,
_libraries_list,
invoker.binary,
]
if (defined(invoker.include_main_binary) && invoker.include_main_binary) {
inputs += [ binary ]
}
dest = dist_dir
dest = invoker.dist_dir
rebased_libraries_list = rebase_path(libraries_list, root_build_dir)
args = [ "--files=@FileArg($rebased_libraries_list:lib_paths)" ]
if (defined(invoker.include_main_binary) && invoker.include_main_binary) {
rebased_binaries_list = rebase_path([ binary ], root_build_dir)
args += [ "--files=$rebased_binaries_list" ]
_rebased_libraries_list = rebase_path(_libraries_list, root_build_dir)
_rebased_binaries_list = rebase_path([ invoker.binary ], root_build_dir)
args = [
"--files=@FileArg($_rebased_libraries_list:lib_paths)",
"--files=$_rebased_binaries_list",
]
if (defined(invoker.extra_files)) {
_rebased_extra_files = rebase_path(invoker.extra_files, root_build_dir)
args += [ "--files=$_rebased_extra_files" ]
}
deps = [
":$find_deps_target_name",
":$_find_deps_target_name",
]
if (defined(invoker.deps)) {
deps += invoker.deps
}
}
group(template_name) {
forward_variables_from(invoker, [ "visibility" ])
public_deps = [
":$copy_target_name",
]
}
}
# Compile a protocol buffer to java.