# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
# for details. 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/prebuilt_dart_sdk.gni")
import("../build/dart_host_toolchain.gni")

_dart_root = get_path_info("..", "abspath")

# Template to generate a patched_sdk folder. This invokes the tools/patch_sdk.py
# script and sets up the right dependencies.
#
# This template expects four arguments:
#   - mode: vm or dart2js (whether to build an sdk for the vm or for dart2js)
#   - input_patches_dir: directory containing the input library files.
#   - patched_sdk_dir: the output location
#   - deps: extra dependencies that must be built ahead of time.
template("generate_patched_sdk") {
  assert(defined(invoker.input_patches_dir),
         "Need input_patches_dir in $target_name")
  assert(defined(invoker.patched_sdk_dir),
         "Need patched_sdk_dir in $target_name")
  assert(defined(invoker.mode), "Need mode in $target_name")
  action(target_name) {
    if (defined(invoker.deps)) {
      deps = invoker.deps
    } else {
      deps = []
    }

    if (!prebuilt_dart_exe_works) {
      deps += [ "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
    }

    script = "$_dart_root/tools/patch_sdk.py"

    # We list the `patch_sdk.dart` tool here because the [script] (which is
    # implicitly an input) will call it.
    inputs = [
      "$_dart_root/tools/patch_sdk.dart",
    ]

    depfile = "$root_out_dir/${target_name}.d"

    outputs = [
      # Instead of listing all outputs we list a single well-known one.
      "$root_out_dir/${invoker.patched_sdk_dir}/platform.dill",
    ]

    args = [ "--quiet" ]
    if (!prebuilt_dart_exe_works) {
      dart_out_dir = get_label_info(
              "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)",
              "root_out_dir")
      dart_bootstrap =
          rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")
      args += [
        "--dart-executable",
        dart_bootstrap,
      ]
    }
    args += [
      invoker.mode,
      rebase_path("$_dart_root/sdk"),
      rebase_path(invoker.input_patches_dir),
      rebase_path("$root_out_dir/${invoker.patched_sdk_dir}", root_build_dir),
      rebase_path("$_dart_root/.packages"),
    ]
  }
}
