# Copyright 2019 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

# TODO(fxbug.dev/54160): Keep this in sync with BUILD.gn

import("$zx/kernel/lib/version/version_string.gni")
import("$zx/public/gn/config/levels.gni")
import("$zx/public/gn/config/standard.gni")
import("$zx/public/gn/toolchain/c_utils.gni")
import("$zx/public/gn/toolchain/environment.gni")
import("$zx/public/gn/toolchain/environment_redirect.gni")
import("params.gni")

if (current_toolchain == default_toolchain) {
  # In the default toolchain, just define the kernel toolchains.
  foreach(cpu, standard_fuchsia_cpus) {
    environment("kernel") {
      globals = {
        is_kernel = true
      }

      # Put the kernel's include_dirs ahead of the defaults so
      # it can override libc++ headers.
      common_configs = configs + standard_fuchsia_configs
      configs = []
      configs = [
        ":headers",

        # TODO(fxbug.dev/44971): Many include/ headers use <ktl/*.h> headers.
        "$zx/kernel/lib/ktl:headers.config",
        "$zx/kernel/lib/ktl:ktl.config",

        # <stdio.h> has #include <lib/io.h>.
        "$zx/kernel/lib/io:headers.config",

        # <stdlib.h> has #include <lib/heap.h>.
        "$zx/kernel/lib/heap:headers.config",

        # <lib/lockup_detector.h> is included by some "low-level" headers.
        "$zx/kernel/lib/lockup_detector:headers.config",

        # <kernel/percpu.h> has #include <lib/lazy_init/lazy_init.h>.
        "$zx/system/ulib/lazy_init:headers.config",

        # <kernel/spinlock.h> has #include <lockdep/lock_policy.h>.
        "$zx/system/ulib/lockdep:headers.config",

        # <kernel/{scheduler.h,scheduler_state.h> has #include <ffl/fixed.h>.
        "$zx/system/ulib/ffl:headers.config",

        # <kernel/thread.h> has #include <vm/kstack.h>.
        "vm:headers.config",

        # <vm/vm_object.h> has #include <lib/user_copy/user_ptr.h>.
        "$zx/kernel/lib/user_copy:headers.config",

        # <lib/ktrace.h> has #include <lib/zircon-internal/ktrace.h>.
        "$zx/system/ulib/zircon-internal:headers.config",

        # <lib/ktrace.h> has #include <lib/ktrace/string_ref.h>.
        "$zx/kernel/lib/ktrace:headers.config",
        "$zx/kernel/lib/ktrace:suppress-warning.config",

        # <kernel/thread.h> has #include <fbl/macros.h>
        "$zx/system/ulib/fbl:headers.config",

        # <dev/iommu.h> has #include <fbl/name.h>
        # <mexec.h> has #include <fbl/span.h>
        "lib/fbl:headers.config",

        # Everywhere has #include <zx/status.h>
        "$zx/system/ulib/zxc:headers.config",
      ]

      # The rest of kernel-specific config goes after the defaults
      # so it can override explicit code-generation switches.
      configs += common_configs + [ ":kernel_config" ]

      # Always enable frame pointers in the kernel so there are panic
      # backtraces and such.
      # TODO(mcgrathr): Consider either removing this so there's a
      # no-frame-pointers option, or removing the kernel's support for
      # !WITH_FRAME_POINTERS if it will never be used.
      configs -= [ "$zx_build_config:default_frame_pointers" ]
      configs += [ "$zx_build_config:frame_pointers" ]

      tags = [ "standalone" ]

      if (cpu == "x64") {
        # TODO(fxbug.dev/27321): x86 kernel can't be built without --gc-sections
        # because of crufty acpica code, and some compiler instrumentation
        # is broken wrt --gc-sections semantics.
        exclude_variant_tags = [ "breaks-gc-sections" ]
        configs -= [ "$zx_build_config:default_linker_gc" ]
        configs += [ "$zx_build_config:linker_gc" ]
      }
    }
  }
} else if (is_kernel) {
  # These are needed both in kernel sources (pervasively) and in the linker
  # scripts.
  kernel_defines = [
    # TODO: should not be needed in C, but is in one place now.
    "KERNEL_BASE=$kernel_base",

    "SMP_MAX_CPUS=$smp_max_cpus",
  ]

  # This is the top config for all kernel code.
  config("kernel_config") {
    configs = [
      ":lock_dep",
      ":scheduler",
      ":standalone",
      ":warnings",
      "arch/$zircon_cpu:abi",
      "arch/$zircon_cpu:kernel",

      # include/lib/counters.h and kernel.ld depend on -fdata-sections.
      "$zx_build_config:data_sections",
    ]

    # Always enable frame pointers in the kernel so there are panic
    # backtraces and such.
    # TODO(mcgrathr): Consider either removing this so there's a
    # no-frame-pointers option, or removing the kernel's support for
    # !WITH_FRAME_POINTERS if it will never be used.
    configs += [ "$zx_build_config:frame_pointers" ]

    defines = kernel_defines + kernel_extra_defines
    defines += [
      "_KERNEL",
      "LK",
      "ENABLE_PANIC_SHELL",
      "ZIRCON_TOOLCHAIN",
      "LK_DEBUGLEVEL=$kernel_debug_level",
      "DEBUG_PRINT_LEVEL=$kernel_debug_print_level",
      "VM_TRACING_LEVEL=$vm_tracing_level",
    ]

    if (!disable_kernel_pci) {
      defines += [ "WITH_KERNEL_PCIE" ]
    }

    cflags = [ "-fpie" ]
  }

  config("headers") {
    include_dirs = [
      "include",
      "lib/libc/include",
    ]
    configs = [ "lib/libc:limits-dummy" ]
  }

  # For any standalone static binary.
  config("standalone") {
    ldflags = [
      "-nostdlib",
      "-static",
    ]

    cflags = [
      "-ffreestanding",
      "-include",
      rebase_path("include/hidden.h", root_build_dir),

      # We want `.debug_frame` for the kernel (fxbug.dev/30023).  And we still want
      # asynchronous unwind tables.  Alas there's (currently) no way to
      # achieve this with our GCC.  At the moment we compile with
      # `-fno-omit-frame-pointer`, which is good because we link with
      # `--gc-sections`, which means `.eh_frame` gets discarded so GCC-built
      # kernels don't have any unwind info (except for assembly)!
      "-fno-unwind-tables",
    ]

    # Always feed assembler code the `.cfi_sections` directive to
    # populate only `.debug_frame` and not `.eh_frame`.
    asmflags = [
      "-include",
      rebase_path("debug-frame.S"),
    ]

    cflags_cc = [
      # Underlying kernel heap only has default alignment of 8 bytes, so pass
      # this to the compiler as the default new alignment.
      "-faligned-new=8",
    ]

    if (current_cpu == "x64") {
      # This only matters in an environment where interrupt handlers might
      # push trap frames in the same privilege level, like the kernel.
      # e.g. Multiboot probably doesn't actually need it, but it doesn't hurt.
      cflags += [ "-mno-red-zone" ]
    } else if (current_cpu == "arm64") {
      # This matters if vector registers are not available, e.g. in the kernel
      # since the they hold unsaved user state, or in the physmem environment
      # because they might not be enabled in hardware yet.
      if (!is_gcc) {
        cflags += [ "-mgeneral-regs-only" ]
      } else {
        # TODO(mcgrathr): To work around a GCC bug we have to sneak
        # -mgeneral-regs-only in through an arcane mechanism.  See
        # //zircon/kernel/lib/arch/arm64/include/lib/arch/intrin.h for details.
        cflags += [
          "-include",
          rebase_path("arch/arm64/general-regs-only.h", root_build_dir),
        ]
      }
    }

    if (is_gcc && current_os == "fuchsia") {
      cflags += [ "-fpie" ]
    }

    if (!is_gcc && current_os == "fuchsia") {
      # In the Fuchsia-target toolchains there's no way to prevent the
      # compiler driver from passing -pie, so negate it.  BFD ld doesn't
      # have --no-pie, but arm64-elf-gcc doesn't pass -pie either.
      ldflags += [ "-Wl,--no-pie" ]
    }

    if (!is_gcc) {
      # Disable the implicit addition of toolchain-provided libraries to
      # the link by the compiler driver.  No toolchain-provided library is
      # compatible with the kernel's internal ABI.
      #
      # TODO(fxbug.dev/27356): Clang doesn't have a single straightforward switch to
      # disable all such libraries, though it certainly should.  It
      # provides separate switches to disable the profiling/coverage
      # runtime and to disable all the flavors of runtime implied by
      # -fsanitize=... switches (including any such defaults).  It will
      # still provide other incompatible libraries to the link, but they
      # won't have any effect since they don't define any symbols the link
      # needs.  However, this is a fragile situation that could easily
      # break.
      ldflags += [
        "-noprofilelib",
        "-fno-sanitize-link-runtime",
      ]
    }

    configs = [ "$zx_build_config:no_exceptions" ]
  }

  config("warnings") {
    cflags = [
      "-Wformat=2",
      "-Wvla",
    ]

    # GCC supports `-Wformat-signedness` but Clang currently does not.
    if (is_gcc) {
      cflags += [ "-Wformat-signedness" ]
    }

    cflags_c = [ "-Wmissing-prototypes" ]
  }

  config("lock_dep") {
    visibility = [ ":*" ]
    defines = []
    if (enable_lock_dep) {
      defines += [
        "WITH_LOCK_DEP=1",
        "LOCK_DEP_ENABLE_VALIDATION=1",
        "CUSTOM_DEFAULT_STACK_SIZE=16384",
      ]
    }
    if (enable_lock_dep_tests) {
      defines += [ "WITH_LOCK_DEP_TESTS=1" ]
    }
  }

  config("scheduler") {
    visibility = [ ":*" ]
    defines = [
      "SCHEDULER_TRACING_LEVEL=$scheduler_tracing_level",
      "SCHEDULER_QUEUE_TRACING_ENABLED=$scheduler_queue_tracing_enabled",
    ]
  }

  # This is the kernel proper, an ELF executable with full symbols.
  # It's the file to use with a debugger, for example.
  zx_executable("zircon") {
    visibility = [ ":*" ]

    # $zx/scripts/zircon.elf-gdb.py expects kernel symbols in "zircon.elf".
    output_extension = "elf"

    ldflags = [
      "-Wl,-T," + rebase_path("kernel.ld", root_build_dir),
      "-Wl,--emit-relocs",
    ]
    if (toolchain.tags + [ "lto" ] - [ "lto" ] != toolchain.tags) {
      # (Thin)LTO linker driver overrides the PIC/PIE metadata embedded in the
      # IR and will choose the relocation model based on the output which for
      # the kernel would be static rather than PIE. We need to explicitly
      # override the relocation via linker flag.
      ldflags += [ "-Wl,-mllvm,-relocation-model=pic" ]
    }
    inputs = [ "kernel.ld" ]
    configs += [ ":kernel_defsym" ]

    deps = [
      ":test",  # TODO: make optional, add testonly taint
      "top",
    ]
    if (current_cpu == "arm64") {
      deps += [ "platform/generic-arm" ]
    } else if (current_cpu == "x64") {
      deps += [ "target/pc" ]
    }
  }

  zircon_elf_rspfile = "$target_gen_dir/zircon.elf.rsp"
  link_output_rspfile("zircon.elf.rsp") {
    visibility = [ ":*" ]
    deps = [ ":zircon" ]
    outputs = [ zircon_elf_rspfile ]
  }

  # These are needed only in image.S and in the linker scripts.
  image_defines = [ "BOOT_HEADER_SIZE=0x50" ]

  # This supplies those variables for use in linker scripts.
  config("kernel_defsym") {
    visibility = [ ":*" ]
    ldflags = []
    foreach(assignment, kernel_defines + image_defines) {
      ldflags += [ "-Wl,-defsym,$assignment" ]
    }
  }

  group("test") {
    #TODO: testonly = true
    visibility = [ ":*" ]
    deps = [
      "debugcommands",
      "tests",
    ]
  }

  # Extract the raw binary image (no ELF headers) of the kernel proper.
  image_binary("raw") {
    visibility = [ ":*" ]
    deps = [ ":zircon" ]
    output_name = "zircon"
    output_path =
        rebase_path("$target_out_dir/$output_name.bin", root_build_dir)
    metadata = {
      # Picked up by link_output_rspfile(), below.
      link_output_path = [ output_path ]
      link_output_barrier = []
    }

    # Use the same variant for the extraction that will have built the kernel.
    variant_target = {
      match = "executable"
      label = ":zircon"
      output_name = "zircon"
    }
  }

  image_rspfile = "$target_gen_dir/image.rsp"
  link_output_rspfile("image.rsp") {
    visibility = [ ":*" ]
    outputs = [ image_rspfile ]
    deps = [ ":raw" ]
  }

  toolchain_utils_action("kernel-image.h") {
    visibility = [ ":*" ]
    outputs = [ "$target_gen_dir/$target_name" ]
    script = "gen-kernel-image-header.sh"
    utils = [ "nm" ]
    deps = [
      ":image.rsp",
      ":zircon.elf.rsp",
    ]
    sources = [
      image_rspfile,
      zircon_elf_rspfile,
    ]
    args = rebase_path(sources + outputs, root_build_dir)
  }

  # Use the --emit-relocs records to extract the fixups needed to relocate
  # the kernel at boot.  This generates the "kernel-fixups.inc" file that's
  # #include'd by "arch/$zircon_cpu/image.S".
  toolchain_utils_action("fixups") {
    visibility = [ ":*" ]
    deps = [
      ":zircon",
      ":zircon.elf.rsp",
    ]
    sources = [ zircon_elf_rspfile ]
    outputs = [ "$target_gen_dir/kernel-fixups.inc" ]
    depfile = "${outputs[0]}.d"

    script = "gen-kaslr-fixups.sh"
    utils = [
      "readelf",
      "objdump",
    ]
    args = [
      "@" + rebase_path(zircon_elf_rspfile, root_build_dir),
      rebase_path(outputs[0], root_build_dir),
      rebase_path(depfile, root_build_dir),
    ]

    # Use the same variant for the extraction that will have built the kernel.
    variant_target = {
      match = "executable"
      label = ":zircon"
      output_name = "zircon"
    }
  }

  # Link the final kernel image layout including the extracted raw binary
  # and the generated fixups.
  zx_executable("image") {
    visibility = [ ":*" ]
    configs += [
      ":image_config",
      ":kernel_defsym",
    ]
    deps = [
      ":fixups",
      ":gdb_extension",
      ":kernel-image.h",
      ":raw",
      ":zircon",
      ":zircon.elf.rsp",
      "$zx/kernel/lib/version:headers",
    ]
    sources = [ "arch/$zircon_cpu/image.S" ]

    # kernel-image.inc includes this via .incbin, which doesn't get automatic
    # dependency tracking.
    inputs = [ kernel_version_string_file ]
    deps += kernel_version_string_deps

    include_dirs = [ "." ]  # For kernel-image.inc.

    # These need to be here rather than in the config() below because they
    # refer directly to inputs related to deps.
    ldflags = [
      "-Wl,-T," + rebase_path("image.ld", root_build_dir),
      "-Wl,--just-symbols,@" + rebase_path(zircon_elf_rspfile, root_build_dir),
    ]
    inputs += [
      "image.ld",
      zircon_elf_rspfile,
    ]

    # If the span of where fixups might be is short enough, the fixup code
    # itself can be shorter.  Assume the kernel will fit under the
    # threshold (about 1MB) in well-optimized builds.
    if (optimize != "none" && optimize != "debug" &&
        toolchain.tags + [ "instrumented" ] - [ "instrumented" ] ==
        toolchain.tags) {
      defines = [ "TINY" ]
    }
  }

  # Link gdb extension script file needed for kernel debugging.
  action("gdb_extension") {
    visibility = [ ":*" ]
    sources = [ "scripts/zircon.elf-gdb.py" ]
    outputs = [ "$target_out_dir/zircon.elf-gdb.py" ]
    script = "/bin/ln"
    args = [
      "-sf",
      rebase_path("scripts/zircon.elf-gdb.py", target_out_dir),
      rebase_path(target_out_dir, root_build_dir),
    ]
  }

  # This needs to be in a config() rather than directly in the executable()
  # so that these switches come after the ones provided by configs.  In
  # some cases, these switches may be overriding settings done by another
  # config(), e.g. --build-id in the GCC build.
  config("image_config") {
    visibility = [ ":*" ]
    include_dirs = [ target_gen_dir ]
    defines = image_defines
    ldflags = [ "-Wl,--build-id=none" ]
  }

  # Finally, extract the raw image (no ELF headers), which includes its own
  # embedded headers to make it a ZBI.
  image_binary("kernel") {
    output_dir = root_out_dir
    output_extension = "zbi"
    output_path = rebase_path("$output_dir/$target_name.$output_extension",
                              root_build_dir)
    deps = [ ":image" ]
    metadata = {
      # For the //:images build_api_module().
      images = [
        {
          label = get_label_info(":$target_name", "label_with_toolchain")
          name = "kernel"
          tags = [ "incomplete" ]
          type = "zbi"
          path = output_path
          cpu = current_cpu
        },
      ]

      # 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",
        output_path,
      ]
    }

    # Use the same variant for the extraction that will have built the kernel.
    variant_target = {
      match = "executable"
      label = ":zircon"
      output_name = "zircon"
    }
  }
} else {
  # Redirect to the kernel toolchain.
  environment_redirect("kernel") {
    environment_label = ":kernel"
    direct = true
    deps = [ ":kernel" ]
  }
}
