| # Copyright 2020 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/zircon/zircon_cpu.gni") |
| import("//zircon/kernel/phys/phys_executable.gni") |
| |
| # Build a standalone ZBI kernel in the phys environment. |
| # |
| # This defines one public target that acts as a zbi_input() target. The |
| # target is used like executable(), but deps on this target from other |
| # environments transparently redirect to the phys environment. There |
| # are also implicit deps to supply the ZBI headers and phys entry point |
| # code that calls the C++ `ZbiMain` via the "main.h" API. |
| # |
| # Parameters |
| # |
| # * output_extension |
| # - Optional: See executable(), but defaults to "zbi". |
| # - Type: string |
| # - Default: "zbi" |
| # |
| # See executable() for other parameters. |
| # |
| template("zbi_executable") { |
| phys_executable(target_name) { |
| deps = [] |
| ldflags = [] |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "metadata", |
| "visibility", |
| ]) |
| forward_variables_from(invoker, [ "visibility" ]) |
| |
| # zbi-header.S needs this linker script. Note it must go before the main |
| # phys.ld (at least for BFD ld); phys_executable will append it to ldflags. |
| ldflags += [ "-Wl,-T," + rebase_path("//zircon/kernel/phys/zbi-header.ld", |
| root_build_dir) ] |
| deps += [ "//zircon/kernel/phys:zbi_executable.deps" ] |
| |
| if (!defined(output_dir)) { |
| output_dir = target_out_dir |
| } |
| if (!defined(output_name)) { |
| output_name = target_name |
| } |
| if (!defined(output_extension)) { |
| output_extension = "zbi" |
| } |
| output_file = "$output_dir/$output_name" |
| if (output_extension != "") { |
| output_file += ".$output_extension" |
| } |
| |
| metadata = { |
| zbi_input_args = [] |
| |
| if (defined(invoker.metadata)) { |
| forward_variables_from(invoker.metadata, "*") |
| } |
| |
| # Used by zbi() template. This metadata makes the kernel act as a |
| # zbi_input() target so it can be a dependency of a zbi() target to get |
| # into the image. |
| zbi_input_args += [ |
| "--type=container", |
| rebase_path(output_file, root_build_dir), |
| ] |
| } |
| } |
| } |
| |
| _phys_import = { |
| import("//zircon/kernel/arch/$zircon_cpu/phys/phys.gni") |
| } |
| |
| set_defaults("zbi_executable") { |
| configs = default_executable_configs + _phys_import.phys_zbi_configs |
| } |