# 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("//build/config/fuchsia/rules.gni")
import("//build/fidl/fidl.gni")
import("//build/test.gni")
import("//build/unification/images/migrated_manifest.gni")

fidl("fuchsia.device.schedule.work.test") {
  sources = [ "schedule-work.test.fidl" ]
  public_deps = [ "//zircon/vdso/zx" ]
}

driver_module("ddk-schedule-work-test") {
  defines = [ "_ALL_SOURCE" ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
  configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "test-driver.cc" ]
  deps = [
    ":fuchsia.device.schedule.work.test_llcpp",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/sync",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
  ]

  # TODO(ZX-2863): This driver violates the allowed shlib deps policy.
  # Tests fail when using #"//zircon/public/lib/fdio:static",
  #deprecated_inhibit_driver_shlib_allowlist = true
}

test("ddk-schedule-work") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  testonly = false
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "test.cc" ]
  deps = [
    ":fuchsia.device.schedule.work.test_llcpp",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/devmgr-integration-test",
    "//zircon/system/ulib/devmgr-launcher",
    "//zircon/system/ulib/driver-integration-test",
  ]
}

executable("ddk-schedule-work-perf") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  testonly = false
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "perf-test.cc" ]
  deps = [
    ":fuchsia.device.schedule.work.test_llcpp",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/devmgr-integration-test",
    "//zircon/system/ulib/devmgr-launcher",
    "//zircon/system/ulib/driver-integration-test",
  ]
}

migrated_manifest("ddk-schedule-work-test-manifest") {
  deps = [ ":ddk-schedule-work-test" ]
}

migrated_manifest("ddk-schedule-work-manifest") {
  deps = [ ":ddk-schedule-work" ]
}

migrated_manifest("ddk-schedule-work-perf-manifest") {
  deps = [ ":ddk-schedule-work-perf" ]
}
