# 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") {
  sources = [
    "anonymous_page_requester.cc",
    "bootalloc.cc",
    "bootreserve.cc",
    "evictor.cc",
    "kstack.cc",
    "loan_sweeper.cc",
    "page.cc",
    "page_queues.cc",
    "page_source.cc",
    "page_state.cc",
    "physical_page_borrowing_config.cc",
    "physical_page_provider.cc",
    "physmap.cc",
    "pinned_vm_object.cc",
    "pmm.cc",
    "pmm_arena.cc",
    "pmm_checker.cc",
    "pmm_node.cc",
    "ppb_command.cc",
    "scanner.cc",
    "stack_owned_loaned_pages_interval.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/heap/cmpctmalloc:cmpctmalloc_headers",
    "//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" ]
}
