# 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")

config("headers_config") {
  include_dirs = [ "." ]
}

source_set("private_headers") {
  visibility = [ "./*" ]
  sources = [
    "allocator/extent-reserver.h",
    "allocator/node-reserver.h",
    "compression/chunked.h",
    "compression/compressor.h",
    "compression/decompressor.h",
    "compression/lz4.h",
    "compression/seekable-decompressor.h",
    "compression/zstd-plain.h",
    "compression/zstd-seekable.h",
    "inspector/parser.h",
    "iterator/allocated-extent-iterator.h",
    "iterator/block-iterator-provider.h",
    "iterator/block-iterator.h",
    "iterator/extent-iterator.h",
    "iterator/vector-extent-iterator.h",
  ]
  if (is_fuchsia) {
    sources += [
      "allocator/allocator.h",
      "compression/blob-compressor.h",
      "compression/zstd-compressed-block-collection.h",
      "compression/zstd-seekable-blob-cache.h",
      "compression/zstd-seekable-blob-collection.h",
      "compression/zstd-seekable-blob.h",
      "compression/zstd-seekable-block-cache.h",
      "iterator/node-populator.h",
      "pager/page-watcher.h",
      "pager/user-pager.h",
    ]
  }
  public_configs = [ ":headers_config" ]
}

zx_library("blobfs") {
  host = true
  sdk = "source"
  sdk_headers = [
    "blobfs/common.h",
    "blobfs/host.h",
    "blobfs/format.h",
    "blobfs/mount.h",
    "blobfs/host",
    "blobfs/host/fsck.h",
    "blobfs/node-finder.h",
    "blobfs/fsck.h",
    "blobfs/cache-policy.h",
    "blobfs/mkfs.h",
    "blobfs/blobfs_inspector.h",
  ]
  sources = [
    "allocator/extent-reserver.cc",
    "allocator/node-reserver.cc",
    "blobfs-checker.cc",
    "common.cc",
    "compression-algorithm.cc",
    "compression/chunked.cc",
    "compression/decompressor.cc",
    "compression/lz4.cc",
    "compression/zstd-plain.cc",
    "compression/zstd-seekable.cc",
    "inspector/blobfs_inspector.cc",
    "inspector/parser.cc",
    "iterator/allocated-extent-iterator.cc",
    "iterator/block-iterator.cc",
    "iterator/vector-extent-iterator.cc",
  ]
  public_deps = [
    "//zircon/public/lib/bitmap",
    "//zircon/public/lib/fs",
    "//zircon/public/lib/range",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/fs/journal",
    "//zircon/system/ulib/fs/transaction",
    "//zircon/system/ulib/storage/buffer",

    # Seekable zstd include_dirs config required for all compilation units that incorporate it.
    "//third_party/zstd:zstdseek",

    # <blobfs/format.h> has #include <digest/digest.h>.
    "//zircon/public/lib/digest",
  ]
  deps = [
    ":private_headers",
    "//src/lib/chunked-compression",
    "//third_party/boringssl",
    "//third_party/zstd",
    "//third_party/zstd:zstdseek",
    "//zircon/public/lib/bitmap",
    "//zircon/public/lib/cksum",
    "//zircon/public/lib/digest",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/lz4",
    "//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/journal",
    "//zircon/system/ulib/fs/transaction",
    "//zircon/system/ulib/fvm",
    "//zircon/system/ulib/storage/buffer",
  ]
  if (is_fuchsia) {
    sources += [
      "allocator/allocator.cc",
      "blob-cache.cc",
      "blob-loader.cc",
      "blob-verifier.cc",
      "blob.cc",
      "blobfs.cc",
      "cache-node.cc",
      "compression/blob-compressor.cc",
      "compression/zstd-compressed-block-collection.cc",
      "compression/zstd-seekable-blob-cache.cc",
      "compression/zstd-seekable-blob-collection.cc",
      "compression/zstd-seekable-blob.cc",
      "compression/zstd-seekable-block-cache.cc",
      "directory.cc",
      "format.cc",
      "fsck.cc",
      "iterator/node-populator.cc",
      "metrics.cc",
      "mount.cc",
      "pager/page-watcher.cc",
      "pager/user-pager.cc",
      "query.cc",
      "runner.cc",
    ]
    public_deps += [
      "//sdk/fidl/fuchsia.blobfs:fuchsia.blobfs_llcpp",
      "//zircon/system/ulib/block-client",
      "//zircon/system/ulib/fs/metrics:metrics-cobalt",
      "//zircon/system/ulib/fs/metrics:metrics-composite-latency-event",
      "//zircon/system/ulib/fs/metrics:metrics-inspect",
    ]
    deps += [
      "//sdk/fidl/fuchsia.blobfs:fuchsia.blobfs_llcpp",
      "//sdk/fidl/fuchsia.fs:fuchsia.fs_llcpp",
      "//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-async-cpp",
      "//zircon/public/lib/fzl",
      "//zircon/public/lib/metrics",
      "//zircon/public/lib/sync",
      "//zircon/public/lib/trace",
      "//zircon/public/lib/trace-engine",
      "//zircon/public/lib/trace-provider-with-fdio",
      "//zircon/public/lib/zx",
      "//zircon/system/fidl/fuchsia-io:llcpp",
      "//zircon/system/ulib/block-client",
      "//zircon/system/ulib/fidl-utils",
      "//zircon/system/ulib/id_allocator",
    ]
  } else {
    sources += [
      "fsck-host.cc",
      "host.cc",
    ]
    deps += [ "//zircon/system/ulib/fs-host" ]
  }
  include_dirs = [ "." ]
}
