# 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_host_sdk_toolchain.gni")

targetting_fuchsia = target_os == "fuchsia"

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

group("most") {
  if (targetting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    ":analysis_server",
    ":create_sdk",
    ":dart2js",
    ":dartanalyzer",
    ":dartdevc",
    ":runtime",
    ":samples",
  ]
}

group("runtime") {
  import("runtime/runtime_args.gni")

  if (targetting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    "runtime/bin:dart",
    "runtime/bin:process_test",
    "runtime/bin:run_vm_tests",
    "runtime/bin:sample_extension",
    "runtime/bin:test_extension",
    "runtime/bin:entrypoints_verification_test_extension",
    "runtime/vm:kernel_platform_files($host_toolchain)",
    "utils/kernel-service:kernel-service",
  ]
}

group("runtime_kernel") {
  if (targetting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    ":runtime",
  ]
}

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

group("create_sdk") {
  public_deps = [
    "sdk:create_sdk",
  ]
}

if (defined(dart_host_sdk_toolchain) &&
    dart_host_sdk_toolchain != host_toolchain) {
  group("create_host_sdk") {
    deps = [
      "sdk:create_sdk($dart_host_sdk_toolchain)",
    ]
  }
}

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",
  ]
}

# This rule and the compressed_observatory_archive rule are for the Fuchsia
# bots that pre-build the Observatory. They copy the observatory tar files to
# the root build output directory for convenient access by the Fuchsia buildbot
# scripts.
group("observatory_archive") {
  deps = [
    "runtime/observatory:copy_observatory_archive",
  ]
}

group("compressed_observatory_archive") {
  deps = [
    "runtime/observatory:copy_compressed_observatory_archive",
  ]
}
