# 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("//src/lib/vulkan/layers.gni")

group("examples") {
  public_deps = [
    ":bouncing_ball",
    ":direct_input",
    ":direct_input_child",
    ":embedder",
    ":pose_buffer_presenter",
    ":scenic_dev_app",
    ":shadertoy_client",
    ":shadertoy_service",
    ":simplest_app",
    ":simplest_embedder",
    ":spinning_square_view",
    ":standalone_app",
    ":tile_view",
    ":yuv_to_image_pipe",
  ]
}

package("bouncing_ball") {
  deps = [ "bouncing_ball" ]

  binary = "bouncing_ball"

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

package("embedder") {
  deps = [
    "embedder",
    "embedder:subview",
  ]

  binaries = [
    {
      name = "embedder"
    },
    {
      name = "subview"
    },
  ]

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

package("direct_input") {
  deps = [ "lab/direct_input" ]

  binary = "direct_input"

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

package("direct_input_child") {
  deps = [ "lab/direct_input/child" ]

  binary = "direct_input_child"

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

package("pose_buffer_presenter") {
  deps = [ "lab/pose_buffer_presenter" ]

  binary = "pose_buffer_presenter"

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

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

package("scenic_dev_app") {
  deps = [ "lab/scenic_dev_app" ]

  binary = "scenic_dev_app"

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

package("shadertoy_client") {
  deps = [ "shadertoy/client" ]

  binary = "shadertoy_client"

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

package("shadertoy_service") {
  deps = [ "shadertoy/service" ]

  binary = "shadertoy_service"

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

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

package("simplest_app") {
  deps = [ "simplest_app" ]

  binary = "simplest_app"

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

# NOTE: this depends on the shadertoy_client example, which is launched by
# the simplest_embedder binary.
package("simplest_embedder") {
  deps = [
    "shadertoy/client",
    "simplest_embedder",
  ]

  binary = "simplest_embedder"

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

package("spinning_square_view") {
  deps = [ "spinning_square" ]

  binary = "spinning_square_view"

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

package("standalone_app") {
  deps = [ "standalone_app" ]

  binary = "standalone_app"

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

package("tile_view") {
  deps = [ "tile" ]

  binary = "tile_view"

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

package("yuv_to_image_pipe") {
  deps = [ "yuv_to_image_pipe" ]

  binary = "yuv_to_image_pipe"

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