# 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/images/args.gni")

declare_args() {
  # Set to one of "minfs", "fxfs", "f2fs".
  # If set to anything other than "minfs", any existing minfs partition will be
  # migrated in-place to the specified format when fshost mounts it.
  data_filesystem_format = "fxfs"

  # Use Fxfs's blob implementation
  # Changes the flashing logic because the outputs changed.
  # Toggles a bunch of tests to use fxfs.
  fxfs_blob = true
}

# Generates a config CML file for fshost.
# The name of the config CML is "{component_name}_config.cml" and the config
# values can be routed from it.
#
# Parameters:
#
#   component_name (optional)
#     [string] The name of the component for which to produce config, defaults to "fshost".
#
#   options (optional)
#     [scope] A block of fshost configuration options to include in the config file.
#     Unrecognized options cause errors. Later options override earlier options. The provided
#     values override all other values, including defaults and build args.
#
template("generated_fshost_config") {
  _manifest_target = "${target_name}_manifest"
  _component_name = "fshost_config"
  if (defined(invoker.component_name)) {
    _component_name = invoker.component_name
  }

  fuchsia_component_manifest(_manifest_target) {
    component_name = _component_name
    manifest = "//src/storage/fshost/meta/config.cml"
    metadata = {
      # we don't want this in the packaged output, it's just to give cmc something to work with
      distribution_entries_barrier = []
    }
  }

  fuchsia_structured_config_values2(target_name) {
    output_component_name = _component_name + "_config"
    cm_label = ":$_manifest_target"
    values = {
      # Defaults
      blobfs = true
      blobfs_max_bytes = 0
      bootpart = true
      check_filesystems = true
      data = true
      data_max_bytes = 0
      disable_block_watcher = false
      factory = false
      fvm = true
      ramdisk_image = false
      fxfs_blob = true
      fxfs_crypt_url = "fuchsia-boot:///fxfs-crypt#meta/fxfs-crypt.cm"
      gpt = true
      gpt_all = false
      mbr = false
      merge_super_and_userdata = false
      no_zxcrypt = false
      fvm_slice_size = 8388608
      blobfs_initial_inodes = 0
      blobfs_use_deprecated_padded_format = false
      data_filesystem_format = "fxfs"
      format_data_on_corruption = true
      nand = false
      use_disk_migration = false
      storage_host = false
      disable_automount = false
      starnix_volume_name = ""
      inline_crypto = false
      blobfs_write_compression_algorithm = ""
      blobfs_cache_eviction_policy = ""
      provision_fxfs = false

      if (defined(invoker.options)) {
        forward_variables_from(invoker.options, "*")
      }
    }
  }
}
