# Copyright 2017 The Fuchsia Authors. 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/toolchain.gni")
import("//build/toolchain/clang_toolchain.gni")
import("//build/toolchain/concurrent_jobs.gni")

declare_args() {
  # Maximum number of Dart processes to run in parallel.
  #
  # Dart analyzer uses a lot of memory which may cause issues when building
  # with many parallel jobs e.g. when using goma. To avoid out-of-memory
  # errors we explicitly reduce the number of jobs.
  concurrent_dart_jobs = default_concurrent_jobs.dart
}

if (current_toolchain == dart_toolchain) {
  pool("dart_pool") {
    depth = concurrent_dart_jobs
  }
} else {
  # A toolchain dedicated to processing and analyzing Dart packages.
  # The only targets in this toolchain are action() targets, so it
  # has no real tools.  But every toolchain needs stamp and copy.
  toolchain("dartlang") {
    tool("stamp") {
      command = stamp_command
      description = stamp_description
    }
    tool("copy") {
      command = copy_command
      description = copy_description
    }

    toolchain_args = {
      toolchain_variant = {
      }
      toolchain_variant = {
        base = get_label_info(":dartlang", "label_no_toolchain")
      }
    }
  }
}
