251 lines
8.6 KiB
Plaintext
251 lines
8.6 KiB
Plaintext
|
|
# Copyright 2018 The Chromium Authors
|
||
|
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
|
# found in the LICENSE file.
|
||
|
|
|
||
|
|
import("//build/config/chromecast_build.gni")
|
||
|
|
import("//build/config/fuchsia/config.gni")
|
||
|
|
import("//build/config/fuchsia/fuchsia_package_metadata.gni")
|
||
|
|
import("//build/config/gclient_args.gni")
|
||
|
|
import("//build/config/sysroot.gni")
|
||
|
|
import("//build/util/generate_wrapper.gni")
|
||
|
|
|
||
|
|
assert(is_fuchsia)
|
||
|
|
|
||
|
|
declare_args() {
|
||
|
|
# Sets the Fuchsia Amber repository which will be used by default by the
|
||
|
|
# generated installation scripts. If not specified, then no default directory
|
||
|
|
# will be used.
|
||
|
|
default_fuchsia_out_dir = ""
|
||
|
|
|
||
|
|
# Sets the Fuchsia device node name which will be used by default by the
|
||
|
|
# generated runner scripts. If not specficed, then no default node name will
|
||
|
|
# be used.
|
||
|
|
default_fuchsia_device_node_name = ""
|
||
|
|
|
||
|
|
# CPU architecture of the host used to run the tests.
|
||
|
|
test_host_cpu = host_cpu
|
||
|
|
|
||
|
|
# Sets whether emulators need to be included in the test isolates
|
||
|
|
test_isolate_uses_emulator = true
|
||
|
|
|
||
|
|
# A list of additional Fuchsia boot images to include in the test isolates.
|
||
|
|
fuchsia_additional_boot_images = []
|
||
|
|
|
||
|
|
# This variable controls the browser included in the Telemetry based test
|
||
|
|
# targets.
|
||
|
|
fuchsia_browser_type = "web_engine_shell"
|
||
|
|
}
|
||
|
|
|
||
|
|
# Generates a wrapper script under root_build_dir/bin that performs an
|
||
|
|
# operation, such as deployment or execution, using a package and its
|
||
|
|
# dependencies.
|
||
|
|
#
|
||
|
|
# Parameters:
|
||
|
|
# output_name_format: The format string for the generated script's filename.
|
||
|
|
# The placeholder string %package% will be substituted
|
||
|
|
# with |package| (or |package_name|, if set).
|
||
|
|
# Examples: "run_%package%", "install_%package%"
|
||
|
|
# package: The package() target to run.
|
||
|
|
# package_name: Specifies the name of the generated package, if its
|
||
|
|
# filename is different than the |package| target name. This value must
|
||
|
|
# match package_name in the |package| target.
|
||
|
|
# package_deps: An array of [package, package_name] array pairs
|
||
|
|
# which specify additional dependency packages to be installed
|
||
|
|
# prior to execution.
|
||
|
|
# executable: The underlying script to be called by the script.
|
||
|
|
# executable_args: The list of arguments to pass to |executable|.
|
||
|
|
# Runtime commandline arguments can be passed to
|
||
|
|
# |executable| using the placeholder %args%.
|
||
|
|
#
|
||
|
|
# In addition, the script is passed the following
|
||
|
|
# executable_args:
|
||
|
|
# --package - the path to a .FAR package to install.
|
||
|
|
# --package_name - the name of the package to use as an
|
||
|
|
# entry point.
|
||
|
|
# include_fuchsia_out_dir: If true, adds |default_fuchsia_out_dir|
|
||
|
|
# to executable_args (when set in GN args).
|
||
|
|
template("fuchsia_run_script_with_packages") {
|
||
|
|
if (defined(invoker.package_name)) {
|
||
|
|
_pkg_shortname = invoker.package_name
|
||
|
|
} else {
|
||
|
|
_pkg_shortname = get_label_info(invoker.package, "name")
|
||
|
|
}
|
||
|
|
|
||
|
|
_generated_script_path =
|
||
|
|
"$root_build_dir/bin/" +
|
||
|
|
string_replace(invoker.output_name_format, "%package%", _pkg_shortname)
|
||
|
|
|
||
|
|
generate_wrapper(target_name) {
|
||
|
|
forward_variables_from(invoker,
|
||
|
|
TESTONLY_AND_VISIBILITY + [
|
||
|
|
"executable",
|
||
|
|
"executable_args",
|
||
|
|
"data",
|
||
|
|
"include_fuchsia_out_dir",
|
||
|
|
"target",
|
||
|
|
])
|
||
|
|
|
||
|
|
wrapper_script = _generated_script_path
|
||
|
|
deps = [ invoker.package ]
|
||
|
|
|
||
|
|
if (!defined(data_deps)) {
|
||
|
|
data_deps = []
|
||
|
|
}
|
||
|
|
data_deps += [ "//build/config/fuchsia:deployment_resources" ]
|
||
|
|
|
||
|
|
_combined_package_list = [ invoker.package ]
|
||
|
|
|
||
|
|
if (defined(invoker.package_deps)) {
|
||
|
|
foreach(package_dep, invoker.package_deps) {
|
||
|
|
_combined_package_list += [ package_dep[0] ]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
foreach(package_dep, _combined_package_list) {
|
||
|
|
data_deps += [
|
||
|
|
package_dep,
|
||
|
|
package_dep + "__archive-manifest",
|
||
|
|
package_dep + "__archive-metadata",
|
||
|
|
]
|
||
|
|
}
|
||
|
|
|
||
|
|
if (defined(invoker.data_deps)) {
|
||
|
|
data_deps += invoker.data_deps
|
||
|
|
}
|
||
|
|
|
||
|
|
# Compute the list of full paths to package files, including dependencies.
|
||
|
|
if (defined(invoker.package_deps)) {
|
||
|
|
foreach(package_dep, invoker.package_deps) {
|
||
|
|
package_dep_target = package_dep[0]
|
||
|
|
deps += [ package_dep_target ]
|
||
|
|
data_deps += [ package_dep_target ]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Include package information inside the wrapper script.
|
||
|
|
if (!defined(executable_args)) {
|
||
|
|
executable_args = []
|
||
|
|
}
|
||
|
|
|
||
|
|
if (defined(include_fuchsia_out_dir) && include_fuchsia_out_dir &&
|
||
|
|
default_fuchsia_out_dir != "") {
|
||
|
|
executable_args += [
|
||
|
|
"--fuchsia-out-dir",
|
||
|
|
default_fuchsia_out_dir,
|
||
|
|
]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Create a wrapper script rather than using a group() in order to ensure
|
||
|
|
# "ninja $target_name" always works.
|
||
|
|
if (defined(invoker.executable_wrapper)) {
|
||
|
|
generate_wrapper(invoker.executable_wrapper) {
|
||
|
|
forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
|
||
|
|
executable = _generated_script_path
|
||
|
|
wrapper_script = "$root_build_dir/${invoker.executable_wrapper}"
|
||
|
|
deps = [ ":${invoker._run_target}" ]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Generates a script which deploys a package to the TUF repo of a Fuchsia
|
||
|
|
# build output directory.
|
||
|
|
template("fuchsia_package_installer") {
|
||
|
|
if (defined(invoker.package_name)) {
|
||
|
|
pkg_shortname = invoker.package_name
|
||
|
|
} else {
|
||
|
|
pkg_shortname = get_label_info(invoker.package, "name")
|
||
|
|
}
|
||
|
|
fuchsia_package_metadata(pkg_shortname) {
|
||
|
|
forward_variables_from(invoker,
|
||
|
|
TESTONLY_AND_VISIBILITY + [
|
||
|
|
"package",
|
||
|
|
"package_deps",
|
||
|
|
])
|
||
|
|
}
|
||
|
|
fuchsia_run_script_with_packages(target_name) {
|
||
|
|
forward_variables_from(invoker,
|
||
|
|
"*",
|
||
|
|
TESTONLY_AND_VISIBILITY + [ "executable_args" ])
|
||
|
|
forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
|
||
|
|
executable = rebase_path("//build/fuchsia/test/deploy_to_fuchsia.py")
|
||
|
|
executable_args = [
|
||
|
|
"--out-dir",
|
||
|
|
"@WrappedPath(.)",
|
||
|
|
pkg_shortname,
|
||
|
|
]
|
||
|
|
output_name_format = "deploy_%package%"
|
||
|
|
include_fuchsia_out_dir = true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Generates scripts for installing and running test packages.
|
||
|
|
# See fuchsia_run_script_with_packages() for the full list of parameters.
|
||
|
|
template("fuchsia_test_runner") {
|
||
|
|
_run_target = "${target_name}__runner"
|
||
|
|
_install_target = "${target_name}__installer"
|
||
|
|
|
||
|
|
fuchsia_run_script_with_packages(_run_target) {
|
||
|
|
forward_variables_from(invoker,
|
||
|
|
TESTONLY_AND_VISIBILITY + [
|
||
|
|
"data",
|
||
|
|
"data_deps",
|
||
|
|
"package",
|
||
|
|
"package_name",
|
||
|
|
"package_deps",
|
||
|
|
])
|
||
|
|
|
||
|
|
_test_runner_py = "//build/fuchsia/test/run_test.py"
|
||
|
|
|
||
|
|
executable = rebase_path(_test_runner_py)
|
||
|
|
|
||
|
|
if (defined(invoker.is_test_exe) && invoker.is_test_exe) {
|
||
|
|
data += [ "//.vpython3" ]
|
||
|
|
}
|
||
|
|
output_name_format = "run_%package%"
|
||
|
|
executable_wrapper = invoker.target_name
|
||
|
|
|
||
|
|
# Populate the arguments used by the test runner, defined at build-time.
|
||
|
|
executable_args = [
|
||
|
|
"--out-dir",
|
||
|
|
"@WrappedPath(.)",
|
||
|
|
]
|
||
|
|
|
||
|
|
executable_args += [ package_name ]
|
||
|
|
|
||
|
|
if (defined(invoker.use_test_server) && invoker.use_test_server) {
|
||
|
|
executable_args += [ "--enable-test-server" ]
|
||
|
|
}
|
||
|
|
|
||
|
|
if (default_fuchsia_device_node_name != "") {
|
||
|
|
executable_args += [
|
||
|
|
"--target-id",
|
||
|
|
default_fuchsia_device_node_name,
|
||
|
|
]
|
||
|
|
}
|
||
|
|
|
||
|
|
# Declare the files that are needed for test execution on LUCI swarming
|
||
|
|
# test clients, both directly (via data) or indirectly (via data_deps).
|
||
|
|
if (!defined(data)) {
|
||
|
|
data = []
|
||
|
|
}
|
||
|
|
data += [
|
||
|
|
_test_runner_py,
|
||
|
|
"$root_gen_dir/package_metadata/${invoker.package_name}.meta",
|
||
|
|
]
|
||
|
|
|
||
|
|
# TODO(crbug.com/1256870): Remove this once all out-of-tree references
|
||
|
|
# to "package_name_override" are migrated to "package_name".
|
||
|
|
if (defined(invoker.package_name_override)) {
|
||
|
|
package_name = invoker.package_name_override
|
||
|
|
}
|
||
|
|
}
|
||
|
|
fuchsia_package_installer(_install_target) {
|
||
|
|
forward_variables_from(invoker,
|
||
|
|
TESTONLY_AND_VISIBILITY + [
|
||
|
|
"package",
|
||
|
|
"package_name",
|
||
|
|
"package_deps",
|
||
|
|
])
|
||
|
|
}
|
||
|
|
}
|