blob: 4d43a2d779ff5ed886866d0b255c7bde69ff3eed [file] [log] [blame]
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/zbi/zbi.gni")
import("//build/zbi/zbi_input.gni")
import("//zircon/public/gn/test/zbi_test_success.gni")
# Composes a test zbi out of Zircon artifacts.
#
# The $target_name target is a group() that holds the metadata and is what
# should be used in deps. The actual zbi() target is defined as
# "$target_name.zbi" so that e.g. get_target_outputs(":$target_name.zbi")
# can be used.
#
# Parameters
#
# args (optional)
# [list of strings] Command line arguments for the resulting zbi.
#
# device_types
# [list of strings] Devices the test should run on.
# Allowable values are those among the entries in
# //build/testing/platforms.gni; others will be ignored.
# Defaults to [ "QEMU" ].
#
# replace, complete, compress
# See //build/zbi/zbi.gni.
template("zbi_test") {
main_target = target_name
input_target = "${target_name}_input"
zbi_target = "${target_name}.zbi"
not_needed(invoker,
[
"qemu_kernel",
"timeout",
])
group_deps = []
entries = []
if (defined(invoker.args)) {
entries += invoker.args
}
entries += [ "userboot.shutdown" ]
zbi_input(input_target) {
forward_variables_from(invoker, [ "deps" ])
testonly = true
type = "cmdline"
args = []
foreach(entry, entries) {
args += [ "--entry=$entry" ]
}
}
zbi(zbi_target) {
testonly = true
data_deps = []
forward_variables_from(invoker,
[
"cpu",
"compress",
"data_deps",
"output_dir",
"output_extension",
"output_name",
"visibility",
])
if (defined(visibility)) {
visibility += [ ":$main_target" ]
}
if (!defined(output_name)) {
output_name = main_target
}
deps = invoker.deps + [ ":$input_target" ]
if (defined(invoker.qemu_kernel)) {
data_deps += [ invoker.qemu_kernel ]
}
_output_dir = target_out_dir
if (defined(output_dir)) {
_output_dir = output_dir
}
_output_extension = "zbi"
if (defined(output_extension)) {
_output_extension = output_extension
}
_output_file = "${_output_dir}/${output_name}"
if (_output_extension != "") {
_output_file += ".${_output_extension}"
}
metadata = {
images = [
{
label = get_label_info(":$zbi_target", "label_with_toolchain")
name = output_name
path = rebase_path(_output_file, root_build_dir)
type = "zbi"
cpu = current_cpu
compressed =
!defined(invoker.compressed) ||
(invoker.compressed != false && invoker.compressed != "none")
if (defined(testonly) && testonly) {
testonly = true
}
forward_variables_from(invoker, [ "tags" ])
},
]
# Provide metadata so that a zbi() target can also act as if it were a
# zbi_input() with type == "zbi" and $sources of this target's $outputs.
# Thus a zbi() target can be a dependency of another zbi() target to
# combine them without requiring an intervening zbi_input() target.
migrated_zbi_barrier = []
migrated_zbi_input_args = [
"--type=container",
rebase_path(_output_file, root_build_dir),
]
}
}
group_deps += [ ":$zbi_target" ]
output_file = target_name
if (defined(invoker.output_name)) {
output_file = invoker.output_name
}
if (defined(invoker.output_extension)) {
if (invoker.output_extension != "") {
output_file += ".${invoker.output_extension}"
}
} else {
output_file += ".zbi"
}
if (defined(invoker.output_dir)) {
output_file = "${invoker.output_dir}/$output_file"
} else {
output_file = "$target_out_dir/$output_file"
}
if (defined(invoker.device_types)) {
_device_types = invoker.device_types
} else {
_device_types = [
"AEMU",
"QEMU",
]
}
group(main_target) {
forward_variables_from(invoker,
[
"assert_no_deps",
"visibility",
])
testonly = true
public_deps = group_deps
metadata = {
migrated_zbi_barrier = []
zbi_tests = [
{
cpu = current_cpu
disabled = defined(invoker.tags) && invoker.tags + [ "disabled" ] -
[ "disabled" ] != invoker.tags
name = main_target
label = get_label_info(":$target_name", "label_with_toolchain")
path = rebase_path(output_file, root_build_dir)
bootserver_netboot = [ "--boot" ]
success_string = zbi_test_success_string
device_types = _device_types
if (defined(invoker.qemu_kernel)) {
assert(device_types == [ "QEMU" ],
"`qemu_kernel` tests can only run on QEMU")
qemu_kernel_label =
get_label_info(invoker.qemu_kernel, "label_with_toolchain")
}
forward_variables_from(invoker, [ "timeout" ])
},
]
}
}
}