# 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 = []

  if (current_toolchain == host_toolchain) {
    cflags += [
      "-O2",
      "-Wno-unused-parameter",
    ]
  } else {
    cflags_cc = [ "-std=gnu++14" ]
    ldflags = [ "-static-libstdc++" ]

    if (is_debug) {
      cflags += [ "-O0" ]
      configs += [ "//build/config/compiler:rtti" ]
    } else if (is_devel) {
      cflags += [ "-O2" ]
      configs += [ "//build/config/compiler:rtti" ]
    } else {
      cflags += [
        "-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",
  ]
}
