# 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 disable support for secure sockets in the Dart IO library.
  dart_disable_secure_socket = 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 to support dynamic loading and interpretation of Dart bytecode.
  dart_dynamic_modules = false
}

declare_args() {
  # Whether features that depend on Perfetto should be built. We 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, e.g. watchOS.
  #
  # We also exclude perfetto support when producing builds which set
  # dart_runtime_mode to release e.g. Dart Product builds or Flutter
  # release engine variants. This does not affect product AOT runtime
  # which shipped with Dart SDK.
  #
  # Note: including Perfetto support automatically includes profiler
  # into the resulting binary.
  #
  # is_watchos may be undefined when Dart SDK is built from the Flutter
  # engine tree.
  dart_support_perfetto =
      !((defined(is_watchos) && is_watchos) || dart_runtime_mode == "release")

  # The analyze_snapshot tool is only supported on 64 bit AOT builds.
  build_analyze_snapshot =
      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")
}
