# 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 = [
    "hello_base_view",
    "hello_input",
    "hello_input/child",
    "hello_pose_buffer",
    "hello_scenic",
    "hello_stereo",
    "hello_views",
    "shadertoy/client",
    "shadertoy/service",
    "shapes",
    "sketchy",
    "spinning_square",
    "tile",
    "video_display",
  ]
}

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

  binary = "hello_base_view"

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

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

  binary = "hello_input"

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

package("hello_input_child") {
  deps = [
    "hello_input/child",
  ]

  binary = "hello_input_child"

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

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

  binary = "hello_scenic"

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

package("hello_views") {
  deps = [
    "hello_views",
    "hello_views:hello_subview",
  ]

  binaries = [
    {
      name = "hello_views"
    },
    {
      name = "hello_subview"
    },
  ]

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

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

  binary = "hello_pose_buffer"

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

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

  binary = "hello_pose_buffer_provider"

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

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

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

  binary = "hello_stereo"

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

  binary = "shapes_view"

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

  binary = "bouncing_ball"

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