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

# Build targets for constructing CIPD release archives.

assert(is_fuchsia)

import("//build/cipd/cipd.gni")
import("//build/config/chrome_build.gni")
import("//build/util/process_version.gni")
import("//third_party/fuchsia-sdk/sdk/build/build_id_dir.gni")
import("//third_party/fuchsia-sdk/sdk/build/cipd.gni")

visibility = [ ":*" ]

# Allows a builder to explicitly declare the CIPD path. The base path is what
# comes after `.../p/` in the CIPD URL.
declare_args() {
  fuchsia_cipd_package_base_path = ""
}

# TODO(zijiehe): Eliminate the use of 'package_base_path' during the
# refactoring.
if (fuchsia_cipd_package_base_path == "") {
  if (is_chrome_branded) {
    package_base_path = "chrome_internal/fuchsia"
  } else {
    package_base_path = "chromium/fuchsia"
  }
} else {
  package_base_path = fuchsia_cipd_package_base_path
}

# Archives related specifically to `fuchsia.web`
_web_engine_directory = "web_engine"

# Archives related specifically to Chrome browser.
_chrome_directory = "chrome"

# Archives of tools intended to be run on a Linux/Mac host rather than the
# Fuchsia device.
_host_tools_directory = "host_tools"

_archive_suffix = "_archive"

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

if (target_cpu == "x64") {
  targetarch = "amd64"
} else {
  targetarch = "arm64"
}

# Prepares a CIPD archive, produces a corresponding LICENSE file,
# LICENSE.spdx.json file and generates a manifest file.
#
# Parameters:
#   package_subdirectory: Specify the subdirectory relative to
#                         |package_base_path| in which the package is put.
#   description: Sets the "description" field in CIPD package definition.
#
# Optional parameters used directly by fuchsia_cipd_package template:
#   "install_mode",
#   "sources",
#   "data",
#   "data_deps"
#   "deps",
#   "testonly",

template("cipd_archive") {
  forward_variables_from(invoker,
                         [
                           "package_subdirectory",
                           "description",
                           "install_mode",
                           "sources",
                           "data",
                           "data_deps",
                           "deps",
                           "testonly",
                         ])

  _license_path = "${target_gen_dir}/${target_name}/LICENSE"
  _invoker_dir = get_label_info(":${invoker.target_name}", "dir")
  _license_target = "${_invoker_dir}:${invoker.target_name}${_archive_suffix}"

  # GN is used by the script and is thus an input.
  if (host_os == "mac") {
    _gn_path = "//buildtools/mac/gn"
  } else if (host_os == "linux") {
    _gn_path = "//buildtools/linux64/gn"
  }

  # Produces a consolidated license file.
  action("${target_name}_license") {
    script = "//tools/licenses/licenses.py"
    inputs = [ "$_gn_path" ]
    outputs = [ _license_path ]
    args = [
      "license_file",
      rebase_path(_license_path, root_build_dir),
      "--gn-target",
      _license_target,
      "--gn-out-dir",
      ".",
    ]
  }

  # Produces a consolidated license file in spdx format.
  action("${target_name}_license_spdx") {
    _license_path_spdx = "${_license_path}.spdx.json"

    script = "//tools/licenses/licenses.py"
    inputs = [ "$_gn_path" ]
    outputs = [ _license_path_spdx ]
    args = [
      "license_file",
      rebase_path(_license_path_spdx, root_build_dir),
      "--gn-target",
      _license_target,
      "--gn-out-dir",
      ".",
      "--format",
      "spdx",
      "--spdx-doc-name",
      "${invoker.target_name}",
    ]
  }

  if (!defined(deps)) {
    deps = []
  }
  deps += [
    ":${target_name}_license",
    ":${target_name}_license_spdx",
    ":version",
  ]

  if (!defined(sources)) {
    sources = []
  }
  sources += get_target_outputs(":${target_name}_license") +
             get_target_outputs(":${target_name}_license_spdx") +
             [ "${target_gen_dir}/VERSION" ]

  fuchsia_cipd_package("${target_name}${_archive_suffix}") {
    package = "${package_base_path}/${package_subdirectory}/${targetarch}/${invoker.target_name}"
    package_root = "${target_gen_dir}/${invoker.target_name}"
    package_definition_name = "${invoker.target_name}.yaml"

    # Always use absolute path.
    use_absolute_root_path = true
  }
}

# Prepares a CIPD test archive, which is a regular CIPD archive that generates
# test manifests for a given list of test_sets.
#
# Parameters:
#   test_sets: A list of scopes for which test manifests will be created. Each
#              set contains:
#     manifest_path: The path to the generated manifest JSON file.
#     far_sources: An optional list of CFv2 test component .far files.
#
# Required parameters used by the cipd_archive template:
#   "package_subdirectory",
#
# Optional parameters used by the cipd_archive template:
#   "description"
#   "install_mode",
#   "data",
#   "data_deps"
#   "deps",
#   "testonly",

