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

if (is_fuchsia) {
  zx_library("fs-management") {
    sdk = "shared"
    sdk_headers = [
      "fs-management/admin.h",
      "fs-management/format.h",
      "fs-management/fvm.h",
      "fs-management/launch.h",
      "fs-management/mount.h",
    ]
    shared = true
    sources = [
      "admin.cc",
      "fsck.cc",
      "fvm.cc",
      "launch.cc",
      "mkfs.cc",
      "mount.cc",
    ]
    public_deps = [ "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c" ]
    deps = [
      "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
      "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c",
      "//third_party/boringssl",
      "//zircon/public/lib/digest",
      "//zircon/public/lib/fbl",
      "//zircon/public/lib/fs",
      "//zircon/public/lib/fzl",
      "//zircon/public/lib/gpt",
      "//zircon/public/lib/pretty",
      "//zircon/public/lib/zx",
      "//zircon/system/fidl/fuchsia-boot:llcpp",
      "//zircon/system/fidl/fuchsia-hardware-block:c",
      "//zircon/system/fidl/fuchsia-hardware-block:llcpp",
      "//zircon/system/fidl/fuchsia-hardware-block-partition:c",
      "//zircon/system/fidl/fuchsia-io:llcpp",
      "//zircon/system/ulib/fdio-caller",
      "//zircon/system/ulib/fvm",
    ]
    configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]

    configs += [ "//build/config:Wno-unused-function" ]

    data_deps = [
      "//zircon/system/uapp/blobfs",
      "//zircon/system/uapp/minfs",
      "//zircon/third_party/uapp/fsck-msdosfs",
      "//zircon/third_party/uapp/mkfs-msdosfs",
    ]
  }
} else {
  config("headers_config") {
    include_dirs = [ "include" ]
  }

  source_set("fs-management") {
    public = [
      "include/fs-management/admin.h",
      "include/fs-management/format.h",
      "include/fs-management/fvm.h",
      "include/fs-management/launch.h",
      "include/fs-management/mount.h",
    ]

    public_configs = [ ":headers_config" ]
  }
}
