# Copyright 2017 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("//src/lib/vulkan/image_pipe_swapchain.gni")
import("//src/lib/vulkan/layers.gni")
import("//src/ui/examples/escher/common/assets/assets.gni")
import("//src/ui/lib/escher/shaders/shaders.gni")

# NOTE: whenever a new example is added, also add it to
# //src/ui/lib/escher/test:force_waterfall_to_build_on_host
group("escher") {
  deps = [
    ":escher_rainfall",
    ":escher_waterfall",
  ]
}

package("escher_waterfall") {
  deps = [ "waterfall" ]

  binary = "waterfall"

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

  public_deps =
      vulkan_validation_layers.public_deps + image_pipe_swapchain_fb.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules +
                     image_pipe_swapchain_fb.loadable_modules

  resources =
      escher_examples_assets + escher_shaders_resources +
      vulkan_validation_layers.resources + image_pipe_swapchain_fb.resources
}

package("escher_rainfall") {
  deps = [ "rainfall" ]

  binary = "rainfall"

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

  public_deps =
      vulkan_validation_layers.public_deps + image_pipe_swapchain_fb.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules +
                     image_pipe_swapchain_fb.loadable_modules

  resources =
      [
        {
          path = "//src/ui/lib/escher/shaders/flatland/flat_main.vert"
          dest = "shaders/flatland/flat_main.vert"
        },
        {
          path = "//src/ui/lib/escher/shaders/flatland/flat_main.frag"
          dest = "shaders/flatland/flat_main.frag"
        },
      ] + vulkan_validation_layers.resources + image_pipe_swapchain_fb.resources
}
