# Copyright 2019 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.

##########################################
# Though under //zircon, this build file #
# is meant to be used in the Fuchsia GN  #
# build.                                 #
# See fxb/36548.                         #
##########################################

assert(!defined(zx) || zx != "/",
       "This file can only be used in the Fuchsia GN build.")

import("//build/unification/zx_library.gni")

zx_library("minfs") {
  sdk = "source"
  sdk_headers = [
    "minfs/fsck.h",
    "minfs/bcache.h",
    "minfs/superblock.h",
    "minfs/inspector.h",
    "minfs/writeback.h",
    "minfs/transaction_limits.h",
    "minfs/allocator_reservation.h",
    "minfs/format.h",
    "minfs/mutex.h",
    "minfs/minfs.h",
    "minfs/host.h",
    "minfs/metrics.h",
    "minfs/pending_work.h",
    "minfs/command_handler.h",
    "minfs/minfs_inspector.h",
  ]
  host = true
  static = true
  sources = [
    "allocator/allocator_common.cc",
    "allocator/allocator_reservation.cc",
    "allocator/metadata.cc",
    "allocator/storage_common.cc",
    "buffer_view.cc",
    "directory.cc",
    "file.cc",
    "fsck.cc",
    "lazy_buffer.cc",
    "lazy_reader.cc",
    "metrics.cc",
    "minfs.cc",
    "resizeable_array_buffer.cc",
    "transaction_limits.cc",
    "vnode.cc",
    "vnode_mapper.cc",
    "writeback.cc",
  ]
  if (is_fuchsia) {
    sources += [ "resizeable_vmo_buffer.cc" ]
  } else {
    sources += [
      "allocator/allocator_host.cc",
      "allocator/inode_manager_host.cc",
      "allocator/storage_host.cc",
      "bcache_host.cc",
      "host.cc",
      "superblock_host.cc",
    ]
  }
  public_deps = [
    "//zircon/public/lib/bitmap",

    #"//zircon/system/ulib/disk_inspector",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fs",
    "//zircon/system/ulib/fs/journal",
    "//zircon/system/ulib/fs/transaction",

    # <minfs/bcache.h> has #include <fvm/client.h>.
    "//zircon/public/lib/operation",
    "//zircon/system/ulib/fvm",
  ]
  deps = [
    "//zircon/public/lib/bitmap",
    "//zircon/public/lib/cksum",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/fs",
    "//zircon/public/lib/operation",
    "//zircon/public/lib/range",
    "//zircon/public/lib/safemath",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/disk_inspector",
    "//zircon/system/ulib/fs/transaction",
    "//zircon/system/ulib/storage/buffer",
  ]
  if (is_fuchsia) {
    public_deps += [
      "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c",
      "//zircon/public/lib/fzl",
      "//zircon/public/lib/zx",
      "//zircon/system/fidl/fuchsia-hardware-block:c",
      "//zircon/system/fidl/fuchsia-minfs:llcpp",
      "//zircon/system/ulib/block-client",
      "//zircon/system/ulib/storage-metrics",
    ]
    deps += [
      "//zircon/public/lib/async",
      "//zircon/public/lib/async-cpp",
      "//zircon/public/lib/async-default",
      "//zircon/public/lib/async-loop",
      "//zircon/public/lib/async-loop-cpp",
      "//zircon/public/lib/async-loop-default",
      "//zircon/public/lib/fdio",
      "//zircon/public/lib/fidl",
      "//zircon/public/lib/fzl",
      "//zircon/public/lib/operation",
      "//zircon/public/lib/sync",
      "//zircon/public/lib/trace",
      "//zircon/public/lib/trace-engine",
      "//zircon/public/lib/zx",
      "//zircon/system/fidl/fuchsia-device:c",
      "//zircon/system/fidl/fuchsia-device:llcpp",
      "//zircon/system/fidl/fuchsia-io:llcpp",
      "//zircon/system/fidl/fuchsia-minfs:llcpp",
      "//zircon/system/ulib/fdio-caller",
      "//zircon/system/ulib/fidl-utils",
      "//zircon/system/ulib/fs/journal",
      "//zircon/system/ulib/fvm",
      "//zircon/system/ulib/storage-metrics",
    ]
    sources += [
      "allocator/allocator.cc",
      "allocator/inode_manager.cc",
      "allocator/storage.cc",
      "bcache.cc",
      "inspector.cc",
      "inspector/command_handler.cc",
      "inspector/disk_struct.cc",
      "inspector/loader.cc",
      "inspector/minfs_inspector.cc",
      "inspector/parser.cc",
      "inspector_inode.cc",
      "inspector_inode_table.cc",
      "inspector_superblock.cc",
      "superblock.cc",
      "vmo_indirect.cc",
      "vnode_allocation.cc",
    ]
  } else {
    public_deps += [ "//zircon/public/lib/zircon-headers" ]
  }
  include_dirs = [ "." ]
}
