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

declare_args() {
  # Directory containing prebuilt Dart SDK.
  # This must have in its `bin/` subdirectory `gen_snapshot.OS-CPU` binaries.
  # Set to empty for a local build.
  prebuilt_dart_sdk = "//topaz/tools/prebuilt-dart-sdk/${host_platform}"

  # Whether to use the prebuilt Dart SDK for everything.
  # When setting this to false, the preubilt Dart SDK will not be used in
  # situations where the version of the SDK matters, but may still be used as an
  # optimization where the version does not matter.
  use_prebuilt_dart_sdk = true
}

# For using the prebuilts even when use_prebuilt_dart_sdk is false.
prebuilt_dart = "${prebuilt_dart_sdk}/bin/dart"
prebuilt_gen_snapshot =
    "${prebuilt_dart_sdk}/bin/gen_snapshot.${current_os}-${current_cpu}"
prebuilt_gen_snapshot_product =
    "${prebuilt_dart_sdk}/bin/gen_snapshot_product.${current_os}-${current_cpu}"

if (use_prebuilt_dart_sdk) {
  dart_sdk = "${prebuilt_dart_sdk}"
  dart_sdk_deps = []

  gen_snapshot = prebuilt_gen_snapshot
  gen_snapshot_product = prebuilt_gen_snapshot_product
  gen_snapshot_deps = []
} else {
  _dart_sdk_label = "//third_party/dart:create_sdk($host_toolchain)"
  dart_sdk = get_label_info(_dart_sdk_label, "root_out_dir") + "/dart-sdk"
  dart_sdk_deps = [ _dart_sdk_label ]

  _gen_snapshot_label =
      "//third_party/dart/runtime/bin:gen_snapshot($host_toolchain)"
  _gen_snapshot_product_label =
      "//third_party/dart/runtime/bin:gen_snapshot_product($host_toolchain)"
  gen_snapshot =
      get_label_info(_gen_snapshot_label, "root_out_dir") + "/gen_snapshot"
  gen_snapshot_product =
      get_label_info(_gen_snapshot_product_label, "root_out_dir") +
      "/gen_snapshot_product"
  gen_snapshot_deps = [
    _gen_snapshot_label,
    _gen_snapshot_product_label,
  ]
}
