# 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 even in release builds
  # TODO(SCN-1003): Set the default to false once we know why disabling
  # validation layers causes a display swapchain setup issue.
  scenic_enable_vulkan_validation = true
}

package("scenic_tests") {
  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"
    },
  ]

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

package("root_presenter") {
  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") {
  deps = [
    "ime",
  ]

  binary = "ime_service"

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

package("view_manager") {
  deps = [
    "view_manager",
  ]

  binary = "view_manager"

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

package("scenic") {
  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"
    },
  ]

  # In debug builds or if explicitly configured, include the vulkan validation
  # layers.
  if (is_debug || 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") {
  meta = [
    {
      path = rebase_path("screencap/meta/screencap.cmx")
      dest = "screencap.cmx"
    },
  ]

  deps = [
    "screencap",
  ]

  binary = "screencap"
}

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

  deps = [
    "snapshot",
  ]

  binary = "snapshot"
}

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

  deps = [
    "gltf_export",
  ]

  binary = "gltf_export"
}

package("scenic_tools") {
  deprecated_system_image = true

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

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

package("set_renderer_params") {
  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") {
  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"
    },
  ]
}
