# 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("//build/test/test_package.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"
      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")
      }
    }
  }
}

test_package("image-pipe-swapchain-tests") {
  deps = [
    ":image_pipe_swapchain",
    "tests/unit:test_image_pipe_swapchain",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]

  tests = [
    {
      name = "test_image_pipe_swapchain"
      dest = "image-pipe-swapchain-tests"
      environments = magma_hardware_envs
    },
  ]
  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("vklatency_on_scenic") {
  testonly = true

  deps = [
    "tests/vklatency:vklatency_on_scenic",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]
  binary = "vklatency_on_scenic"

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

package("vulkaninfo") {
  deps = [
    ":image_pipe_swapchain",
    "//third_party/vulkan_loader_and_validation_layers/demos:vulkaninfo_bin",
    "//third_party/vulkan_loader_and_validation_layers/layers",
  ]

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

  binary = "vulkaninfo"

  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
}
