# Copyright 2018 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/components.gni")

group("tests") {
  testonly = true
  deps = [ "test:vulkan_loader_tests" ]
}

source_set("app") {
  sources = [
    "app.cc",
    "app.h",
    "goldfish_device.cc",
    "goldfish_device.h",
    "gpu_device.h",
    "icd_component.cc",
    "icd_component.h",
    "icd_list.cc",
    "icd_list.h",
    "icd_runner.cc",
    "icd_runner.h",
    "lavapipe_device.cc",
    "lavapipe_device.h",
    "loader.cc",
    "loader.h",
    "magma_dependency_injection.cc",
    "magma_dependency_injection.h",
    "magma_device.cc",
    "magma_device.h",
  ]

  public_deps = [
    ":structured_config_lib",
    "//sdk/fidl/fuchsia.component:fuchsia.component_cpp",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_cpp",
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_cpp",
    "//sdk/fidl/fuchsia.gpu.magma:fuchsia.gpu.magma_cpp",
    "//sdk/fidl/fuchsia.hardware.goldfish:fuchsia.hardware.goldfish_cpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_cpp",
    "//sdk/fidl/fuchsia.vulkan.loader:fuchsia.vulkan.loader_cpp",
    "//sdk/lib/inspect/component/cpp",
    "//src/storage/lib/vfs/cpp",
  ]

  deps = [
    "//sdk/lib/component/incoming/cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/fdio",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//src/lib/json_parser",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fbl",
  ]
}

executable("bin") {
  output_name = "vulkan_loader"

  sources = [ "main.cc" ]

  deps = [
    ":app",
    "//sdk/fidl/fuchsia.memorypressure:fuchsia.memorypressure_cpp",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_cpp",
    "//sdk/lib/component/incoming/cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//src/lib/fxl:fxl_cli",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_component_manifest("manifest") {
  component_name = "vulkan_loader"
  manifest = "meta/vulkan_loader.cml"
}

fuchsia_structured_config_values("default_config_values") {
  cm_label = ":manifest"
  values = {
    allow_magma_icds = true
    allow_goldfish_icd = true
    allow_lavapipe_icd = false
  }
}

fuchsia_structured_config_cpp_elf_lib("structured_config_lib") {
  cm_label = ":manifest"
}

fuchsia_component("vulkan_loader_cmp") {
  cm_label = ":manifest"
  deps = [ ":bin" ]
}

fuchsia_package("vulkan_loader") {
  deps = [
    ":default_config_values",
    ":vulkan_loader_cmp",
  ]
}
