blob: cf01659fdd5dfc3a1061a7ff9f0c15fcf56e11eb [file] [log] [blame]
# 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",
])
}
}