# Copyright 2019 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

import("//build/zircon/migrated_targets.gni")

zx_library("vm") {
  kernel = true
  sources = [
    "bootalloc.cc",
    "bootreserve.cc",
    "evictor.cc",
    "kstack.cc",
    "page.cc",
    "page_queues.cc",
    "page_source.cc",
    "page_state.cc",
    "physmap.cc",
    "pinned_vm_object.cc",
    "pmm.cc",
    "pmm_arena.cc",
    "pmm_checker.cc",
    "pmm_node.cc",
    "scanner.cc",
    "vm.cc",
    "vm_address_region.cc",
    "vm_address_region_or_mapping.cc",
    "vm_aspace.cc",
    "vm_cow_pages.cc",
    "vm_mapping.cc",
    "vm_object.cc",
    "vm_object_paged.cc",
    "vm_object_physical.cc",
    "vm_page_list.cc",
    "vmm.cc",
  ]
  deps = [
    "//zircon/kernel/lib/boot-options",
    "//zircon/kernel/lib/console",
    "//zircon/kernel/lib/counters",
    "//zircon/kernel/lib/fbl",
    "//zircon/kernel/lib/init",
    "//zircon/kernel/lib/ktl",
    "//zircon/kernel/lib/ktrace",
    "//zircon/kernel/lib/user_copy",
    "//zircon/kernel/lib/userabi",
    "//zircon/system/ulib/pretty",

    # TODO: testonly
    ":tests",
  ]
  public_deps = [
    # <vm/vm_page_list.h> has #include <ktl/unique_ptr.h>.
    "//zircon/kernel/lib/ktl:headers",

    # <vm/vm_object.h> has #include <fbl/name.h>.
    "//zircon/kernel/lib/fbl:headers",

    # <vm/vm_object.h> has #include <lib/user_copy/user_ptr.h>.
    "//zircon/kernel/lib/user_copy:headers",

    # <vm/vm_aspace.h> has #include <lib/crypto/prng.h>
    "//zircon/kernel/lib/crypto:headers",

    # "pmm_arena.h" has #include <lib/zx/status.h>.
    "//zircon/system/ulib/zxc:headers",
  ]

  # GCC figures out some cases where we have a global variable that's used as a
  # RefPtr and so appears like it might be passed to delete.  We always leak
  # the reference so it will never actually be called, but the compiler can't
  # figure that out statically so we must disable its warning.
  configs += [ ":suppress-nonheap-warning" ]
}

config("suppress-nonheap-warning") {
  visibility = [ ":*" ]
  if (is_gcc) {
    cflags = [ "-Wno-free-nonheap-object" ]
  }
}

source_set("tests") {
  sources = [
    "unittests/aspace_unittest.cc",
    "unittests/evictor_unittest.cc",
    "unittests/pmm_unittest.cc",
    "unittests/test_helper.cc",
    "unittests/vmo_unittest.cc",
    "unittests/vmpl_unittest.cc",
  ]
  deps = [ "//zircon/kernel/lib/unittest" ]
}
