# Copyright (c) 2016, 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/compiled_action.gni")

_dart_root = rebase_path("..")

template("application_snapshot") {
  assert(defined(invoker.main_dart), "Must specify 'main_dart'")
  assert(defined(invoker.training_args), "Must specify 'training_args'")
  main_dart = invoker.main_dart
  training_args = invoker.training_args
  name = target_name
  if (defined(invoker.name)) {
    name = invoker.name
  }
  extra_deps = []
  if (defined(invoker.deps)) {
    extra_deps += invoker.deps
  }
  extra_inputs = []
  if (defined(invoker.inputs)) {
    extra_inputs += invoker.inputs
  }
  compiled_action(target_name) {
    tool = get_path_info("$_dart_root/runtime/bin:dart", "abspath")
    deps = extra_deps + [ "$_dart_root/pkg:pkg_files_stamp" ]

    inputs = extra_inputs + [
               "$_dart_root/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart",
               "$root_gen_dir/pkg_files.stamp",
             ]

    output = "$root_gen_dir/$name.dart.snapshot"
    outputs = [
      output,
    ]

    dot_packages = rebase_path("$_dart_root/.packages")
    abs_output = rebase_path(output)
    main_file = rebase_path(main_dart)

    args = [
             "--packages=$dot_packages",
             "--snapshot=$abs_output",
             "--snapshot-kind=app-jit",
             main_file,
           ] + training_args
  }
}
