# Copyright 2017 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# TODO: change to //starboard eventually
import("//cobalt/build/config/base.gni")
import("//starboard/build/delegated_config.gni")

# =============================================================================
# COMPILER DEFAULTS
# =============================================================================

# TODO: only set these defines on the files that actually need them
config("compiler_defaults") {
  # The canonical way to detect Starboard is #if defined(STARBOARD). This
  # should be defined both when building Starboard itself, and when building
  # any other source file in a Starboard-based project.
  defines = [ "STARBOARD" ]

  if (gl_type == "none") {
    defines += [ "SB_GYP_GL_TYPE_IS_NONE=1" ]
  } else {
    defines += [ "SB_GYP_GL_TYPE_IS_NONE=0" ]
  }

  if (abort_on_allocation_failure) {
    defines += [ "SB_ABORT_ON_ALLOCATION_FAILURE" ]
  }

  if (sb_allow_memory_tracking) {
    defines += [ "STARBOARD_ALLOWS_MEMORY_TRACKING" ]
  }

  # There doesn't appear to be any way to use the C preprocessor to do
  # string concatenation with the / character. This prevents us from using
  # the preprocessor to assemble an include file path, so we have to do
  # the concatenation here in GN.
  # http://stackoverflow.com/questions/29601786/c-preprocessor-building-a-path-string
  defines += [
    "STARBOARD_ATOMIC_INCLUDE=\"$starboard_path/atomic_public.h\"",
    "STARBOARD_CONFIGURATION_INCLUDE=\"$starboard_path/configuration_public.h\"",
    "STARBOARD_THREAD_TYPES_INCLUDE=\"$starboard_path/thread_types_public.h\"",
  ]

}

# =============================================================================
# DELEGATED CONFIGS
# =============================================================================

# Enables pedantic levels of warnings for the current toolchain.
delegated_config("pedantic_warnings") {
  path = "//$starboard_path"
  generate_default = false
}

# Controls the optimization level
delegated_config("optimizations") {
  path = "//$starboard_path"
  prefixes = [ "no", "debuggable", "full" ]
}

# Enables/disables rtti
delegated_config("rtti") {
  path = "//$starboard_path"
}

# Enables the exit-time-destructors warning.
config("wexit_time_destructors") {
  configs = [ "//$starboard_path:wexit_time_destructors" ]
}
