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

config("trace_level_logging") {
  rustflags = [ "--cfg=trace_level_logging" ]
  visibility = [ ":*" ]
}

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",
    "//third_party/rust_crates:tracing",
  ]
  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/common.rs",
      "src/runtime/fuchsia/executor/instrumentation.rs",
      "src/runtime/fuchsia/executor/local.rs",
      "src/runtime/fuchsia/executor/mod.rs",
      "src/runtime/fuchsia/executor/packets.rs",
      "src/runtime/fuchsia/executor/send.rs",
      "src/runtime/fuchsia/executor/time.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-channel",
        "//third_party/rust_crates:async-io",
        "//third_party/rust_crates:async-net",
        "//third_party/rust_crates:blocking",
        "//third_party/rust_crates:futures-lite",
        "//third_party/rust_crates:tokio",
      ]
      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" ]

  if (fuchsia_async_trace_level_logging) {
    configs += [ ":trace_level_logging" ]
  }
}

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