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

# 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 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",
    rebase_path(prebuilt_build_ids),
    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 = "//buildtools/${host_platform}/dump_breakpad_symbols"

  deps = [
    ":concatenate_ids_txts",
  ]

  inputs = [
    "//buildtools/${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("//buildtools/${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),
  ]
}

# Generates an archive of package metadata.
amber_files = rebase_path("$root_build_dir/amber-files")
host_out_dir = get_label_info("//anything($host_toolchain)", "root_out_dir")
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",
  ]
}
