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

import("//build/components.gni")
import("//build/components/fuchsia_unittest_component.gni")
import("//build/fidl/fidl.gni")
import("//build/fuzz.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_fuzzer.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_macro.gni")
import("//src/storage/fs_test/suite.gni")
import("//src/storage/testing/driver_test_realm.gni")
import("//tools/cmc/build/cmc.gni")

fxfs_deps = [
  ":fxfs_macros",
  "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
  "//src/lib/diagnostics/inspect/rust",
  "//src/lib/fuchsia-async",
  "//src/lib/mundane",
  "//src/storage/fxfs/crypto",
  "//src/storage/fxfs/trace",
  "//src/storage/lib/fsverity-merkle",
  "//src/storage/lib/storage_device",
  "//src/storage/type-fprint:fprint",
  "//third_party/rust_crates:anyhow",
  "//third_party/rust_crates:assert_matches",
  "//third_party/rust_crates:async-trait",
  "//third_party/rust_crates:bincode",
  "//third_party/rust_crates:bit-vec",
  "//third_party/rust_crates:byteorder",
  "//third_party/rust_crates:either",
  "//third_party/rust_crates:event-listener",
  "//third_party/rust_crates:futures",
  "//third_party/rust_crates:linked-hash-map",
  "//third_party/rust_crates:num-traits",
  "//third_party/rust_crates:once_cell",
  "//third_party/rust_crates:rand",
  "//third_party/rust_crates:rustc-hash",
  "//third_party/rust_crates:scopeguard",
  "//third_party/rust_crates:serde",
  "//third_party/rust_crates:static_assertions",
  "//third_party/rust_crates:thiserror",
  "//third_party/rust_crates:tracing",
  "//third_party/rust_crates:uuid",
  "//third_party/rust_crates:zerocopy",
]

fxfs_test_deps = [
  "//src/lib/fuchsia",
  "//src/storage/fxfs/crypto/insecure",
]

fxfs_sources = [
  "src/checksum.rs",
  "src/debug_assert_not_too_long.rs",
  "src/drop_event.rs",
  "src/errors.rs",
  "src/filesystem.rs",
  "src/fsck.rs",
  "src/fsck/errors.rs",
  "src/fsck/store_scanner.rs",
  "src/fsck/tests.rs",
  "src/lib.rs",
  "src/log.rs",
  "src/lsm_tree.rs",
  "src/lsm_tree/cache.rs",
  "src/lsm_tree/merge.rs",
  "src/lsm_tree/simple_persistent_layer.rs",
  "src/lsm_tree/skip_list_layer.rs",
  "src/lsm_tree/types.rs",
  "src/metrics.rs",
  "src/object_handle.rs",
  "src/object_store.rs",
  "src/object_store/allocator.rs",
  "src/object_store/allocator/merge.rs",
  "src/object_store/allocator/strategy.rs",
  "src/object_store/caching_object_handle.rs",
  "src/object_store/data_object_handle.rs",
  "src/object_store/directory.rs",
  "src/object_store/extent_record.rs",
  "src/object_store/flush.rs",
  "src/object_store/graveyard.rs",
  "src/object_store/journal.rs",
  "src/object_store/journal/bootstrap_handle.rs",
  "src/object_store/journal/checksum_list.rs",
  "src/object_store/journal/reader.rs",
  "src/object_store/journal/super_block.rs",
  "src/object_store/journal/writer.rs",
  "src/object_store/key_manager.rs",
  "src/object_store/merge.rs",
  "src/object_store/object_manager.rs",
  "src/object_store/object_record.rs",
  "src/object_store/project_id.rs",
  "src/object_store/store_object_handle.rs",
  "src/object_store/transaction.rs",
  "src/object_store/tree.rs",
  "src/object_store/tree_cache.rs",
  "src/object_store/volume.rs",
  "src/range.rs",
  "src/round.rs",
  "src/serialized_types.rs",
  "src/serialized_types/test_traits.rs",
  "src/serialized_types/tests.rs",
  "src/serialized_types/traits.rs",
  "src/serialized_types/types.rs",
  "src/testing.rs",
  "src/testing/fake_object.rs",
  "src/testing/writer.rs",
]

if (is_fuchsia) {
  fxfs_deps += [
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:scopeguard",
  ]
  if (is_debug) {
    fxfs_deps += [ "//src/lib/debug/rust" ]
  }
  fxfs_test_deps += [
    "//src/storage/blobfs/bin:blobfs-component",
    "//third_party/zstd",
  ]
}

rustc_macro("fxfs_macros") {
  edition = "2021"
  name = "fxfs_macros"
  deps = [
    "//third_party/rust_crates:proc-macro2",
    "//third_party/rust_crates:quote",

    # FIXME(https://fxbug.dev/332277415): Please update to syn 2.x.
    # "//third_party/rust_crates:syn",
    "//third_party/rust_crates:syn-v1_0_98",
  ]
  source_root = "macros/macros.rs"
  sources = [ "macros/macros.rs" ]
}

rustc_library("lib") {
  edition = "2021"
  with_unit_tests = true
  name = "fxfs"

  deps = fxfs_deps
  sources = fxfs_sources
  test_deps = fxfs_test_deps
}

fuchsia_unittest_component("fxfs-test") {
  deps = [ ":lib_test" ]
}

fuchsia_unittest_component("fxfs-crypto-test") {
  deps = [ "crypto:crypto_test" ]
}

