# Copyright 2022 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("//src/sys/core/build/core_shard.gni")

group("tests") {
  testonly = true
  deps = [ ":driver-playground-tests" ]
}

source_set("lib") {
  sources = [
    "src/playground.cc",
    "src/playground.h",
    "src/playground_utils.cc",
    "src/playground_utils.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.driver.playground:fuchsia.driver.playground_cpp",
    "//src/devices/lib/log",
  ]

  deps = [
    "//sdk/fidl/fuchsia.process:fuchsia.process_cpp",
    "//sdk/lib/component/incoming/cpp",
    "//sdk/lib/fdio",
    "//sdk/lib/fdio:fdio-spawn-actions",
  ]
}

executable("bin") {
  output_name = "driver_playground"
  sources = [ "src/main.cc" ]
  deps = [
    ":lib",
    "//sdk/lib/component/outgoing/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

executable("unit_tests") {
  testonly = true
  sources = [ "src/tests.cc" ]
  deps = [
    ":lib",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]
}

fuchsia_component("component") {
  component_name = "driver_playground"
  manifest = "meta/driver_playground.cml"
  deps = [ ":bin" ]
}

fuchsia_package("pkg") {
  package_name = "driver_playground"
  deps = [ ":component" ]
}

fuchsia_unittest_package("driver-playground-tests") {
  deps = [ ":unit_tests" ]
}
