# 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/package.gni")
import("//third_party/vulkan_loader_and_validation_layers/layers/layers.gni")

declare_args() {
  # Include the vulkan validation layers in scenic.
  scenic_enable_vulkan_validation = is_debug
}

package("scenic_tests") {
  deprecated_bare_package_url = "//build"

  testonly = true

  deps = [
    "input/tests",
    "input_reader/tests",
    "presentation_mode/tests",
    "view_manager/tests",
    "//garnet/lib/ui/gfx/tests",
    "//garnet/lib/ui/input/tests",
    "//garnet/lib/ui/scenic/tests",
    "//garnet/public/lib/ui/geometry/cpp:tests",
  ]

  tests = [
    {
      name = "gfx_apptests"
    },
    {
      name = "gfx_unittests"
    },
    {
      name = "geometry_util_unittests"
    },
    {
      name = "input_apptests"
    },
    {
      name = "input_unittests"
    },
    {
      name = "input_tool_unittests"
    },
    {
      name = "presentation_mode_unittests"
    },
    {
      name = "scenic_unittests"
    },
    {
      name = "view_manager_apptests"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/scenic_tests.cmx")
      dest = "scenic_tests.cmx"
    },
    {
      path = rebase_path("meta/gfx_apptests.cmx")
      dest = "gfx_apptests.cmx"
    },
    {
      path = rebase_path("meta/gfx_unittests.cmx")
      dest = "gfx_unittests.cmx"
    },
    {
      path = rebase_path("meta/input_unittests.cmx")
      dest = "input_unittests.cmx"
    },
    {
      path = rebase_path("meta/scenic_unittests.cmx")
      dest = "scenic_unittests.cmx"
    },
    {
      path = rebase_path("meta/view_manager_apptests.cmx")
      dest = "view_manager_apptests.cmx"
    },
  ]

  public_deps = vulkan_validation_layers.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules
  resources = vulkan_validation_layers.resources
}

package("root_presenter") {
  deprecated_bare_package_url = "//build"

  deps = [
    "root_presenter",
  ]

  binary = "root_presenter"

  resources = [
    {
      path = rebase_path("root_presenter/resources/cursor32.png")
      dest = "cursor32.png"
    },
  ]

  meta = [
    {
      path = rebase_path("root_presenter/meta/root_presenter.cmx")
      dest = "root_presenter.cmx"
    },
  ]
}

package("ime_service") {
  deprecated_bare_package_url = "//build"

  deps = [
    "ime",
  ]

  binary = "ime_service"

  meta = [
    {
      path = rebase_path("ime/meta/ime_service.cmx")
      dest = "ime_service.cmx"
    },
  ]
}

package("view_manager") {
  deprecated_bare_package_url = "//build"

  deps = [
    "view_manager",
  ]

  binary = "view_manager"

  meta = [
    {
      path = rebase_path("view_manager/meta/view_manager.cmx")
      dest = "view_manager.cmx"
    },
  ]
}

package("scenic") {
  deprecated_bare_package_url = "//build"

  deps = [
    "scenic",
  ]

  binary = "scenic"

  meta = [
    {
      path = rebase_path("scenic/meta/scenic.cmx")
      dest = "scenic.cmx"
    },
  ]

  resources = [
    {
      path = "//garnet/public/lib/escher/shaders/model_renderer/main.vert"
      dest = "shaders/model_renderer/main.vert"
    },
  ]

  # If configured, include the vulkan validation layers.
  if (scenic_enable_vulkan_validation) {
    loadable_modules = vulkan_validation_layers.loadable_modules
    public_deps = vulkan_validation_layers.public_deps
    resources += vulkan_validation_layers.resources
  }
}

package("screencap") {
  deprecated_bare_package_url = "//build"

  meta = [
    {
      path = rebase_path("screencap/meta/screencap.cmx")
      dest = "screencap.cmx"
    },
  ]

  deps = [
    "screencap",
  ]

  binary = "screencap"
}

package("snapshot") {
  deprecated_bare_package_url = "//build"

  meta = [
    {
      path = rebase_path("snapshot/meta/snapshot.cmx")
      dest = "snapshot.cmx"
    },
  ]

  deps = [
    "snapshot",
  ]

  binary = "snapshot"
}

package("gltf_export") {
  deprecated_bare_package_url = "//build"

  meta = [
    {
      path = rebase_path("gltf_export/meta/gltf_export.cmx")
      dest = "gltf_export.cmx"
    },
  ]

  deps = [
    "gltf_export",
  ]

  binary = "gltf_export"
}

package("scenic_tools") {

  deps = [
    "gltf_export",
    "input",
    "present_view",
    "print_input",
    "screencap",
    "set_renderer_params_HACK:set_renderer_params",
    "set_root_view",
    "snapshot",
  ]

  binaries = [
    {
      name = "gltf_export"
      shell = true
    },
    {
      name = "input"
      shell = true
    },
    {
      name = "set_root_view"
      shell = true
    },
    {
      name = "set_renderer_params"
      shell = true
    },
    {
      name = "present_view"
      shell = true
    },
    {
      name = "print_input"
      shell = true
    },
    {
      name = "screencap"
      shell = true
    },
    {
      name = "snapshot"
      shell = true
    },
  ]
}

package("set_renderer_params") {
  deprecated_bare_package_url = "//build"

  deps = [
    "set_renderer_params_HACK:set_renderer_params",
  ]

  binaries = [
    {
      name = "set_renderer_params"
    },
  ]

  meta = [
    {
      path =
          rebase_path("set_renderer_params_HACK/meta/set_renderer_params.cmx")
      dest = "set_renderer_params.cmx"
    },
  ]
}

package("set_root_view") {
  deprecated_bare_package_url = "//build"

  deps = [
    "set_root_view",
  ]

  binaries = [
    {
      name = "set_root_view"
    },
  ]

  meta = [
    {
      path = rebase_path("set_root_view/meta/set_root_view.cmx")
      dest = "set_root_view.cmx"
    },
  ]
}
