# 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") {
  deprecated_bare_package_url = "//build"

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

package("vkcube") {
  deprecated_bare_package_url = "//build"

  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",
  ]
}
