# Copyright 2021 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.

config("platform_configuration") {
  configs = [ "//starboard/build/config/sabi" ]
  cflags = []
  ldflags = [ "-static-libstdc++" ]

  if (current_toolchain == default_toolchain) {
    cflags += [
      "-O2",
      "-Wno-unused-parameter",
    ]
  }

  if (is_debug) {
    cflags += [
      "-frtti",
      "-O0",
    ]
  } else if (is_devel) {
    cflags += [
      "-frtti",
      "-O2",
    ]
  } else {
    cflags += [
      "-fno-rtti",
      "-O2",
      "-gline-tables-only",
    ]
  }

  # if (!cobalt_fastbuild && (is_debug || is_devel)) {
  #   cflags += ["-g"]
  # }

  if (is_clang) {
    cflags += [
      "-Werror",
      "-fcolor-diagnostics",

      # Default visibility to hidden, to enable dead stripping.
      "-fvisibility=hidden",

      # Warn for implicit type conversions that may change a value.
      "-Wconversion",

      # Warns on switches on enums that cover all enum values but
      # also contain a default: branch. Chrome is full of that.
      "-Wno-covered-switch-default",

      # protobuf uses hash_map.
      "-Wno-deprecated",

      # Don"t warn about the "struct foo f = {0};" initialization pattern.
      "-Wno-missing-field-initializers",

      # Do not warn for implicit sign conversions.
      "-Wno-sign-conversion",
      "-fno-strict-aliasing",  # See http://crbug.com/32204

      # Triggered by the COMPILE_ASSERT macro.
      "-Wno-unused-local-typedef",

      # Do not warn if a function or variable cannot be implicitly
      # instantiated.
      "-Wno-undefined-var-template",

      # Do not warn about unused function params.
      "-Wno-unused-parameter",
    ]
  }

  # Defined to get format macro constants from <inttypes.h>.
  defines = [ "__STDC_FORMAT_MACROS" ]

  if (sb_pedantic_warnings) {
    cflags += [
      "-Wall",
      "-Wextra",
      "-Wunreachable-code",
    ]
  } else {
    cflags += [
      # 'this' pointer cannot be NULL...pointer may be assumed
      # to always convert to true.
      "-Wno-undefined-bool-conversion",

      # Skia doesn't use overrides.
      "-Wno-inconsistent-missing-override",

      # Do not warn for implicit type conversions that may change a value.
      "-Wno-conversion",

      # shifting a negative signed value is undefined
      "-Wno-shift-negative-value",

      # Width of bit-field exceeds width of its type- value will be truncated
      "-Wno-bitfield-width",
    ]
  }
}
