# 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")

group("ui") {
  public_deps = [
    "bouncing_ball",
    "embedder",
    "lab/direct_input",
    "lab/direct_input/child",
    "lab/pose_buffer_presenter",
    "lab/scenic_dev_app",
    "shadertoy/client",
    "shadertoy/service",
    "simplest_app",
    "simplest_embedder",
    "sketchy",
    "spinning_square",
    "standalone_app",
    "tile",
    "video_display",
    "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",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]

  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",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]

  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("sketchy_client") {
  deps = [
    "sketchy",
  ]

  binary = "sketchy_client"

  meta = [
    {
      path = rebase_path("sketchy/meta/sketchy.cmx")
      dest = "sketchy_client.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("video_display") {
  deps = [
    "video_display",
  ]

  binary = "video_display"

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

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

  binary = "yuv_to_image_pipe"

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