# 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.

import("//build/config/android/internal_rules.gni")

# Generates a script in the bin directory that runs
# //build/android/resource_sizes.py against the provided apk.
#
# Only one of apk_name or file_path should be provided.
#
# Variables:
#   apk_name: The name of the apk, without the extension.
#   file_path: The path to the apk or .minimal.apks.
#   trichrome_chrome_path: The path to chrome apk or .minimal.apks.
#   trichrome_webview_path: The path to webview apk or .minimal.apks.
#   trichrome_library_path: The path to library apk or .minimal.apks.
template("android_resource_sizes_test") {
  generate_android_wrapper(target_name) {
    forward_variables_from(invoker, [ "data_deps" ])
    executable = "//build/android/resource_sizes.py"
    wrapper_script = "$root_out_dir/bin/run_${target_name}"

    assert(defined(invoker.apk_name) != defined(invoker.file_path),
           "Exactly one of apk_name or file_path should be provided.")

    deps = [ "//build/android:resource_sizes_py" ]
    executable_args = [
      "--output-format",
      "histograms",
      "--chromium-output-directory",
      "@WrappedPath(.)",
    ]

    data = []
    if (defined(invoker.trichrome_chrome_path)) {
      data += [
        invoker.trichrome_chrome_path,
        invoker.trichrome_webview_path,
        invoker.trichrome_library_path,
      ]
      _rebased_chrome =
          rebase_path(invoker.trichrome_chrome_path, root_build_dir)
      _rebased_webview =
          rebase_path(invoker.trichrome_webview_path, root_build_dir)
      _rebased_library =
          rebase_path(invoker.trichrome_library_path, root_build_dir)

      # apk_name used only as test suite name. Not a path in this case.
      executable_args += [
        "--trichrome-chrome",
        "@WrappedPath(${_rebased_chrome})",
        "--trichrome-webview",
        "@WrappedPath(${_rebased_webview})",
        "--trichrome-library",
        "@WrappedPath(${_rebased_library})",
        "${invoker.apk_name}",
      ]
    } else {
      if (defined(invoker.apk_name)) {
        _file_path = "$root_out_dir/apks/${invoker.apk_name}.apk"
        data += [ "$root_out_dir/arsc/apks/${invoker.apk_name}.ap_" ]
      } else if (defined(invoker.file_path)) {
        _file_path = invoker.file_path
      }
      data += [ _file_path ]
      _rebased_file_path = rebase_path(_file_path, root_build_dir)
      executable_args += [ "@WrappedPath(${_rebased_file_path})" ]
    }
  }
}

# Generates a "size config JSON file" to specify data to be passed from recipes
# to Python scripts for binary size measurement on bots. All filenames are
# relative to $root_build_dir. The resulting JSON file is written to
# "$root_build_dir/config/${invoker.name}_size_config.json".
#
# Refer to tools/binary_size/generate_commit_size_analysis.py for JSON schema.
#
template("android_size_bot_config") {
  _full_target_name = get_label_info(target_name, "label_no_toolchain")
  _out_json = {
    _HEADER = "Written by build target '${_full_target_name}'"
    forward_variables_from(invoker,
                           [
                             "archive_files",
                             "mapping_files",
                             "to_resource_sizes_py",
                             "supersize_input_file",
                           ])
  }
  _output_json_path = "$root_build_dir/config/${invoker.name}_size_config.json"
  write_file(_output_json_path, _out_json, "json")
}
