# 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/dart/dart_action.gni")
import("../application_snapshot.gni")

group("dartanalyzer") {
  deps = [
    ":generate_dartanalyzer_snapshot",
    ":generate_summary_spec",
    ":generate_summary_strong",
  ]
}

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

application_snapshot("generate_dartanalyzer_snapshot") {
  main_dart = "../../pkg/analyzer_cli/bin/analyzer.dart"
  training_args = [
    "--dart-sdk=" + rebase_path("../../sdk"),
    rebase_path("../../tests/language/first_test.dart"),
  ]
  name = "dartanalyzer"
}

if (current_os == "linux") {
  aot_assembly("dartanalyzer_aot_assembly") {
    main_dart = "../../pkg/analyzer_cli/bin/analyzer.dart"
    name = "dartanalyzer"
  }

  # This target is for Goma. It should not be used in the SDK.
  executable("dartanalyzer_aot") {
    deps = [
      "../../runtime/bin:dart_precompiled_runtime_for_linking",
      ":dartanalyzer_aot_assembly",
    ]
    sources = [
      "$root_gen_dir/dartanalyzer.dart.S"
    ]
  }
}

sdk_lib_files = exec_script("../../tools/list_dart_files.py",
                            [
                              "absolute",
                              rebase_path("../../sdk/lib"),
                            ],
                            "list lines")

template("generate_summary") {
  assert(defined(invoker.type), "Must specify the summary type")
  type = invoker.type
  assert(type == "spec" || type == "strong")

  prebuilt_dart_action(target_name) {
    script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
    packages = "../../.packages"
    inputs = sdk_lib_files + analyzer_files
    output = "$root_gen_dir/$type.sum"
    outputs = [
      output,
    ]
    args = [
      "build-$type",
      rebase_path(output),
      rebase_path("../../sdk"),
    ]
  }
}

generate_summary("generate_summary_spec") {
  type = "spec"
}

generate_summary("generate_summary_strong") {
  type = "strong"
}
