# 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("config.gni")
if (is_clang) {
  import("//build/config/clang/clang.gni")
}
if (is_posix) {
  import("//build/config/gcc/gcc_version.gni")
}

visibility = ["//sky/*"]

# features ---------------------------------------------------------------------

config("features") {
  defines = feature_defines_list
}

# inside_blink -----------------------------------------------------------------

config("inside_blink") {
  defines = [
    "BLINK_IMPLEMENTATION=1",
    "INSIDE_BLINK",
  ]
}

# config -----------------------------------------------------------------------

config("config") {
  include_dirs = [
    ".",
    "$root_gen_dir/sky",
  ]

  cflags = []
  defines = []

  if (is_win) {
    cflags += [
      "/wd4305",  # Truncation from 'type1' to 'type2'.
      "/wd4324",  # Struct padded due to declspec(align).
      "/wd4714",  # Function marked forceinline not inlined.
      "/wd4800",  # Value forced to bool.
      "/wd4996",  # Deprecated function call.
    ]
  }

  if (is_win) {
    if (component_mode == "shared_library") {
      defines += [ "USING_V8_SHARED" ]
    }
  } else {  # ! Windows
    # TODO(GYP) this should be based on gcc_version >= 46 but GN doesn't have a
    # concept of GCC version yet.

    # Disable warnings about c++0x compatibility, as some names (such as
    # nullptr) conflict with upcoming c++0x types.
    cflags_cc = [ "-Wno-c++0x-compat" ]
  }

  if (is_linux && cpu_arch == "arm") {
    # Due to a bug in gcc arm, we get warnings about uninitialized
    # timesNewRoman.unstatic.3258 and colorTransparent.unstatic.4879.
    cflags += [ "-Wno-uninitialized" ]
  }

  if (is_posix && gcc_version >= 49) {
    cflags += [ "-Wno-unused-but-set-variable" ]
  }

  if (is_clang) {
    if (sky_gc_plugin && clang_use_chrome_plugins) {
      # TODO(GYP)
      #'cflags': ['<!@(../../tools/clang/scripts/blink_gc_plugin_flags.sh enable-oilpan=<(sky_enable_oilpan) dump-graph=<(sky_gc_plugin_dump_graph))'],
    }
  }
}

# The follow configs apply to all targets except for unit tests, which rely on
# static initializers.
config("non_test_config") {
  cflags = []

  if (is_clang) {
    cflags += [ "-Wglobal-constructors" ]
  }
}
