# 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/config/sysroot.gni")
import("//build/go/go_test.gni")
import("//build/package.gni")

if (current_toolchain == target_toolchain) {
  action("go_toolchain") {
    go_root = "$root_out_dir/goroot"

    # These files are copied over to //out by makefuchsia.go.
    copied_files = [
      "misc/fuchsia/clangwrap.sh",
      "misc/fuchsia/gccwrap.sh",
      "misc/fuchsia/go_stdlib_tests.json",
    ]

    inputs = copied_files
    inputs += [ "makefuchsia.go" ]

    outputs = [
      "$root_gen_dir/goroot.done",
    ]
    foreach(file, copied_files) {
      outputs += [ "$go_root/$file" ]
    }

    depfile = "$root_gen_dir/goroot.d"

    visibility = [ ":*" ]

    script = rebase_path("//buildtools/go")
    args = [
      "run",
      rebase_path("makefuchsia.go", root_build_dir),
      "-buildtools-go",
      rebase_path("//buildtools/go"),
      "-fuchsia-goroot",
      rebase_path("."),
      "-depfile",
      rebase_path(depfile),
      "-root-gen-dir",
      rebase_path("$root_gen_dir"),
      "-root-out-dir",
      rebase_path("$root_out_dir"),
      "--out-goroot",
      rebase_path(go_root),
      "-target-cpu",
      target_cpu,
    ]
  }
}

group("go_runtime") {
  public_deps = [
    ":go_toolchain(${target_toolchain})",
  ]
}

go_test("go_dispatch_test") {
  gopackage = "syscall/zx/dispatch"
}

go_test("go_zxwait_test") {
  gopackage = "syscall/zx/zxwait"
}

go_test("go_os_test") {
  gopackage = "os"
}

go_test("go_net_test") {
  gopackage = "net"
}

package("go_stdlib_tests") {
  testonly = true
  deprecated_system_image = true

  deps = [
    ":go_dispatch_test",
    ":go_net_test",
    ":go_os_test",
    ":go_zxwait_test",
  ]

  tests = [
    {
      name = "go_dispatch_test"
    },
    {
      name = "go_net_test"
    },
    {
      name = "go_os_test"
    },
    {
      name = "go_zxwait_test"
    },
  ]
}
