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

static_library("f2fs") {
  friend = [ "test:*" ]
  sources = [
    "bcache.cc",
    "bitmap.cc",
    "checkpoint.cc",
    "common.h",
    "data.cc",
    "dir.cc",
    "dir.h",
    "dir_entry_cache.cc",
    "dir_entry_cache.h",
    "dir_hash.cc",
    "extent_cache.cc",
    "extent_cache.h",
    "f2fs.cc",
    "f2fs_internal.h",
    "f2fs_layout.h",
    "file.cc",
    "file.h",
    "file_cache.cc",
    "file_cache.h",
    "fsck.cc",
    "gc.cc",
    "gc.h",
    "inline.cc",
    "memory_watcher.cc",
    "memory_watcher.h",
    "mkfs.cc",
    "mount.cc",
    "namei.cc",
    "node.cc",
    "node.h",
    "node_page.cc",
    "node_page.h",
    "reader.cc",
    "reader.h",
    "recovery.cc",
    "segment.cc",
    "segment.h",
    "storage_buffer.cc",
    "storage_buffer.h",
    "third_party/ext2_hash/hash.cc",
    "third_party/ext2_hash/hash.h",
    "timestamp.cc",
    "timestamp.h",
    "vnode.cc",
    "vnode.h",
    "vnode_cache.cc",
    "vnode_cache.h",
    "writeback.cc",
    "writeback.h",
  ]

  public = [
    "bcache.h",
    "f2fs.h",
    "fsck.h",
    "mkfs.h",
    "mount.h",
  ]

  public_deps = [
    "//src/lib/uuid",
    "//src/storage/lib/vfs/cpp",
    "//src/storage/lib/vfs/cpp/journal",
    "//src/storage/lib/vfs/cpp/transaction",
    "//zircon/system/ulib/bitmap",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/storage/buffer",
    "//zircon/third_party/ulib/safemath",
  ]

  deps = [
    "//sdk/lib/fit-promise",
    "//sdk/lib/syslog/cpp",
    "//zircon/system/ulib/zx",
  ]

  if (is_fuchsia) {
    sources += [
      "component_runner.cc",
      "component_runner.h",
      "inspect.cc",
      "inspect.h",
      "service/admin.cc",
      "service/admin.h",
      "service/lifecycle.cc",
      "service/lifecycle.h",
      "service/startup.cc",
      "service/startup.h",
      "vmo_manager.cc",
      "vmo_manager.h",
    ]

    public_deps += [
      "//sdk/fidl/fuchsia.memorypressure:fuchsia.memorypressure_cpp",
      "//sdk/fidl/fuchsia.net.interfaces:fuchsia.net.interfaces_hlcpp",
      "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_cpp",
      "//sdk/lib/component/incoming/cpp",
      "//sdk/lib/inspect/component/cpp",
      "//sdk/lib/sys/cpp",
      "//src/storage/fidl/fuchsia.fs.startup:fuchsia.fs.startup_cpp",
      "//src/storage/lib/block_client/cpp",
      "//zircon/system/ulib/zircon-internal",
      "//zircon/system/ulib/zx",
    ]

    deps += [
      "//sdk/fidl/fuchsia.fs:fuchsia.fs_cpp",
      "//sdk/fidl/fuchsia.io:fuchsia.io_hlcpp",
      "//sdk/lib/fdio",
      "//sdk/lib/fidl",
      "//src/lib/fuchsia-component",
      "//src/storage/lib/vfs/cpp/inspect",
      "//zircon/system/ulib/async",
      "//zircon/system/ulib/async:async-cpp",
      "//zircon/system/ulib/async-default",
      "//zircon/system/ulib/async-loop",
      "//zircon/system/ulib/async-loop:async-loop-cpp",
      "//zircon/system/ulib/async-loop:async-loop-default",
      "//zircon/system/ulib/fdio-caller",
      "//zircon/system/ulib/inspect",
      "//zircon/system/ulib/sync",
      "//zircon/system/ulib/trace",
      "//zircon/system/ulib/trace-engine",
      "//zircon/system/ulib/trace-provider",
    ]
  }
}

# The compatibility tests are expensive to build/run because they pull in a
# Linux guest image and use the hypervisor, so we keep them in a separate group
# target pulled in by a virtualization-specific builder which we run less
# frequently. See https://fxbug.dev/42073933 for more background.
group("tests-involving-guests") {
  testonly = true
  deps = [ "test/compatibility:tests" ]
}

group("tests") {
  testonly = true

  # See comment above about tests-involving-guests
  assert_no_deps = [ "test/compatibility:*" ]

  deps = [
    "bin:tests",
    "test:f2fs-fs-tests",
    "test:f2fs-slow-fs-tests",
  ]
}
