# Copyright 2020 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/rust/rustc_binary.gni")
import("//build/rust/rustc_fuzzer.gni")
import("//build/rust/rustc_library.gni")
import("//src/sys/build/components.gni")

fatfs_deps = [
  "//sdk/fidl/fuchsia.fs:fuchsia.fs-rustc",
  "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
  "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
  "//src/lib/fidl/rust/fidl",
  "//src/lib/fuchsia-async",
  "//src/lib/storage/block_client/rust:remote-block-device",
  "//src/lib/storage/vfs/rust:vfs",
  "//src/lib/syslog/rust:syslog",
  "//src/lib/zircon/rust:fuchsia-zircon",
  "//third_party/rust_crates:anyhow",
  "//third_party/rust_crates:async-trait",
  "//third_party/rust_crates:chrono",
  "//third_party/rust_crates:fatfs",
  "//third_party/rust_crates:futures",
  "//third_party/rust_crates:scopeguard",
  "//third_party/rust_crates:static_assertions",
]

fatfs_sources = [
  "src/directory.rs",
  "src/file.rs",
  "src/filesystem.rs",
  "src/lib.rs",
  "src/node.rs",
  "src/refs.rs",
  "src/types.rs",
  "src/util.rs",
]

rustc_library("lib") {
  edition = "2018"
  with_unit_tests = true
  name = "fuchsia_fatfs"

  deps = fatfs_deps
  sources = fatfs_sources
}

fuchsia_component("fuchsia-fatfs-test") {
  testonly = true
  deps = [ ":lib_test" ]
  manifest = "meta/fuchsia_fatfs_lib_test.cml"
}

fuchsia_test_package("fuchsia-fatfs-tests") {
  test_components = [ ":fuchsia-fatfs-test" ]
}

rustc_fuzzer("fat-fuzzer") {
  rustfunction = "fuzz_fatfs"

  corpus = "corpus"
  options = [
    "-rss_limit_mb=3072",
    # Set a reasonably low per-task timeout in case the filesystem has problems that cause infinite
    # loops in the fuzzing code (e.g. cycles in the directory tree).
    "-timeout=60",
  ]

  sources = [ "src/fuzzer.rs" ] + fatfs_sources
  deps = fatfs_deps

  non_rust_deps = [ "//zircon/system/ulib/syslog" ]
}

fuzzers_package("fuchsia-fatfs-fuzzer") {
  rust_fuzzers = [ ":fat-fuzzer" ]
}

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-fatfs-fuzzer",
    ":fuchsia-fatfs-tests",
    "//src/storage/fuchsia-fatfs/mounter:tests",
  ]
}

rustc_binary("fatfs") {
  edition = "2018"

  deps = [
    ":lib",
    "//sdk/fidl/fuchsia.fs:fuchsia.fs-rustc",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/storage/block_client/rust:remote-block-device",
    "//src/lib/storage/vfs/rust:vfs",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
  ]

  sources = [ "src/main.rs" ]
}

fuchsia_package("fuchsia-fatfs") {
  deps = [ "//src/storage/fuchsia-fatfs/mounter:fatfs-mounter" ]
}
