# 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("//garnet/lib/magma/gnbuild/magma.gni")
import("//third_party/vulkan_loader_and_validation_layers/layers/layers.gni")

package("magma-tools") {
  deps = [
    ":tools",
  ]
  binaries = [
    {
      name = "magma_info"
    },
  ]
  meta = [
    {
      path = rebase_path("meta/magma-tools.cmx")
      dest = "magma-tools.cmx"
    },
  ]
}

package("vkcube") {
  if (have_libvulkan || use_vulkan_loader_for_tests) {
    deps = [
      "//garnet/lib/magma/tests/vkcube",
    ]

    binary = "vkcube"

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

    if (use_vulkan_loader_for_tests) {
      public_deps = vulkan_validation_layers.public_deps
      loadable_modules = vulkan_validation_layers.loadable_modules
      resources = vulkan_validation_layers.resources
    }
  }
}

# This config allows inclusion of headers via relative paths from src
config("magma_src_include_config") {
  include_dirs = [ "src" ]
}

# This config allows inclusion of headers via relative paths from tests
config("magma_tests_include_config") {
  include_dirs = [ "tests" ]
}

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