import("//llvm/utils/gn/build/buildflags.gni")
import("//llvm/utils/gn/build/mac_sdk.gni")
import("//llvm/utils/gn/build/toolchain/compiler.gni")

config("compiler_defaults") {
  defines = []

  # FIXME: Don't define this globally here.
  if (host_os != "win") {
    defines += [ "LLVM_ON_UNIX" ]
  }

  if (!llvm_enable_assertions) {
    defines += [ "NDEBUG" ]
  }

  cflags = []

  if (host_os == "mac" && clang_base_path != "") {
    cflags += [
      "-isysroot",
      mac_sdk_path,
    ]
  }

  if (host_os != "win") {
    if (is_debug) {
      cflags += [ "-g" ]
    } else {
      cflags += [ "-O3" ]
    }
    cflags += [ "-fdiagnostics-color" ]
    cflags_cc = [
      "-std=c++11",
      "-fno-exceptions",
      "-fno-rtti",
      "-fvisibility-inlines-hidden",
    ]
  } else {
    if (is_debug) {
      cflags += [ "/Zi" ]
    } else {
      cflags += [
        "/O2",
        "/Zc:inline",
      ]
    }
    defines += [
      "_CRT_SECURE_NO_DEPRECATE",
      "_CRT_SECURE_NO_WARNINGS",
      "_CRT_NONSTDC_NO_DEPRECATE",
      "_CRT_NONSTDC_NO_WARNINGS",
      "_SCL_SECURE_NO_DEPRECATE",
      "_SCL_SECURE_NO_WARNINGS",

      "_HAS_EXCEPTIONS=0",
      "_UNICODE",
      "UNICODE",
    ]
    cflags += [
      "/EHs-c-",
      "/GR-",
    ]

    # The MSVC default value (1 MB) is not enough for parsing recursive C++
    # templates in Clang.
    ldflags = [ "/STACK:10000000" ]
  }

  # Warning setup.
  if (host_os == "win" && !is_clang) {
    cflags += [
      # Suppress ''modifier' : used more than once' (__forceinline and inline).
      "-wd4141",

      # Suppress 'conversion from 'type1' to 'type2', possible loss of data'.
      "-wd4244",

      # Suppress 'conversion from 'size_t' to 'type', possible loss of data'.
      "-wd4267",

      # Suppress 'no matching operator delete found'.
      "-wd4291",

      # Suppress 'noexcept used with no exception handling mode specified'.
      "-wd4577",

      # Suppress 'destructor was implicitly defined as deleted'.
      "-wd4624",

      # Suppress 'unsafe mix of type <type> and type <type> in operation'.
      "-wd4805",
    ]
  } else {
    if (host_os == "win") {
      cflags += [ "/W4" ]
    } else {
      cflags += [
        "-Wall",
        "-Wextra",
      ]
    }
    cflags += [
      "-Wno-unused-parameter",
      "-Wstring-conversion",
    ]
    if (is_clang) {
      cflags += [ "-Wdelete-non-virtual-dtor" ]
    }
    if (is_clang && use_goma) {
      # goma converts all paths to lowercase on the server, breaking this
      # warning.
      cflags += [ "-Wno-nonportable-include-path" ]
    }
  }
}

config("llvm_code") {
  include_dirs = [
    "//llvm/include",
    "$root_gen_dir/llvm/include",
  ]
}

config("lld_code") {
  include_dirs = [
    "//lld/include",
    "$root_gen_dir/lld/include",
  ]
}

config("clang_code") {
  include_dirs = [
    "//clang/include",
    "$root_gen_dir/clang/include",
  ]
}

config("warn_covered_switch_default") {
  if (is_clang) {
    cflags = [ "-Wcovered-switch-default" ]
  }
}
