# Copyright 2019 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("$zx_build/public/gn/migrated_targets.gni")

zx_library("async") {
  sdk = "source"
  sdk_publishable = true
  sdk_headers = [
    "lib/async/dispatcher.h",
    "lib/async/irq.h",
    "lib/async/paged_vmo.h",
    "lib/async/receiver.h",
    "lib/async/task.h",
    "lib/async/time.h",
    "lib/async/trap.h",
    "lib/async/wait.h",
  ]
  sdk_migrated = true
  host = true
  public_deps = [
    # <lib/async/cpp/wait.h> has #include <lib/fit/function.h>.
    "$zx/system/ulib/fit:headers",
  ]
  sources = [ "ops.c" ]
  deps = [
    "$zx/system/ulib/fit",
    "$zx/system/ulib/zircon",
  ]
}

zx_library("async-cpp") {
  sdk = "source"
  sdk_publishable = true
  sdk_headers = [
    "lib/async/cpp/executor.h",
    "lib/async/cpp/irq.h",
    "lib/async/cpp/paged_vmo.h",
    "lib/async/cpp/receiver.h",
    "lib/async/cpp/task.h",
    "lib/async/cpp/time.h",
    "lib/async/cpp/trap.h",
    "lib/async/cpp/wait.h",
  ]
  sdk_migrated = true
  public_deps = [
    # <lib/async/cpp/executor.h> has #include <lib/zx/time.h>.
    # <lib/async/cpp/task.h> has #include <lib/zx/time.h>.
    "$zx/system/ulib/zx:headers",

    # <lib/async/cpp/executor.h> has many lib/fit includes.
    # <lib/async/cpp/task.h> has #include <lib/fit/function.h>.
    "$zx/system/ulib/fit:headers",
  ]
  sources = [
    "executor.cc",
    "irq.cc",
    "paged_vmo.cc",
    "receiver.cc",
    "task.cc",
    "trap.cc",
    "wait.cc",
  ]
  deps = [
    ":async",
    "$zx/system/ulib/zircon",
    "$zx/system/ulib/zx",
  ]
}

group("tests") {
  testonly = true
  deps = [ "test" ]
}
