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

declare_args() {
  msd_intel_enable_mapping_cache = !is_debug
}

source_set("src") {
  public_configs = [ "$msd_intel_gen_build_root:msd_src_include_config" ]

  sources = [
    "address_space.cc",
    "address_space.h",
    "cache_config.cc",
    "cache_config.h",
    "command_buffer.cc",
    "command_buffer.h",
    "engine_command_streamer.cc",
    "engine_command_streamer.h",
    "global_context.cc",
    "global_context.h",
    "gpu_mapping.cc",
    "gpu_mapping.h",
    "gtt.h",
    "gtt_shim.cc",
    "interrupt_manager.h",
    "interrupt_manager_shim.cc",
    "msd_intel_buffer.cc",
    "msd_intel_buffer.h",
    "msd_intel_connection.cc",
    "msd_intel_connection.h",
    "msd_intel_context.cc",
    "msd_intel_context.h",
    "msd_intel_device.cc",
    "msd_intel_device.h",
    "msd_intel_device_dump.cc",
    "msd_intel_driver.cc",
    "msd_intel_driver.h",
    "msd_intel_pci_device.h",
    "msd_intel_pci_device_shim.cc",
    "msd_intel_semaphore.cc",
    "pagetable.h",
    "ppgtt.cc",
    "ppgtt.h",
    "registers.h",
    "render_init_batch.cc",
    "render_init_batch.h",
    "render_init_batch_gen9.cc",
    "ringbuffer.cc",
    "ringbuffer.h",
    "scheduler.cc",
    "scheduler.h",
    "types.h",
  ]

  deps = [
    "$magma_build_root/src/magma_util:allocator",
    "$magma_build_root/src/magma_util:command_buffer",
    "$magma_build_root/src/magma_util:common",
    "$magma_build_root/src/magma_util:registers",
    "$magma_build_root/src/magma_util:semaphore_port",
    "$magma_build_root/src/magma_util:thread",
    "$magma_build_root/src/magma_util/platform:buffer",
    "$magma_build_root/src/magma_util/platform:bus_mapper",
    "$magma_build_root/src/magma_util/platform:device",
    "$magma_build_root/src/magma_util/platform:event",
    "$magma_build_root/src/magma_util/platform:semaphore",
    "$magma_build_root/src/magma_util/platform:thread",
    "$magma_build_root/src/magma_util/platform:trace",
    "$zircon_build_root/public/lib/ddk",
    "../include",
  ]

  public_deps = [
    "//zircon/public/banjo/ddk-protocol-intelgpucore",
  ]

  defines = []
  if (msd_intel_enable_mapping_cache) {
    defines += [ "MSD_INTEL_ENABLE_MAPPING_CACHE" ]
  }
}
