# 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/config/gclient_args.gni")
import("sdk_args.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",
  ]
  if (defined(checkout_llvm) && checkout_llvm) {
    deps += [ ":llvm_codegen" ]
  }
}

group("most") {
  import("runtime/runtime_args.gni")
  if (targetting_fuchsia) {
    # Fuchsia has run_vm_tests marked testonly.
    testonly = true
  }
  deps = [
    ":create_sdk",
    ":dart2js",
    ":dartanalyzer",
    ":dartdevc",
    ":runtime",
    ":samples",
  ]
  if (dart_target_arch != "arm") {
    deps += [ ":analysis_server" ]
  }
}

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:entrypoints_verification_test_extension",
    "runtime/bin:ffi_test_dynamic_library",
    "runtime/bin:ffi_test_functions",
    "runtime/bin:process_test",
    "runtime/bin:run_vm_tests",
    "runtime/bin:sample_extension",
    "runtime/bin: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",
  ]
}

if (use_nnbd) {
  group("create_sdk") {
    public_deps = [
      "sdk_nnbd:create_sdk",
    ]
  }
} else {
  group("create_sdk") {
    public_deps = [
      "sdk:create_sdk",
    ]
  }
}

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

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

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

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

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

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

group("check_llvm") {
  if (defined(checkout_llvm) && checkout_llvm) {
    deps = [
      "runtime/llvm_codegen/test",
    ]
  }
}

group("llvm_codegen") {
  if (defined(checkout_llvm) && checkout_llvm) {
    deps = [
      "runtime/llvm_codegen/bit",
      "runtime/llvm_codegen/codegen",
    ]
  }
}

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