# 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",
    "spinning_square_rs",
    "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_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("spinning_square_rs_pkg") {
  deps = [
    "spinning_square_rs",
  ]

  binary = "rust_crates/spinning_square_rs"

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