# Copyright 2016 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/fidl/fidl.gni")

group("fidl") {
  testonly = true
  deps = [
    ":app_client",
    ":app_client_unittest",
    ":app_client_unittest_fidl",
    ":array_to_string",
    ":clone",
    ":environment",
    ":json_xdr",
    ":json_xdr_unittest",
    ":json_xdr_unittest_fidl",
    ":proxy",
    ":single_service_app",
    ":unittests",
    ":view_host",
  ]
}

source_set("app_client") {
  sources = [
    "app_client.cc",
    "app_client.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//sdk/fidl/fuchsia.modular",
  ]

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/svc/cpp",
    "//peridot/lib/common:async_holder",
    "//src/lib/fxl",
  ]
}

source_set("array_to_string") {
  sources = [
    "array_to_string.h",
  ]

  deps = [
    "//sdk/lib/fidl/cpp",
  ]
}

source_set("json_xdr") {
  sources = [
    "json_xdr.cc",
    "json_xdr.h",
  ]

  # MUST be public so clients pick up the defines from
  # //third_party/rapidjson:rapidjson_config
  public_deps = [
    "//peridot/lib/rapidjson",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
    "//third_party/rapidjson",
  ]
}

source_set("proxy") {
  sources = [
    "proxy.cc",
    "proxy.h",
  ]

  deps = [
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

source_set("clone") {
  sources = [
    "clone.h",
  ]
  deps = [
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

source_set("environment") {
  sources = [
    "environment.cc",
    "environment.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
  ]

  deps = [
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

source_set("single_service_app") {
  sources = [
    "single_service_app.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]
}

source_set("view_host") {
  sources = [
    "view_host.cc",
    "view_host.h",
  ]

  public_deps = [
    "//garnet/public/lib/ui/base_view/cpp",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.views",
  ]

  deps = [
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/fxl",
  ]
}

fidl("app_client_unittest_fidl") {
  testonly = true

  name = "test.peridot.lib.fidl.appclient"

  sources = [
    "app_client_unittest.fidl",
  ]
}

group("unittests") {
  testonly = true

  deps = [
    ":app_client_unittest",
    ":json_xdr_unittest",
  ]
}

source_set("app_client_unittest") {
  testonly = true

  sources = [
    "app_client_unittest.cc",
  ]

  deps = [
    ":app_client",
    ":app_client_unittest_fidl",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/component/cpp/testing:fake_launcher",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/gtest",
    "//src/lib/fxl",
    "//third_party/googletest:gtest",
  ]
}

fidl("json_xdr_unittest_fidl") {
  testonly = true

  name = "test.peridot.lib.fidl.jsonxdr"

  sources = [
    "json_xdr_unittest.fidl",
  ]
}

source_set("json_xdr_unittest") {
  testonly = true

  sources = [
    "json_xdr_unittest.cc",
  ]

  deps = [
    ":json_xdr",
    ":json_xdr_unittest_fidl",
    "//third_party/googletest:gtest",
  ]
}
