# 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")
import("//build/gn/packages.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)

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",
  ]
}
