# 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" ]
}

config("pedantic_warnings") {
  cflags = [
    "-Wall",
    "-Wextra",
    "-Wunreachable-code",
  ]
}

config("no_pedantic_warnings") {
  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",
  ]
}
