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