# Copyright 2019 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("$zx/public/gn/toolchain/environment.gni")
import("$zx/public/gn/toolchain/environment_redirect.gni")

# Gigaboot gets its own toolchains to build EFI code.
# TODO(mcgrathr): Put efi into standard.gni?  That would require moving
# the referenced configs (efi_config + kernel:standalone) int public/gn.
# Maybe only worthwhile if lib+include gets turned into an efi-libc
# library() that could theoretically be exported.
if (current_toolchain == default_toolchain) {
  foreach(cpu, standard_fuchsia_cpus) {
    environment("efi") {
      cpu = cpu
      os = "win"  # TODO(49546)
      globals = {
        is_kernel = true
      }
      configs += standard_fuchsia_configs + [ ":efi_config" ]

      # TODO: harmless, but just to match build.mk
      configs -= [ "$zx/public/gn/config:default_frame_pointers" ]

      # TODO: strip = true

      tags = [ "standalone" ]
      exclude_variant_tags = [
        "instrumentation-runtime",

        # There isn't a GCC toolchain that supports the Windows target
        # directly the way we use it.
        "gcc",
      ]
    }
  }
} else if (toolchain.environment == "efi") {
  # This is the top config for all code in the efi_toolchain.
  config("efi_config") {
    configs = [
      "$zx/kernel:standalone",
      "$zx/public/gn/config:no_sanitizers",

      # TODO: "$zx/kernel:warnings",
    ]
    include_dirs = [ "include" ]
    cflags = [
      "-std=c99",
      "-fshort-wchar",
    ]
  }

  zx_executable("bootloader") {
    output_dir = root_out_dir
    if (current_cpu == "arm64") {
      output_name = "bootaa64"
    } else {
      output_name = "boot${current_cpu}"
    }
    output_extension = "efi"
    deps = [
      "lib",
      "src",
    ]
    ldflags = [
      "-Wl,/subsystem:efi_application",
      "-Wl,/entry:efi_main",

      # These only really affect instrumented builds but are always harmless.
      "-noprofilelib",
      "-Wl,/nodefaultlib",
    ]

    # For the //:images build_api_module().
    metadata = {
      images = [
        {
          label = get_label_info(":$target_name", "label_with_toolchain")
          name = "bootloader"
          type = "efi"
          path = rebase_path("$root_out_dir/$output_name.$output_extension",
                             root_build_dir)
          cpu = current_cpu
        },
      ]
    }
  }
} else {
  # In any other toolchain, just redirect to the proper toolchain.
  environment_redirect("bootloader") {
    environment_label = ":efi"
    os = "win"  # TODO(49546)
    direct = true
    deps = [ ":bootloader" ]
  }
}
