# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

assert(is_fuchsia)

import("//build/config/fuchsia/fidl_library.gni")
import("//build/util/process_version.gni")

# Location where Fuchsia release archives and supporting files are placed.
_release_artifact_root = "$root_out_dir/fuchsia_artifacts"

fidl_library("cast_fidl") {
  library_name = "cast"
  namespace = "chromium"

  sources = [
    "fidl/cast/api_bindings.fidl",
    "fidl/cast/application_config.fidl",
    "fidl/cast/cast_channel.fidl",
    "fidl/cast/queryable_data.fidl",
  ]

  public_deps = [
    "//third_party/fuchsia-sdk/sdk:web",
  ]
}

# gn binary location.
if (host_os == "mac") {
  _gn_path = "//buildtools/mac/gn"
} else if (host_os == "linux") {
  _gn_path = "//buildtools/linux64/gn"
}

# Produces a LICENSE file for Fuchsia packages.
_license_path = "$_release_artifact_root/LICENSE"
action("license") {
  script = "//tools/licenses.py"
  inputs = [
    "$_gn_path",
  ]
  outputs = [
    _license_path,
  ]
  args = [
    "license_file",
    rebase_path(_license_path, root_build_dir),
    "--gn-target",
    "//fuchsia/runners:web_runner_pkg",
    "--gn-out-dir",
    ".",
  ]
}

# Extracts the numeric Chrome build ID and writes it to a file in the output
# directory.
#
# To check out the repository on the commit where the build ID was generated,
# simply call `git checkout <build-id>`, and Git will check out the commit
# associated with the <build-id> tag.
process_version("build_id") {
  template_file = "cipd/build_id.template"
  sources = [
    "//chrome/VERSION",
  ]
  output = "$_release_artifact_root/build_id.txt"
  process_only = true
}

# Puts copies of files at the top level of the CIPD archive's structure.
copy("release_archives") {
  sources = [
    "$root_gen_dir/fuchsia/engine/chromium/chromium.far",
    "$root_gen_dir/fuchsia/http/http/http.far",
    "$root_gen_dir/fuchsia/runners/cast_runner/cast_runner.far",
    "$root_gen_dir/fuchsia/runners/web_runner/web_runner.far",
  ]
  outputs = [
    "$_release_artifact_root/{{source_file_part}}",
  ]
  deps = [
    "//fuchsia/engine:web_engine",
    "//fuchsia/http:http_pkg",
    "//fuchsia/runners:cast_runner_pkg",
    "//fuchsia/runners:web_runner_pkg",
  ]
}

if (is_official_build) {
  # Location where debug symbol tarballs are placed.
  _symbol_artifact_root = "$root_out_dir/symbol_artifacts"

  # Create a manifest of symbol archives for downstream consumption.
  _symbol_tarballs = [
    "$root_gen_dir/fuchsia/engine/chromium/chromium.symbols.tar.bz2",
    "$root_gen_dir/fuchsia/http/http/http.symbols.tar.bz2",
    "$root_gen_dir/fuchsia/runners/cast_runner/cast_runner.symbols.tar.bz2",
    "$root_gen_dir/fuchsia/runners/web_runner/web_runner.symbols.tar.bz2",
  ]
  _symbol_manifest = "$target_gen_dir/debug_symbols.json"
  write_file(_symbol_manifest, _symbol_tarballs, "json")

  copy("symbol_tarballs") {
    sources = [
                _symbol_manifest,
                "$_release_artifact_root/build_id.txt",
                _license_path,
              ] + _symbol_tarballs
    outputs = [
      "$_symbol_artifact_root/{{source_file_part}}",
    ]
    deps = [
      ":build_id",
      ":license",
      "//fuchsia/engine:symbol_archive",
      "//fuchsia/http:symbol_archive",
      "//fuchsia/runners:cast_runner_symbol_archive",
      "//fuchsia/runners:web_runner_symbol_archive",
    ]
  }

  # Specifies the build steps that must be performed before the creation of
  # a CIPD archive.
  group("archive_sources") {
    deps = [
      ":build_id",
      ":license",
      ":release_archives",
      ":symbol_tarballs",
    ]
  }
}  # is_official_build

# Used by the top-level "gn_all" target to discover Fuchsia build targets.
group("gn_all") {
  testonly = true
  deps = [
    "base:cr_fuchsia_base_unittests",
    "engine:web_engine",
    "engine:web_engine_browsertests",
    "engine:web_engine_unittests",
    "http:http_service_tests",
    "runners:cast_runner",
    "runners:cast_runner_browsertests",
    "runners:cast_runner_integration_tests",
    "runners:web_runner",
    "//chromecast/bindings:bindings_manager_fuchsia",
  ]
}
