# Copyright 2018 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/rust/rustc_library.gni")
import("//build/rust/rustc_staticlib.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")

rustc_library("fuchsia-async") {
  name = "fuchsia_async"
  edition = "2018"
  version = "0.1.0"
  with_unit_tests = true
  deps = [
    "//src/lib/fuchsia-async-macro",
    "//src/lib/fuchsia-system-alloc",
    "//src/lib/zircon/rust:fuchsia-zircon-status",
    "//third_party/rust_crates:bitflags",
    "//third_party/rust_crates:crossbeam",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:libc",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pin-utils",
  ]
  sources = [
    "src/atomic_future.rs",
    "src/handle/mod.rs",
    "src/lib.rs",
    "src/net/mod.rs",
    "src/runtime/mod.rs",
    "src/runtime/stub.rs",
    "src/temp.rs",
    "src/test_support.rs",
  ]
  if (is_fuchsia) {
    deps += [
      "//src/lib/zircon/rust:fuchsia-zircon",
      "//third_party/rust_crates:socket2",
    ]
    sources += [
      "src/handle/zircon/channel.rs",
      "src/handle/zircon/fifo.rs",
      "src/handle/zircon/mod.rs",
      "src/handle/zircon/on_signals.rs",
      "src/handle/zircon/rwhandle.rs",
      "src/handle/zircon/socket.rs",
      "src/net/fuchsia/mod.rs",
      "src/net/fuchsia/tcp.rs",
      "src/net/fuchsia/udp.rs",
      "src/runtime/fuchsia/executor.rs",
      "src/runtime/fuchsia/instrumentation.rs",
      "src/runtime/fuchsia/mod.rs",
      "src/runtime/fuchsia/task.rs",
      "src/runtime/fuchsia/timer.rs",
    ]
  } else {
    deps += [
      "//third_party/rust_crates:lazy_static",
      "//third_party/rust_crates:slab",
    ]
    if (current_toolchain != unknown_wasm32_toolchain) {
      deps += [
        "//third_party/rust_crates:async-std",
        "//third_party/rust_crates:smol",
      ]
      sources += [ "src/net/portable/udp.rs" ]
    }
    sources += [
      "src/handle/emulated/channel.rs",
      "src/handle/emulated/mod.rs",
      "src/handle/emulated/socket.rs",
      "src/net/portable/mod.rs",
      "src/runtime/portable.rs",
    ]
  }
  test_deps = [ "//third_party/rust_crates:futures-test" ]
}

rustc_staticlib("fuchsia-async-staticlib") {
  edition = "2018"
  deps = [
    ":fuchsia-async",
    "//src/lib/zircon/rust:fuchsia-zircon-status",
    "//src/lib/zircon/rust:fuchsia-zircon-sys",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:parking_lot",
  ]
  if (is_fuchsia) {
    deps += [ "//src/lib/zircon/rust:fuchsia-zircon" ]
  }
  source_root = "src/ffi.rs"

  sources = [ "src/ffi.rs" ]
}

fuchsia_unittest_package("fuchsia-async-tests") {
  manifest = "meta/fuchsia_async_lib_test.cmx"
  deps = [ ":fuchsia-async_test" ]
  test_specs = {
    environments = [ emu_env ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-async-tests",
    ":fuchsia-async_test($host_toolchain)",
    "cpp:tests",
  ]
}
