# 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
        is_efi = 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" ]
  }
}
