# 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_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")

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