# Copyright 2014 The Chromium 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/config/ui.gni")

if (is_android) {
  import("//build/config/android/config.gni")
}

if (cpu_arch == "arm") {
  import("//build/config/arm.gni")
} else {
  # TODO(brettw) remove this once && early-out is checked in.
  arm_version = 0
}

declare_args() {
  # Enable asserts, even in release builds.
  sky_asserts_always_on = false

  # Experimental support for the Dart VM.
  sky_use_dart = false
}

# feature_defines_list ---------------------------------------------------------

feature_defines_list = []

if (is_debug) {
  # TODO(GYP) this should also be set when release_valgrind_build is set,
  # but we don't have that flag in the GN build yet.
  feature_defines_list += [ "WTF_USE_DYNAMIC_ANNOTATIONS=1" ]
}

if (!is_mac) {
  # Mac OS X has not implemented support for ENABLE(OPENTYPE_VERTICAL) yet.
  feature_defines_list += [ "ENABLE_OPENTYPE_VERTICAL=1" ]
}

if (sky_asserts_always_on) {
  feature_defines_list += [ "ENABLE_ASSERT=1" ]
}

if (sky_use_dart) {
  feature_defines_list += [ "WTF_USE_DART=1" ]
}

# feature_defines_string -------------------------------------------------------

# Convert the list to a space-separated string for passing to scripts.
# This would be the equivalent of passing '<(feature_defines)' in GYP.
feature_defines_string =
    exec_script("build/gn_list_to_space_separated_string.py",
                feature_defines_list,
                "trim string")
