# Copyright 2016 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("//build/components.gni")
import("//build/config/clang/clang.gni")
import("//build/config/sysroot.gni")
import("//build/go/go_test.gni")
import("//build/host.gni")

if (is_host && current_toolchain == toolchain_variant.base) {
  _go_root = "$host_tools_dir/goroot"

  compiled_action("makeroot") {
    visibility = [ ":makefuchsia" ]

    depfile = "$target_gen_dir/$target_name.d"
    outputs = [ "$target_gen_dir/$target_name.stamp" ]

    tool = "makeroot"
    args = [
      "--source-goroot",
      rebase_path(".", root_build_dir),
      "--target-goroot",
      rebase_path(_go_root, root_build_dir),

      "--depfile",
      rebase_path(depfile, root_build_dir),
      "--stamp-file",
      rebase_path(outputs[0], root_build_dir),
    ]
  }

  compiled_action("makefuchsia") {
    visibility = [ ":go_runtime" ]
    deps = [ ":makeroot" ]

    depfile = "$target_gen_dir/$target_name.d"
    outputs = [ "$target_gen_dir/$target_name.stamp" ]

    tool = "makefuchsia"
    args = [
      "--cc",
      rebase_path("${clang_prefix}/clang"),
      "--cxx",
      rebase_path("${clang_prefix}/clang++"),
      "--gocache",
      gocache_dir,
      "--goroot",
      rebase_path(_go_root, root_build_dir),
      "--goroot-bootstrap",
      rebase_path("//prebuilt/third_party/go/${host_platform}"),
      "--sysroot",
      rebase_path(sysroot),

      "--depfile",
      rebase_path(depfile, root_build_dir),
      "--stamp-file",
      rebase_path(outputs[0], root_build_dir),
    ]
  }
}

group("go_runtime") {
  if (is_host) {
    public_deps = [ ":makefuchsia(${toolchain_variant.base})" ]
  } else {
    public_deps = [ ":$target_name(${host_toolchain})" ]
  }
}

go_test("go_exec_test") {
  gopackages = [ "os/exec" ]
}

go_test("go_net_test") {
  gopackages = [ "net" ]
}

go_test("go_os_test") {
  gopackages = [ "os" ]
}

go_test("go_pprof_test") {
  gopackages = [ "runtime/pprof" ]
}

go_test("go_zx_test") {
  gopackages = [ "syscall/zx" ]
}

go_test("go_zxwait_test") {
  gopackages = [ "syscall/zx/zxwait" ]
}

fuchsia_component("go-exec-test") {
  testonly = true
  manifest = "meta/go_exec_test.cmx"
  deps = [
    ":go_exec_test",
    "//third_party/sbase:cat",
    "//third_party/sbase:echo",
  ]
}

fuchsia_component("go-net-test") {
  testonly = true
  manifest = "meta/go_net_test.cmx"
  deps = [ ":go_net_test" ]
}

fuchsia_component("go-os-test") {
  testonly = true
  manifest = "meta/go_os_test.cmx"
  deps = [ ":go_os_test" ]
}

fuchsia_component("go-pprof-test") {
  testonly = true
  manifest = "meta/go_pprof_test.cmx"
  deps = [ ":go_pprof_test" ]
}

fuchsia_component("go-zx-test") {
  testonly = true
  manifest = "meta/go_zx_test.cmx"
  deps = [ ":go_zx_test" ]
}

fuchsia_component("go-zxwait-test") {
  testonly = true
  manifest = "meta/go_zxwait_test.cmx"
  deps = [ ":go_zxwait_test" ]
}

fuchsia_test_package("go-stdlib-tests") {
  # TODO(https://fxbug.dev/84695): Migrate to v2 components.
  test_components = [
    ":go-exec-test",
    ":go-net-test",
    ":go-pprof-test",
    ":go-zx-test",
    ":go-zxwait-test",
    ":go-os-test",
  ]

  deps = [ "//src/connectivity/network/netstack:component-debug-legacy" ]

  test_specs = {
    environments = [ emu_env ]
  }
}

go_test("go_unsafevalue_test") {
  gopackages = [ "syscall/zx/fidl/internal/unsafevalue" ]

  # This runs both on target device and as a host test.
  # In both cases, it needs to build a go toolchain rather than using a prebuilt because
  # it is testing the fidl package, which is implemented in the toolcahin itself.
  use_prebuilt_go = false
}

go_test("go_fidl_test") {
  gopackages = [ "syscall/zx/fidl" ]
}

go_test("go_extended_fidl_test") {
  # N.B. these tests are not in the fidl package to avoid having to rebuild the
  # go toolchain while iterating on them.
  gopackages = [ "syscall/zx/fidl/fidl_test" ]
  # TODO(pascallouis): Currently, while we take a dependency, the output of
  # this FIDL rule is not directly used, rather the generated bindings were
  # copied and checked in.
  #
  # Not being able to depend on automated generation is due to where code is
  # placed, and how this relates to the tree structure of the toolchain.
  # Disabling while fidlgen table generation is pending.
  # Use regen-fidl to generate this file.
  # deps = [
  #   "src/syscall/zx/fidl/internal/bindingstest($go_toolchain)",
  # ]
}

fuchsia_component("go-unsafevalue-test") {
  testonly = true
  manifest = "meta/go_unsafevalue_test.cmx"
  deps = [ ":go_unsafevalue_test" ]
}

fuchsia_component("go-fidl-test") {
  testonly = true
  manifest = "meta/go_fidl_test.cmx"
  deps = [ ":go_fidl_test" ]
}

fuchsia_component("go-extended-fidl-test") {
  testonly = true
  manifest = "meta/go_extended_fidl_test.cmx"
  deps = [ ":go_extended_fidl_test" ]
}

fuchsia_test_package("go-fidl-tests") {
  test_components = [
    ":go-unsafevalue-test",
    ":go-extended-fidl-test",
    ":go-fidl-test",
  ]

  test_specs = {
    environments = [ emu_env ]
  }
}

group("fidl-tests") {
  testonly = true
  deps = [
    ":go-fidl-tests",
    ":go_extended_fidl_test($host_toolchain)",
    ":go_unsafevalue_test($host_toolchain)",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":fidl-tests",
    ":go-stdlib-tests",
  ]
}
