# Copyright (c) 2017, 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.

declare_args() {
  # Instead of using is_debug, we introduce a different flag for specifying a
  # Debug build of Dart so that clients can still use a Release build of Dart
  # while themselves doing a Debug build.
  dart_debug = false

  # Set the runtime mode. This affects how the runtime is built and what
  # features it has. Valid values are:
  # 'develop' (the default) - VM is built to run as a JIT with all development
  # features enabled.
  # 'profile' - The VM is built to run with AOT compiled code with only the
  # CPU profiling features enabled.
  # 'release' - The VM is built to run with AOT compiled code with no developer
  # features enabled.
  #
  # These settings are only used for Flutter, at the moment. A standalone build
  # of the Dart VM should leave this set to "develop", and should set
  # 'is_debug', 'is_release', or 'is_product'.
  #
  # TODO(rmacnak): dart_runtime_mode no longer selects whether libdart is build
  # for JIT or AOT, since libdart waw split into libdart_jit and
  # libdart_aotruntime. We should remove this flag and just set
  # dart_debug/dart_product.
  dart_runtime_mode = "develop"

  # Explicitly set the target architecture to use a simulator.
  # Available options are: arm, arm64, x64, ia32, riscv32, riscv64.
  dart_target_arch = target_cpu

  # Force use of the simulator even when the Dart target arch matches the current cpu.
  dart_force_simulator = false

  # The optimization level to use for debug builds. Defaults to 0 for builds with
  # code coverage enabled.
  dart_debug_optimization_level = "2"

  # The optimization level to use for non-debug builds.
  dart_default_optimization_level = "2"

  # Whether to enable code coverage for the standalone VM.
  dart_vm_code_coverage = false

  # Whether to fall back to built-in root certificates when they cannot be
  # verified at the operating system level.
  dart_use_fallback_root_certificates = false

  # Whether to link Crashpad library for crash handling. Only supported on
  # Windows for now.
  dart_use_crashpad = false

  # Whether the Dart binary version string should include the git hash and
  # git commit time.
  dart_version_git_info = true

  # Controls whether the VM is built as a static library or a shared library.
  dart_component_kind = "static_library"

  # Whether the VM includes the kernel service in all modes (debug, release,
  # product).
  exclude_kernel_service = false

  # Whether libdart should export the symbols of the Dart API.
  dart_lib_export_symbols = true

  # Whether to use compressed pointers.
  dart_use_compressed_pointers = false

  # Whether the sampling heap profiler should be included in product mode.
  dart_include_sampling_heap_profiler = false

  # Whether features that depend on Perfetto should be built. We temporarily
  # need to define this to allow excluding code that depends on Perfetto from
  # being built on platforms which have a problem linking in the Perfetto
  # library.
  dart_support_perfetto = true

  # Whether to support dynamic loading and interpretation of Dart bytecode.
  dart_dynamic_modules = false
}

declare_args() {
  # The analyze_snapshot tool is only supported on 64 bit AOT builds that use
  # ELF.
  build_analyze_snapshot =
      (target_os == "linux" || target_os == "android" ||
       target_os == "fuchsia") &&
      (dart_target_arch == "x64" || dart_target_arch == "arm64" ||
       dart_target_arch == "riscv64")
}

if (is_fuchsia) {
  declare_args() {
    # In case some repo uses build rules in dart/sdk, but put fuchsia-gn-sdk in
    # a different folder, this gn arg can specify the location of fuchsia-gn-sdk.
    if (!defined(fuchsia_gn_sdk)) {
      fuchsia_gn_sdk = "//third_party/fuchsia/gn-sdk"
    }
  }
  import(fuchsia_gn_sdk + "/src/gn_configs.gni")
}
