# 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/images/args.gni")
import("//build/images/filesystem_limits.gni")
import("//build/images/fvm.gni")
import("//build/zircon/tools.gni")
import("//build/zircon/zx_host_tool.gni")

# We only calculate filesystem sizes for non-bootfs-only builds.
assert(!bootfs_only)

labels = {
  images = "//build/images/fuchsia"
}

files = {
  outdir = get_label_info(labels.images, "target_out_dir") + "/fuchsia"
  gendir = "${outdir}/gen"

  zbi = "${outdir}/fuchsia.zbi"
  minfs = "${outdir}/data.blk"
  blobfs = "${outdir}/blob.blk"
  fvm_sparse = "${outdir}/fvm.sparse.blk"
  blobs_json = "${gendir}/blobs.json"

  extracted_zbi_json = "$target_out_dir/fuchsia.zbi.json"
  extracted_zbi_bootfs_dir = "$target_out_dir/fuchsia.zbi/bootfs"
}

# ZBI tool JSON output doesn't record paths of input files so there's no easy
# way to find out where each of the binaries in bootfs entry came from. Rather,
# we extract the ZBI and then pass this directory as an input to the elfinfo.py
# script which computes the ELF sizes.
#
# TODO(phosek): Try to come up with a more efficient solution that does not
# require extract the ZBI.
zx_host_tool_action("extract_bootfs") {
  hermetic_deps = false

  visibility = [ ":elf_sizes.json" ]
  testonly = true
  tool = "//zircon/tools/zbi"
  inputs = [ files.zbi ]
  outputs = [ files.extracted_zbi_json ]
  deps = [ labels.images ]
  args = [
    "--extract",
    "--output-dir=" +
        rebase_path(files.extracted_zbi_bootfs_dir, root_build_dir),
    "--json-output=" + rebase_path(files.extracted_zbi_json, root_build_dir),
    rebase_path(files.zbi, root_out_dir),
  ]
}

action("elf_sizes.json") {
  testonly = true
  hermetic_deps = false
  script = "//build/images/elfinfo.py"
  deps = [
    ":extract_bootfs",
    labels.images,
  ]
  sources = [
    files.blobs_json,
    files.extracted_zbi_json,
  ]
  outputs = [ "$root_build_dir/$target_name" ]
  args = [
    "--sizes",
    rebase_path(outputs[0], root_build_dir),
    "--blobs",
    rebase_path(files.blobs_json, root_build_dir),
    "--zbi",
    rebase_path(files.extracted_zbi_json, root_build_dir),
    "--bootfs-dir",
    rebase_path(files.extracted_zbi_bootfs_dir, root_build_dir),
  ]
}
