blob: 9d2e7d5d3d8825aad6f1cfb783a9066568d76a93 [file] [edit]
# Copyright 2023 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT
import("//build/testing/boot_tests/kernel_zbi_test.gni")
import("//build/testing/boot_tests/zbi_test.gni")
import("//build/zbi/kernel_cmdline.gni")
# Define a ZBI input to set the kernel.shell.script option.
#
# This is a shorthand to define a kernel_cmdline() target whose contents
# are "kernel.shell.script=..." with the "..." being constructed from
# the parameter.
#
# Parameters
#
# * script
# - Required: This is a list of strings, each a kernel shell command line.
# These are combined by putting `;` between the lines and replacing each
# space with `+` as expected for the `kernel.shell.script` boot option.
# - Type: list(string)
#
# * deps, visibility, testonly
# - Optional: See kernel_cmdline().
#
template("kernel_shell_script") {
kernel_cmdline(target_name) {
forward_variables_from(invoker,
[
"deps",
"visibility",
"testonly",
])
args = [ "kernel.shell.script=" +
string_replace(string_join(";", invoker.script), " ", "+") ]
}
}
# Define a kernel_zbi_test() that runs a kernel shell script.
#
# This is a simple wrapper around kernel_zbi_test() and kernel_shell_script().
# It defines a $target_name zbi_test() target that uses a $target_name.script
# kernel_shell_script() target.
#
# Parameters
#
# * script
# - Required: This is a list of strings, each a kernel shell command line.
# These are combined by putting `;` between the lines and replacing each
# space with `+` as expected for the `kernel.shell.script` boot option.
# - Type: list(string or scope)
# When an element is a scope it is:
# * cuckoo
# - Required: If false, $lines are omitted from the cuckoo version.
# If true, $lines are omitted from the non-cuckoo version.
# - Type: bool
# * lines
# - Required: Lines added into the script at this point.
# - Type: list(string)
#
# * kernel_images
# - Optional: See kernel_zbi_test(). This just has a different default,
# since $extra_kernel_test_images shouldn't all be assumed to enable tests.
# - Type: list(string)
# - Default: `[default_kernel_test_image]`
#
# Other parameters are as for kernel_zbi_test().
#
template("kernel_shell_script_test") {
main_target = target_name
non_cuckoo_script = []
cuckoo_script = []
foreach(line, invoker.script) {
if (line == "$line") {
non_cuckoo_script += [ line ]
cuckoo_script += [ line ]
} else if (line.cuckoo) {
cuckoo_script += line.lines
} else {
non_cuckoo_script += line.lines
}
}
scripts = [
{
name = "$main_target.script"
script = non_cuckoo_script
},
]
non_cuckoo_script_deps = [ ":$main_target.script" ]
if (cuckoo_script == non_cuckoo_script) {
cuckoo_script_deps = non_cuckoo_script_deps
} else {
cuckoo_script_deps = [ ":$main_target.cuckoo.script" ]
scripts += [
{
name = "$main_target.cuckoo.script"
script = cuckoo_script
},
]
}
foreach(script, scripts) {
kernel_shell_script(script.name) {
testonly = true
forward_variables_from(invoker, [ "visibility" ])
if (defined(visibility)) {
visibility += [ ":*" ]
}
script = script.script
}
}
kernel_zbi_test(main_target) {
kernel_images = [ default_kernel_test_image ]
cuckoo_deps = []
non_cuckoo_deps = []
forward_variables_from(invoker, "*", [ "script" ])
cuckoo_deps += cuckoo_script_deps
non_cuckoo_deps += non_cuckoo_script_deps
}
}