template("cipd_test_archive") {
  forward_variables_from(invoker,
                         [
                           "package_subdirectory",
                           "description",
                           "install_mode",
                           "data",
                           "data_deps",
                           "deps",
                           "testonly",
                           "test_sets",
                         ])

  assert(defined(test_sets) && defined(testonly) && testonly == true)

  cipd_archive(target_name) {
    # Build JSON manifests for each suite of tests and include them in the
    # archive.
    sources = []
    foreach(test_set, test_sets) {
      assert(defined(test_set.far_sources))
      sources += [ test_set.manifest_path ]
      _manifest_contents = []
      if (defined(test_set.far_sources)) {
        foreach(source, test_set.far_sources) {
          package_name = get_path_info(source, "name")

          _manifest_contents += [
            {
              package = package_name
              component_name = package_name + ".cm"
            },
          ]
        }
        sources += test_set.far_sources
      }
      write_file(test_set.manifest_path, _manifest_contents, "json")
    }
  }
}

cipd_archive("web_engine") {
  package_subdirectory = _web_engine_directory
  description = "Prebuilt WebEngine binaries for Fuchsia."

  deps = [ "//fuchsia_web/webengine:web_engine" ]
  sources =
      [ "${root_gen_dir}/fuchsia_web/webengine/web_engine/web_engine.far" ]
}

cipd_archive("cast_runner") {
  package_subdirectory = _web_engine_directory
  description = "Prebuilt Cast application Runner binaries for Fuchsia."

  deps = [ "//fuchsia_web/runners:cast_runner_pkg" ]
  sources =
      [ "${root_gen_dir}/fuchsia_web/runners/cast_runner/cast_runner.far" ]
}

cipd_archive("web_engine_shell") {
  package_subdirectory = _web_engine_directory
  description = "Simple command-line embedder for WebEngine."
  testonly = true

  deps = [ "//fuchsia_web/shell:web_engine_shell_pkg" ]
  sources = [
    "${root_gen_dir}/fuchsia_web/shell/web_engine_shell/web_engine_shell.far",
  ]
}

_stripped_chromedriver_file = "${root_out_dir}/clang_x64/stripped/chromedriver"

action("strip_chromedriver_binary") {
  testonly = true

  prog_name = "${root_out_dir}/clang_x64/chromedriver"

  deps = [ "//chrome/test/chromedriver:chromedriver_server($host_toolchain)" ]
  script = "//build/gn_run_binary.py"
  sources = [
    "//buildtools/third_party/eu-strip/bin/eu-strip",
    prog_name,
  ]
  outputs = [ _stripped_chromedriver_file ]
  args = [
    rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip",
                root_build_dir),
    "-o",
    rebase_path(_stripped_chromedriver_file, root_build_dir),
    rebase_path(prog_name, root_build_dir),
  ]
}

cipd_archive("chromedriver") {
  package_subdirectory = "${_host_tools_directory}/\${os}"
  description = "Prebuilt Chromedriver binary for Fuchsia host."
  install_mode = "copy"
  testonly = true

  deps = [ ":strip_chromedriver_binary" ]
  sources = [ _stripped_chromedriver_file ]
}

cipd_test_archive("tests") {
  package_subdirectory = _web_engine_directory
  description = "Prebuilt Chromium tests for Fuchsia."
  testonly = true

  deps = [
    "//base:base_unittests_pkg",
    "//fuchsia_web/runners:cast_runner_integration_tests_pkg",
    "//fuchsia_web/webengine:web_engine_integration_tests_pkg",
    "//ipc:ipc_tests_pkg",
    "//media:media_unittests_pkg",
    "//mojo:mojo_unittests_pkg",
    "//skia:skia_unittests_pkg",
    "//third_party/blink/common:blink_common_unittests_pkg",
  ]

  test_sets = [
    {
      manifest_path = "${target_gen_dir}/test_manifest.json"
      far_sources = [
        "${root_gen_dir}/base/base_unittests/base_unittests.far",
        "${root_gen_dir}/fuchsia_web/runners/cast_runner_integration_tests/cast_runner_integration_tests.far",
        "${root_gen_dir}/fuchsia_web/webengine/web_engine_integration_tests/web_engine_integration_tests.far",
        "${root_gen_dir}/ipc/ipc_tests/ipc_tests.far",
        "${root_gen_dir}/media/media_unittests/media_unittests.far",
        "${root_gen_dir}/mojo/mojo_unittests/mojo_unittests.far",
        "${root_gen_dir}/skia/skia_unittests/skia_unittests.far",
        "${root_gen_dir}/third_party/blink/common/blink_common_unittests/blink_common_unittests.far",
      ]
    },
    {
      manifest_path = "${target_gen_dir}/common_tests_manifest.json"
      far_sources = [
        "${root_gen_dir}/base/base_unittests/base_unittests.far",
        "${root_gen_dir}/ipc/ipc_tests/ipc_tests.far",
        "${root_gen_dir}/media/media_unittests/media_unittests.far",
        "${root_gen_dir}/mojo/mojo_unittests/mojo_unittests.far",
        "${root_gen_dir}/skia/skia_unittests/skia_unittests.far",
        "${root_gen_dir}/third_party/blink/common/blink_common_unittests/blink_common_unittests.far",
      ]
    },
    {
      manifest_path = "${target_gen_dir}/web_engine_tests_manifest.json"
      far_sources = [ "${root_gen_dir}/fuchsia_web/webengine/web_engine_integration_tests/web_engine_integration_tests.far" ]
    },
    {
      manifest_path = "${target_gen_dir}/cast_runner_tests_manifest.json"
      far_sources = [ "${root_gen_dir}/fuchsia_web/runners/cast_runner_integration_tests/cast_runner_integration_tests.far" ]
    },
  ]
}

