# Copyright 2017 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("//build/sdk/sdk_atom.gni")
import("//garnet/lib/magma/gnbuild/magma.gni")
import("//garnet/lib/vulkan/image_pipe_swapchain.gni")
import("//third_party/vulkan_loader_and_validation_layers/layers/layers.gni")

group("image_pipe_swapchain") {
  public_deps = [
    "src/swapchain",
  ]
}

sdk_atom("vulkan_layers") {
  id = "sdk://pkg/vulkan_layers"

  category = "partner"

  files = []

  resources =
      vulkan_validation_layers.resources + image_pipe_swapchain.resources
  loadable_modules = vulkan_validation_layers.loadable_modules +
                     image_pipe_swapchain.loadable_modules
  non_sdk_deps =
      vulkan_validation_layers.public_deps + image_pipe_swapchain.public_deps

  sdk_resources = []
  foreach(resource, resources) {
    destination = "pkg/vulkan_layers/data/" + resource.dest
    files += [
      {
        source = resource.path
        dest = destination
      },
    ]
    sdk_resources += [ destination ]
  }

  sdk_binaries = []
  foreach(loadable_module, loadable_modules) {
    destination = "arch/$target_cpu/dist/" + loadable_module.name
    files += [
      {
        source = "$root_out_dir/" + loadable_module.name
        dest = destination
      },
    ]
    sdk_binaries += [ destination ]
  }

  meta = {
    dest = "pkg/vulkan_layers/meta.json"
    schema = "loadable_module"
    value = {
      type = "loadable_module"
      name = "vulkan_layers"
      root = "pkg/vulkan_layers"
      resources = []
      resources = sdk_resources
      binaries = {
      }
      if (target_cpu == "arm64") {
        binaries.arm64 = sdk_binaries
      } else if (target_cpu == "x64") {
        binaries.x64 = sdk_binaries
      } else {
        assert(false, "Unknown CPU type: %target_cpu")
      }
    }
  }
}

package("image-pipe-swapchain-tests") {
  testonly = true

  deps = [
    ":image_pipe_swapchain",
    "tests/unit:test_image_pipe_swapchain",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]
  binary = "test_image_pipe_swapchain"
  meta = [
    {
      path = rebase_path("meta/image-pipe-swapchain-tests.cmx")
      dest = "image-pipe-swapchain-tests.cmx"
    },
  ]
  public_deps =
      vulkan_validation_layers.public_deps + image_pipe_swapchain.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules +
                     image_pipe_swapchain.loadable_modules
  resources =
      vulkan_validation_layers.resources + image_pipe_swapchain.resources
}

package("vkcube_on_scenic") {
  testonly = true

  deps = [
    "tests/vkcube:vkcube_on_scenic",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]
  binary = "vkcube_on_scenic"

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

  public_deps =
      vulkan_validation_layers.public_deps + image_pipe_swapchain.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules +
                     image_pipe_swapchain.loadable_modules
  resources =
      [
        {
          path = rebase_path("tests/vkcube/bbb_frame.yuv")
          dest = "bbb_frame.yuv"
        },
      ] + vulkan_validation_layers.resources + image_pipe_swapchain.resources
}

package("vkcube_on_fb") {
  testonly = true

  deps = [
    "tests/vkcube:vkcube_on_fb",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]
  binary = "vkcube_on_fb"

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

  public_deps =
      vulkan_validation_layers.public_deps + image_pipe_swapchain_fb.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules +
                     image_pipe_swapchain_fb.loadable_modules
  resources =
      [
        {
          path = rebase_path("tests/vkcube/bbb_frame.yuv")
          dest = "bbb_frame.yuv"
        },
      ] + vulkan_validation_layers.resources + image_pipe_swapchain_fb.resources
}
