# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/toolchain/ccache.gni")

config("cobalt_standalone") {
  defines = [ "HAVE_GLOG" ]
}

config("no_rtti") {
  cflags_cc = [ "-fno-rtti" ]
  cflags_objcc = cflags_cc
}

config("no_exceptions") {
  cflags_cc = [ "-fno-exceptions" ]
  cflags_objcc = cflags_cc
}

config("warn_implicit_fallthrough") {
  cflags = [ "-Wimplicit-fallthrough" ]
}

config("symbol_visibility_hidden") {
  # Disable libc++ visibility annotations to make sure that the compiler option
  # has effect on symbols defined in libc++ headers. Note that we don't want to
  # disable these annotations altogether to ensure that our toolchain is usable
  # outside of our build since not every user uses hidden visibility by default.
  defines = [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
  cflags = [ "-fvisibility=hidden" ]
}

config("shared_library_config") {
  cflags = []
  if (current_os == "linux") {
    cflags += [ "-fPIC" ]
  }
}

config("compiler") {
  asmflags = []
  cflags = [ "-fcolor-diagnostics" ]
  cflags_c = []
  cflags_cc = [ "-fvisibility-inlines-hidden" ]
  cflags_objc = []
  cflags_objcc = [ "-fvisibility-inlines-hidden" ]
  ldflags = []
  defines = []
  configs = []

  if (current_os == "fuchsia") {
    configs += [ "//build/config/fuchsia:compiler" ]
  } else {
    cflags_c += [ "-std=c11" ]
    cflags_cc += [
      "-std=c++17",
      "-stdlib=libc++",
    ]
    if (current_os == "linux") {
      configs += [ "//build/config/linux:compiler" ]
    } else if (current_os == "mac") {
      configs += [ "//build/config/mac:compiler" ]
    }
  }

  # Linker on macOS does not support `color-diagnostics`
  if (current_os != "mac") {
    ldflags += [ "-Wl,--color-diagnostics" ]
  }

  asmflags += cflags
  asmflags += cflags_c
}

config("debug") {
  cflags = [ "-O0" ]
  ldflags = cflags
}

config("release") {
  defines = [ "NDEBUG=1" ]
  cflags = [
    "-O3",
    "-fdata-sections",
    "-ffunction-sections",
  ]
  ldflags = cflags
  if (current_os == "mac") {
    ldflags += [ "-Wl,-dead_strip" ]
  } else {
    ldflags += [ "-Wl,--gc-sections" ]
  }
}

config("default_include_dirs") {
  include_dirs = [
    "//",
    "//sysroot/include",
    root_gen_dir,
  ]
}

config("executable_ldconfig") {
  ldflags = [
    "-Wl,-rpath=\$ORIGIN/",
    "-Wl,-rpath-link=",
  ]
}

config("default_warnings") {
  cflags = [
    "-Wall",
    "-Wextra",
    "-Wnewline-eof",
    "-Wno-unused-parameter",
  ]
}

# TODO(fxb/58162): delete once nothing is referencing this.
config("Wno-conversion") {
  cflags = [ "-Wno-conversion" ]
}

config("werror") {
  # ccache, at least in some configurations, caches preprocessed content. This
  # means that by the time the compiler sees it, macros are unrolled. A number
  # of gcc and clang diagnostics are conditioned on whether the source is part
  # of a macro or not. This is because a "reasonable" looking macro invocation
  # may end up doing something silly internally. This can mean self assignment
  # and tautological comparisons, since macros are not typed. Macros also tend
  # to over-parenthesize, and so on. This particular list of options was found
  # via trial and error, and might be the best way of keeping the build quiet.
  if (!use_ccache) {
    cflags = [
      "-Werror",

      # Declarations marked as deprecated should not cause build failures,
      # rather they should emit warnings to notify developers about the use of
      # deprecated interfaces.
      "-Wno-error=deprecated-declarations",

      # Do not add additional -Wno-error to this config.
    ]
  }
}