# Construct a consolidated directory of web_engine debugging symbols using the
# GNU .build_id structure for CIPD archival.
_web_engine_build_ids_target = "web_engine_debug_symbol_directory"
_web_engine_debug_symbols_archive_name = "web_engine_debug_symbols"
_web_engine_debug_symbols_outdir = "${target_gen_dir}/${_web_engine_debug_symbols_archive_name}/${_web_engine_build_ids_target}"

build_id_dir(_web_engine_build_ids_target) {
  testonly = true  # Some of the archives contain test packages.
  output_path = _web_engine_debug_symbols_outdir
  deps = [ ":web_engine_archives_with_tests" ]
}

fuchsia_cipd_package(_web_engine_debug_symbols_archive_name) {
  testonly = true
  package = "${package_base_path}/${_web_engine_directory}/${targetarch}/debug-symbols"
  package_root = _web_engine_debug_symbols_outdir
  package_definition_name = "${target_name}.yaml"
  package_definition_dir = "${target_gen_dir}/${target_name}"
  description = "Debugging symbols for prebuilt binaries from Chromium."
  use_absolute_root_path = true

  directories = [ "." ]
  deps = [ ":${_web_engine_build_ids_target}" ]
}

cipd_archive("chrome") {
  package_subdirectory = _chrome_directory
  description = "Prebuilt Chrome browser package."

  deps = [ "//chrome/app:chrome_pkg" ]
  sources = [ "${root_gen_dir}/chrome/app/chrome/chrome.far" ]
}

_chrome_build_ids_target = "chrome_debug_symbol_directory"
_chrome_debug_symbols_archive_name = "chrome_debug_symbols"
_chrome_debug_symbols_outdir = "${target_gen_dir}/${_chrome_debug_symbols_archive_name}/${_chrome_build_ids_target}"

build_id_dir(_chrome_build_ids_target) {
  testonly = true  # Some of the archives contain test packages.
  output_path = _chrome_debug_symbols_outdir
  deps = [ ":chrome${_archive_suffix}" ]
}

fuchsia_cipd_package(_chrome_debug_symbols_archive_name) {
  testonly = true
  package =
      "${package_base_path}/${_chrome_directory}/${targetarch}/debug-symbols"
  package_root = _chrome_debug_symbols_outdir
  package_definition_name = "${target_name}.yaml"
  package_definition_dir = "${target_gen_dir}/${target_name}"
  description = "Debugging symbols for prebuilt binaries from Chromium."
  use_absolute_root_path = true

  directories = [ "." ]
  deps = [ ":${_chrome_build_ids_target}" ]
}

# A group for production archives to ensure nothing is testonly.
group("web_engine_production_archives") {
  deps = [
    ":cast_runner${_archive_suffix}",
    ":web_engine${_archive_suffix}",
  ]
}

# Used by both the main group as well as :debug_symbols.
group("web_engine_archives_with_tests") {
  testonly = true  # tests and web_engine_shell are testonly.
  deps = [
    ":tests${_archive_suffix}",
    ":web_engine_production_archives",
    ":web_engine_shell${_archive_suffix}",
  ]
}

# TODO(zijiehe): Rename to "cipd_yaml" when possible.
# This target only creates yaml files and related archives for cipd rather
# than executing the cipd instance to upload them.
# Currently it's named as "cipd" to match the folder name which introduces
# confusions.
group("cipd") {
  testonly = true  # Some archives are testonly.
  deps = [
    ":chrome${_archive_suffix}",
    ":chrome_debug_symbols",
    ":web_engine_archives_with_tests",

    # Symbols are not uploaded for the following.
    ":chromedriver${_archive_suffix}",
    ":web_engine_debug_symbols",
  ]
  visibility = []  # Required to replace the file default.
  visibility = [ "//:gn_all" ]
}
