# 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.

# This target will be built if no target is specified when invoking ninja.
group("default") {
  deps = [
    ":runtime",
  ]
}

group("most") {
  deps = [
    ":analysis_server",
    ":create_sdk",
    ":dart2js",
    ":dartanalyzer",
    ":dartdevc",
    ":runtime",
    ":samples",
  ]
}

group("runtime") {
  deps = [
    "runtime/bin:dart",
    "runtime/bin:dart_bootstrap($host_toolchain)",
    "runtime/bin:run_vm_tests",
    "runtime/bin:process_test",
    "runtime/bin:test_extension",
    "runtime/bin:sample_extension",
  ]
}

group("runtime_precompiled") {
  deps = [
    "runtime/bin:dart_precompiled_runtime",
    "runtime/bin:dart_bootstrap($host_toolchain)",
  ]
}

group("runtime_and_noopt") {
  deps = [
    "runtime/bin:dart",
    "runtime/bin:dart_noopt",
    "runtime/bin:dart_bootstrap($host_toolchain)",
    "runtime/bin:run_vm_tests",
    "runtime/bin:process_test",
    "runtime/bin:test_extension",
    "runtime/bin:sample_extension",
  ]
}


action("create_sdk") {
  deps = [
    "runtime/bin:dart",
    "utils/analysis_server",
    "utils/compiler:dart2js",
    "utils/compiler:utils_wrapper",
    "utils/dartanalyzer:generate_dartanalyzer_snapshot",
    "utils/dartanalyzer:generate_summary_spec",
    "utils/dartanalyzer:generate_summary_strong",
    "utils/dartdevc",
    "utils/dartdoc",
    "utils/dartfmt",
    "utils/pub",
  ]

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

  preamble_files = exec_script("tools/list_files.py",
      ["", rebase_path("sdk/lib/_internal/js_runtime/lib/preambles")],
      "list lines")

  sdk_bin_files = exec_script("tools/list_files.py",
      ["", rebase_path("sdk/bin")],
      "list lines")

  inputs = rebase_path(sdk_lib_files, "", "sdk/lib") +
           rebase_path(preamble_files, "",  "sdk/lib") +
           rebase_path(sdk_bin_files, "", "sdk/bin") + [
    "sdk/lib/dart_client.platform",
    "sdk/lib/dart_server.platform",
    "sdk/lib/dart_shared.platform",
    "$root_gen_dir/dart2js.dart.snapshot",
    "$root_gen_dir/utils_wrapper.dart.snapshot",
    "$root_gen_dir/pub.dart.snapshot",
    "$root_gen_dir/dartanalyzer.dart.snapshot",
    "$root_gen_dir/dartdevc.dart.snapshot",
    "$root_gen_dir/dartfmt.dart.snapshot",
    "$root_gen_dir/analysis_server.dart.snapshot",
    "$root_gen_dir/dartdoc.dart.snapshot",
    "$root_gen_dir/spec.sum",
    "$root_gen_dir/strong.sum",
    "tools/VERSION"
  ]

  outputs = [
    "$root_out_dir/dart-sdk/README",
  ]

  script = "tools/create_sdk.py"
  args = [
    "--sdk_output_dir",
    rebase_path("$root_out_dir/dart-sdk"),
    "--snapshot_location",
    rebase_path("$root_gen_dir"),
  ]
}


group("dart2js") {
  deps = [
    "utils/compiler:dart2js"
  ]
}

group("dartanalyzer") {
  deps = [
    "utils/dartanalyzer"
  ]
}

group("dartdevc") {
  deps = [
    "utils/dartdevc"
  ]
}

group("dartfmt") {
  deps = [
    "utils/dartfmt"
  ]
}

group("analysis_server") {
  deps = [
    "utils/analysis_server"
  ]
}

# This is the target that is built on the dart2js build bots.
# It must depend on anything that is required by the dart2js
# test suites.
group("dart2js_bot") {
  deps = [
    ":create_sdk"
  ]
}

group("samples") {
  deps = [
    "runtime/bin:sample_extension"
  ]
}
