# 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("compiler_flags") {
  cflags = []
  cflags_c = []
  cflags_cc = []
  defines = []
  ldflags = []

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

  if (is_clang) {
    ldflags += [ "-fuse-ld=lld" ]
    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 an implicit exception spec mismatch.
      "-Wno-implicit-exception-spec-mismatch",

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

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

  defines += [
    # By default, <EGL/eglplatform.h> pulls in some X11 headers that have some
    # nasty macros (|Status|, for example) that conflict with Chromium base.
    "MESA_EGL_NO_X11_HEADERS",
  ]
  cflags_c += [
    # Limit to C99. This allows Linux to be a canary build for any
    # C11 features that are not supported on some platforms' compilers.
    "-std=c99",
  ]
  cflags_cc = [ "-std=gnu++14" ]
  ldflags += [
    "-Wl,-rpath=\$ORIGIN/lib",

    # Cleanup unused sections
    "-Wl,-gc-sections",
  ]

  if (use_asan) {
    cflags += [
      "-fsanitize=address",
      "-fno-omit-frame-pointer",
    ]
    ldflags += [
      "-fsanitize=address",

      # Force linking of the helpers in sanitizer_options.cc
      "-Wl,-u_sanitizer_options_link_helper",
    ]
    defines += [ "ADDRESS_SANITIZER" ]
  } else if (use_tsan) {
    cflags += [
      "-fsanitize=thread",
      "-fno-omit-frame-pointer",
    ]
    ldflags += [ "-fsanitize=thread" ]
    defines += [ "THREAD_SANITIZER" ]
  }
}

config("platform_configuration") {
  defines = []
  ldflags = []
  libs = [
    "asound",
    "dl",
    "pthread",
    "rt",
  ]

  if (!sb_is_evergreen) {
    ldflags += [ "-static-libstdc++" ]
  }

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

    # Enable GNU extensions to get prototypes like ffsl.
    "_GNU_SOURCE=1",
  ]

  if (is_debug) {
    defines += [
      "_GLIBCXX_DEBUG",
      "_LIBCPP_DEBUG=1",
    ]
  } else if (is_devel) {
    defines += [
      "_GLIBCXX_DEBUG",
      "_LIBCPP_DEBUG=0",
    ]
  }
}

config("libraries") {
  ldflags = [ "-Wl,--wrap=eglSwapBuffers" ]
  libs = [
    "X11",
    "Xcomposite",
    "Xrender",
  ]
}

config("speed") {
  cflags = [
    "-O2",

    # Compile symbols in separate sections
    "-ffunction-sections",
    "-fdata-sections",
  ]
}

config("size") {
  cflags = [
    "-Os",

    # Compile symbols in separate sections
    "-ffunction-sections",
    "-fdata-sections",
  ]
}

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",
    "-Wno-undefined-var-template",
  ]
}
