| # Copyright 2022 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("kernel_elf_image.gni") |
| |
| # Compile an ELF binary image to be loaded via <phys/elf-image.h>. |
| # |
| # This defines a kernel_elf_image(target_name) main target that wraps an |
| # executable() or similar target called "$target_name.binary". See |
| # kernel_elf_image() for details of how to use this in image construction. |
| # |
| # This can be instantiated in any environment where the underlying binary |
| # target should be compiled, whether user, kernel or kernel.phys. The image |
| # target is then usually embedded in a kernel_package() that itself might be |
| # instantiated in the kernel or kernel.phys environment. |
| # |
| # Parameters |
| # |
| # * target_type |
| # - Optional: Type of target to define. Since we don't support dynamic |
| # symbol tables or TLS in ELF kernels, there isn't really much difference |
| # between compiling as PIE and compiling as PIC or between an executable() |
| # and a loadable_module(). |
| # - Type: string |
| # - Default: "executable" |
| # |
| # * data_deps, has_patches, metadata, output_name, testonly, visibility |
| # - See kernel_elf_image(). |
| # |
| # * output_dir, output_extension |
| # - Not allowed. |
| # |
| # All other parameters are as for executable(). |
| # |
| template("kernel_elf_binary") { |
| image_target = target_name |
| binary_target = "$target_name.binary" |
| |
| if (defined(invoker.target_type)) { |
| binary_target_type = invoker.target_type |
| } else { |
| binary_target_type = "executable" |
| } |
| |
| kernel_elf_image(image_target) { |
| forward_variables_from(invoker, |
| [ |
| "data_deps", |
| "has_patches", |
| "metadata", |
| "output_name", |
| "testonly", |
| "visibility", |
| ]) |
| deps = [ ":$binary_target" ] |
| } |
| |
| target(binary_target_type, binary_target) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "data_deps", |
| "has_patches", |
| "metadata", |
| "output_dir", |
| "output_extension", |
| "output_name", |
| "target_type", |
| "testonly", |
| "visibility", |
| ]) |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "visibility", |
| ]) |
| if (defined(visibility)) { |
| visibility += [ ":$image_target" ] |
| } |
| |
| output_name = image_target |
| output_extension = "" |
| } |
| } |
| |
| set_defaults("kernel_elf_binary") { |
| configs = default_executable_configs |
| } |