# Copyright 2016 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/compiled_action.gni")

group("archives") {
  testonly = true
  deps = [
    ":breakpad_symbols",
    ":package_archive",
  ]
}

# Generates breakpad symbol data for unstripped binaries.
#
# This symbol data is consumed by infrastructure tools and uploaded to Crash
# servers to enable crash reporting.  These files are uniquely important for
# release builds and this step may take a few minutes to complete, so it is
# not recommended that this be included in the default build.
#
# We also include build-ids from archives downloaded from CIPD; these
# archives are unpacked into a single directory.
prebuilt_build_ids = "$target_gen_dir/prebuilt_build_ids"
action("unpack_build_id_archives") {
  testonly = true
  script = "unpack_build_id_archives.sh"

  # We list the jiri snapshot as input to force ninja to run the action
  # if the snapshot has changed, which is what people want as we always
  # want to unpack the latest build-id archives.
  #
  # Ideally, we would list explicitly all the archives downloaded from CIPD,
  # but those aren't available from jiri so today, we glob `prebuilt_build_ids`
  # inside `script` so the best approximation is a jiri snapshot change.
  inputs = [ "//.jiri_root/update_history/latest" ]

  # We output a text list of the build-id archives, as actions
  # require outputs, though it is not needed.
  _build_id_manifest = "$target_gen_dir/prebuilt-build-id-archives.txt"
  args = [
    rebase_path("//prebuilt/build_ids/$target_cpu"),
    rebase_path(prebuilt_build_ids),
    rebase_path(_build_id_manifest),
  ]
  outputs = [ _build_id_manifest ]
}

prebuilt_ids_txt = "$target_gen_dir/prebuilt_ids.txt"
action("prebuilt_ids.txt") {
  testonly = true
  script = "//scripts/build_id_conv.py"

  args = [
    "--output-format",
    "ids.txt",
    "--input",
    rebase_path(prebuilt_build_ids),

    # We also include the new, canonical location of
    # //prebuilt/.build-id, where unpacked, prebuilt, .build-id directories
    # are being migrated to.
    "--input",
    rebase_path("//prebuilt/.build_id"),
    rebase_path(prebuilt_ids_txt),
  ]

  outputs = [ prebuilt_ids_txt ]

  deps = [ ":unpack_build_id_archives" ]
}

extended_ids_txt = "$root_build_dir/extended_ids.txt"
action("concatenate_ids_txts") {
  testonly = true
  script = "/bin/sh"

  sources = [
    "$root_build_dir/ids.txt",
    prebuilt_ids_txt,
  ]

  _sources = rebase_path(sources)
  _extended = rebase_path(extended_ids_txt)

  args = [
    "-c",
    "cat ${_sources[0]} ${_sources[1]} > $_extended",
  ]

  outputs = [ extended_ids_txt ]

  deps = [
    ":prebuilt_ids.txt",
    "//build/images:ids.txt",
  ]
}

action("breakpad_symbols") {
  testonly = true
  script = "$host_out_dir/dump_breakpad_symbols"

  deps = [
    ":concatenate_ids_txts",
    "//tools/debug/dump_breakpad_symbols($host_toolchain)",
  ]

  inputs =
      [ "//prebuilt/third_party/breakpad/${host_platform}/dump_syms/dump_syms" ]

  sources = [ extended_ids_txt ]

  # This action generates a single xxx.sym file for each binary in the ids file
  # and produces an archived output of them all.
  outputs = [ "$root_out_dir/breakpad_symbols/breakpad_symbols.tar.gz" ]

  depfile = "${outputs[0]}.d"

  args = [
    "-out-dir",
    rebase_path("$root_out_dir/breakpad_symbols"),
    "-dump-syms-path",
    rebase_path(
        "//prebuilt/third_party/breakpad/${host_platform}/dump_syms/dump_syms"),
    "-depfile",
    rebase_path(depfile, root_build_dir),
    "-tar-file",
    rebase_path(outputs[0], root_build_dir),
    rebase_path(sources[0], root_build_dir),
  ]

  metadata = {
    archives = [
      {
        name = "breakpad_symbols"
        path = rebase_path(outputs[0], root_build_dir)
        type = "tgz"
      },
    ]
  }
}

# Generates an archive of package metadata.
amber_files = rebase_path("$root_build_dir/amber-files")
pm_tool = rebase_path("$host_out_dir/pm")
pkg_archive_contents = [
  "amber-files/repository=$amber_files/repository",

  # TODO(IN-915): this should never contain the root key. In the future, this
  # should contain no keys, once infra is managing key material itself.
  # These keys are consumed by the infra train promote scripts.
  "amber-files/keys=$amber_files/keys",
  "pm=$pm_tool",
]
pkg_archive_manifest = "$target_gen_dir/package_archive_manifest"
write_file(pkg_archive_manifest, pkg_archive_contents)

# NOTE: This is consumed by the system OTA tests. Please check in with the
# software delivery team if you need to change this.
pkg_archive = "$root_build_dir/packages.tar.gz"
compiled_action("package_archive") {
  testonly = true
  tool = "//build/tools/tar_maker"
  inputs = [ pkg_archive_manifest ]
  outputs = [ pkg_archive ]
  args = [
    "-manifest",
    rebase_path(pkg_archive_manifest),
    "-output",
    rebase_path(pkg_archive),
  ]
  deps = [ "//build/images:updates" ]

  metadata = {
    archives = [
      {
        name = "packages"
        path = rebase_path(outputs[0], root_build_dir)
        type = "tgz"
      },
    ]
  }
}
