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

dartdev_files = exec_script("../../tools/list_dart_files.py",
                            [
                              "absolute",
                              rebase_path("../../pkg/dartdev"),
                            ],
                            "list lines")

group("dartdev") {
  public_deps = [
    ":copy_dartdev_kernel",
    ":copy_dartdev_snapshot",
  ]
}

copy("copy_dartdev_kernel") {
  visibility = [ ":dartdev" ]
  public_deps = [ ":generate_dartdev_kernel" ]
  sources = [ "$root_gen_dir/dartdev.dill" ]
  outputs = [ "$root_out_dir/dartdev.dill" ]
}

application_snapshot("generate_dartdev_kernel") {
  dart_snapshot_kind = "kernel"
  main_dart = "../../pkg/dartdev/bin/dartdev.dart"
  training_args = []
  deps = [ "../dds:dds" ]
  inputs = dartdev_files
  output = "$root_gen_dir/dartdev.dill"
}

copy("copy_dartdev_snapshot") {
  visibility = [ ":dartdev" ]
  public_deps = [ ":generate_dartdev_snapshot" ]
  sources = [ "$root_gen_dir/dartdev.dart.snapshot" ]
  outputs = [ "$root_out_dir/dartdev.dart.snapshot" ]
}

application_snapshot("generate_dartdev_snapshot") {
  main_dart = "../../pkg/dartdev/bin/dartdev.dart"
  training_args = [ "--help" ]
  deps = [ "../dds:dds" ]
  inputs = dartdev_files
  output = "$root_gen_dir/dartdev.dart.snapshot"
}