fuchsia_unittest_component("fxfs-make-blob-image-test") {
  deps = [
    "make-blob-image:make-blob-image_test",
    "//src/sys/test_runners:tmp_storage",
  ]
}

storage_driver_test_realm_v2_component("fxfs-platform-test") {
  deps = [ "platform:platform_test" ]
  manifest = "platform/meta/fxfs-platform-test.cml"
}

fuchsia_test_package("fxfs-tests") {
  test_components = [
    ":fxfs-test",
    ":fxfs-crypto-test",
    ":fxfs-make-blob-image-test",
    ":fxfs-platform-test",
  ]
  test_specs = {
    log_settings = {
      # We expect some tests to produce ERROR logs
      max_severity = "ERROR"
    }
  }
}

rustc_binary("fxfs") {
  edition = "2021"
  deps = [
    ":lib",
    "//src/lib/diagnostics/inspect/runtime/rust",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/diagnostics/log/rust",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/trace/rust:trace-provider",
    "//src/storage/fxfs/platform",
    "//third_party/rust_crates:anyhow",
  ]
  sources = [ "src/main.rs" ]

  configs += [
    # Optimize for size
    "//build/config/rust:bootfs",
  ]

  # Add thinlto config if lto variants are not used.
  if (!is_lto_variant) {
    # Optimize for speed (Fxfs is split into several crates; apply optimizations across them).
    configs += [ "//build/config/lto:thinlto" ]
  }
}

fuchsia_component("fxfs_component") {
  component_name = "fxfs"
  deps = [ ":fxfs" ]
  manifest = "meta/fxfs.cml"
}

fuchsia_package("package") {
  package_name = "fxfs"
  deps = [ ":fxfs_component" ]
}

fuchsia_shell_package("fxfs-bin") {
  deps = [ ":fxfs" ]
}

fs_test_config("fxfs") {
  is_multi_volume = true

  # See MAX_FILE_SIZE in filesystem.rs.
  max_file_size = 9223372036854771712
  supports_fsck_after_every_transaction = true

  # TODO(https://fxbug.dev/42063349) Add support for block sizes greater than the page size.
  max_block_size = 4096
  supports_hard_links = true
  supports_inspect = true
  supports_resize = true
  supports_mmap = true
  supports_mmap_shared_write = true
  supports_shutdown_on_no_connections = true
  timestamp_granularity = 1
  disk_format = 12  # See //src/storage/lib/fs_management/cpp/format.h
  uses_crypt = true

  options = [
    {
      description = "Fxfs"
      use_fvm = false
      has_min_volume_size = true

      device_block_count = 24576
      device_block_size = 512
    },
  ]
}

test("fxfs-interop-fs") {
  sources = [ "test/fs_test.cc" ]
  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io_hlcpp",
    "//sdk/lib/component/incoming/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//src/storage/fs_test",
    "//src/storage/fs_test:test_crypt_service",
    "//src/storage/fxfs",
    "//src/storage/lib/block_client/cpp",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fdio-caller",
  ]

  # TODO(https://fxbug.dev/42085293): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-vla-cxx-extension" ]
}

storage_driver_test_realm_v2_component("fxfs-interop-fs-tests") {
  deps = [
    ":fxfs-interop-fs",
    ":test_fxfs_component_manifest_shard",
  ]
}

expect_includes("test_fxfs_component_manifest_shard") {
  testonly = true
  includes = [ "meta/test_fxfs.shard.cml" ]
}

fs_test_suite("fxfs") {
  deps = [
    ":fxfs_component",
    ":fxfs_fs_test_config",
    "//src/storage/fxfs",
    "//src/storage/fxfs-crypt",
  ]
  extra_components = [ ":fxfs-interop-fs-tests" ]
  component_deps = [
    ":test_fxfs_component_manifest_shard",
    "//src/storage/fs_test:test_crypt_service",
  ]
}

slow_fs_test_suite("fxfs") {
  deps = [
    ":fxfs_component",
    ":fxfs_fs_test_config",
    "//src/storage/fxfs",
    "//src/storage/fxfs-crypt",
  ]
  component_deps = [
    ":test_fxfs_component_manifest_shard",
    "//src/storage/fs_test:test_crypt_service",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":fxfs-fs-tests",
    ":fxfs-fuzzers",
    ":fxfs-slow-fs-tests",
    ":fxfs-tests",
    ":fxfs_component",
    ":lib_test($host_toolchain)",
    "//src/storage/fxfs/tools:tests",
    "//src/storage/fxfs/trace:tests",
  ]
}

#################
## Fuzzers
#################

_fuzzers = [
  "fuzz_lsm_tree_actions",
  "fuzz_journal",
  "fuzz_journal_bytes",
]

foreach(fuzzer, _fuzzers) {
  rustc_fuzzer(fuzzer) {
    edition = "2021"
    deps = fxfs_deps + [
             "//src/lib/fuzzing/rust:fuzz",
             "//third_party/rust_crates:arbitrary",
             "//third_party/rust_crates:futures",
           ]
    sources = fxfs_sources
  }

  fuchsia_fuzzer_component("${fuzzer}_component") {
    manifest = "meta/${fuzzer}.cml"
    deps = [ ":$fuzzer" ]
  }
}

fuchsia_fuzzer_package("fxfs-fuzzers") {
  rust_fuzzer_components = []
  foreach(fuzzer, _fuzzers) {
    rust_fuzzer_components += [ ":${fuzzer}_component" ]
  }
}

group("fuzzers") {
  testonly = true
  deps = [ ":fxfs-fuzzers" ]
}
