# 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_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") {
  if (targetting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    "runtime/bin:dart",
    "runtime/bin:dart_bootstrap($host_toolchain)",
    "runtime/bin:process_test",
    "runtime/bin:run_vm_tests",
    "runtime/bin:sample_extension",
    "runtime/bin:test_extension",
  ]
}

group("runtime_kernel") {
  if (targetting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    ":runtime",
    "runtime/vm:kernel_platform_files($host_toolchain)",

    # TODO(rmacnak): Link this into 'dart'.
    "utils/kernel-service:copy_kernel_service_snapshot",
    "utils/kernel-service:kernel-service",
  ]
}

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

group("create_sdk") {
  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",
  ]
}

# The rules below build a Fuchsia OS image that includes the Dart tree
# under /system/test/dart.  To get this into the `user.bootfs` generated
# by the Fuchsia build, add the GN build argument:
#   extra_bootdata = [ "//third_party/dart:dart_test_bootfs" ]
if (is_fuchsia) {
  import("//build/config/fuchsia/bootdata.gni")

  action("generate_dart_test_manifest") {
    testonly = true

    output_prefix = "$target_gen_dir/dart_test_tree"
    outputs = [
      "$output_prefix.manifest",
    ]

    mode = "release"
    if (is_debug) {
      mode = "debug"
    }

    script = "tools/gen_fuchsia_test_manifest.py"
    args = [
      "-m",
      mode,
      "-o",
      rebase_path(output_prefix),
    ]
  }

  bootdata("dart_test_bootfs") {
    testonly = true
    deps = [
      ":generate_dart_test_manifest",
      "runtime/bin:dart",
      "runtime/bin:process_test",
      "runtime/bin:run_vm_tests",
    ]
    inputs = [
      "$target_gen_dir/dart_test_tree.manifest",
    ]
  }
}
