# 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",
    "lab/pose_buffer_provider",
    "lab/scenic_dev_app",
    "lab/stereo_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") {
  deps = [
    "lab/pose_buffer",
  ]

  binary = "pose_buffer"

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

package("pose_buffer_provider") {
  deps = [
    "lab/pose_buffer_provider",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]

  binary = "pose_buffer_provider"

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

  binary = "stereo_app"

  meta = [
    {
      path = rebase_path("meta/ui_example.cmx")
      dest = "stereo_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"
    },
  ]
}
