# Copyright 2017 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/fuchsia/zircon_images.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

if (is_fuchsia) {
  rustc_library("fuchsia-zircon") {
    version = "0.3.3"
    edition = "2018"
    deps = [
      ":fuchsia-zircon-status",
      ":fuchsia-zircon-sys",
      "//third_party/rust_crates:bitflags",
    ]
  }
}

# TODO(bwb): Post build unification, this should depend upon the kazoo
# generation target.
rustc_library("fuchsia-zircon-sys") {
  version = "0.3.3"
  edition = "2018"
  source_root =
      "$zircon_root_build_dir/gen/include/zircon/syscalls/definitions.rs"
  deps = [ ":fuchsia-zircon-types" ]
}

rustc_library("fuchsia-zircon-types") {
  version = "0.1.0"
  edition = "2018"
  source_root = "fuchsia-zircon-types/src/lib.rs"
}

rustc_library("fuchsia-zircon-status") {
  version = "0.1.0"
  edition = "2018"
  source_root = "fuchsia-zircon-status/src/lib.rs"
  deps = [ ":fuchsia-zircon-sys" ]
}

rustc_test("fuchsia-zircon-status-tests") {
  name = "fuchsia_zircon_status_tests"
  edition = "2018"
  source_root = "fuchsia-zircon-status/src/lib.rs"

  deps = [ "//src/lib/zircon/rust:fuchsia-zircon-sys" ]
}

# Certain unit tests for fuchsia-zircon need dependencies which can't be added
# to the main library's without causing circular dependencies. Only the test
# artifact is used, not the main artifact.
# TODO: If we add test-only deps to rustc_artifact, this can merge back in.
rustc_test("fuchsia-zircon-unittest") {
  edition = "2018"
  deps = [
    ":fuchsia-zircon-status",
    ":fuchsia-zircon-sys",
    "//third_party/rust_crates:bitflags",

    # Test-only deps
    ":fuchsia-zircon",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fuchsia-runtime",
  ]
}

rustc_binary("exit_with_code_util") {
  edition = "2018"
  source_root = "test_util/exit_with_code_util.rs"
  deps = [ ":fuchsia-zircon" ]
}

rustc_binary("sleep_forever_util") {
  edition = "2018"
  source_root = "test_util/sleep_forever_util.rs"
  deps = [ ":fuchsia-zircon" ]
}

test_package("fuchsia-zircon-tests") {
  deps = [
    ":exit_with_code_util",
    ":fuchsia-zircon-status-tests",
    ":fuchsia-zircon-unittest",
    ":sleep_forever_util",
  ]

  tests = [
    {
      name = "fuchsia_zircon_unittest"
      dest = "fuchsia_zircon_tests"
      environments = basic_envs
    },
    {
      name = "fuchsia_zircon_status_tests"
      dest = "fuchsia_zircon_status_tests"
      environments = basic_envs
    },
  ]

  binaries = [
    {
      name = "exit_with_code_util"
    },
    {
      name = "sleep_forever_util"
    },
  ]
}

group("tests") {
  testonly = true
  deps = [ ":fuchsia-zircon-tests" ]
}
