| # 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/zbi_test.gni") |
| import("//build/zbi/kernel_cmdline.gni") |
| import("//zircon/kernel/kernel_package.gni") |
| import("//zircon/kernel/phys/kernel_elf_binary.gni") |
| import("//zircon/kernel/phys/phys_executable.gni") |
| |
| # Defines a physload module and a ZBI test that loads it. This provides a |
| # streamlined way of running boot test logic in the phys environment, allowing |
| # for physload to take care of the basic set-up and execution. See |
| # //zircon/kernel/phys/physload.h for more information on the physload |
| # machinery. As a test variation, sources specified in instances of this |
| # template are expected to implement PhysLoadTestMain() rather than |
| # PhysLoadModuleMain(): see |
| # //zircon/kernel/phys/test/physload-test-main.h for more information. |
| # |
| # Subtargets |
| # |
| # * $target_name.binary |
| # The underlying kernel_elf_binary() target defining the physload module. |
| # |
| # Parameters |
| # |
| # * deps |
| # - Optional: The usual meaning, though this list need not include |
| # //zircon/kernel/phys:physload.module nor |
| # //zircon/kernel/phys/test:physload-test-main, as these |
| # dependencies are added automatically. |
| # - Type: list of labels |
| # |
| # * data_deps |
| # - Optional: data dependencies of the underlying binary target. Any |
| # resources() specified here are ultimately aggregated in the associated |
| # kernel package. |
| # - Type: list of labels |
| # |
| # For all other parameters see kernel_elf_binary(). |
| template("physload_binary_test") { |
| binary_target = "$target_name.binary" |
| package_target = "_physload_binary_test.$target_name.kernel_package" |
| cmdline_target = "_physload_binary_test.$target_name.cmdline" |
| main_target = target_name |
| |
| if (toolchain_environment == "kernel.phys") { |
| kernel_elf_binary(binary_target) { |
| output_name = main_target |
| visibility = [ ":*" ] |
| testonly = true |
| |
| # Data deps are aggregated separately by the kernel package. |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "data_deps", |
| "testonly", |
| "visibility", |
| ]) |
| deps += [ "//zircon/kernel/phys/test:physload-test-main" ] |
| } |
| |
| kernel_package(package_target) { |
| visibility = [ ":*" ] |
| testonly = true |
| prefix = "" |
| deps = [ ":$binary_target" ] |
| if (defined(invoker.data_deps)) { |
| deps += invoker.data_deps |
| } |
| } |
| } else { |
| group(binary_target) { |
| testonly = true |
| forward_variables_from(invoker, [ "visibility" ]) |
| if (!defined(visibility)) { |
| visibility = [] |
| } |
| visibility += [ ":*" ] |
| deps = [ ":$binary_target($phys_toolchain)" ] |
| } |
| |
| not_needed(invoker, "*") |
| } |
| |
| kernel_cmdline(cmdline_target) { |
| visibility = [ ":*" ] |
| testonly = true |
| args = [ "kernel.phys.next=$main_target" ] |
| } |
| |
| zbi_test(main_target) { |
| forward_variables_from(invoker, [ "visibility" ]) |
| if (!defined(visibility)) { |
| visibility = [] |
| } |
| visibility += [ ":*" ] |
| deps = [ |
| ":$cmdline_target", |
| ":$package_target($phys_toolchain)", |
| ] |
| } |
| } |