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

declare_args() {
  # Whether to build everything with coverage information.
  # After building with this, run tests and then run
  #    llvm/utils/prepare-code-coverage-artifact.py  \
  #        .../llvm-profdata .../llvm-cov out/gn/profiles/ report/ \
  #        out/gn/bin/llvm-undname ...`
  # to generate a HTML report for the binaries passed in the last line.
  llvm_build_instrumented_coverage = false

  # If set, puts relative paths in debug info.
  # Makes the build output independent of the build directory, but makes
  # most debuggers harder to use. See "Getting to local determinism" and
  # "Getting debuggers to work well with locally deterministic builds" in
  # http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
  # for more information.
  use_relative_paths_in_debug_info = false

  # The version of host gcc. Ignored if is_clang is true.
  gcc_version = 9
}

assert(!llvm_build_instrumented_coverage || is_clang,
       "llvm_build_instrumented_coverage requires clang as host compiler")

config("compiler_defaults") {
  defines = []

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

  if (llvm_enable_expensive_checks) {
    defines += [ "EXPENSIVE_CHECKS" ]
  }

  asmflags = target_flags
  cflags = target_flags
  ldflags = target_flags + target_ldflags

  # Mostly for compiler-rt, see compiler-rt/cmake/config-ix.cmake
  if (current_os == "ios") {
    asmflags += [ "-miphoneos-version-min=8.0" ]
    cflags += [ "-miphoneos-version-min=8.0" ]
    ldflags += [ "-miphoneos-version-min=8.0" ]
  }
  if (current_os == "mac") {
    asmflags += [ "-mmacosx-version-min=10.10" ]
    cflags += [ "-mmacosx-version-min=10.10" ]
    ldflags += [ "-mmacosx-version-min=10.10" ]
  }

  assert(symbol_level == 0 || symbol_level == 1 || symbol_level == 2,
         "Unexpected symbol_level")
  if (host_os != "win") {
    if (symbol_level == 2) {
      cflags += [ "-g" ]

      # For full debug-info -g builds, --gdb-index makes links ~15% slower, and
      # gdb symbol reading time 1500% faster (lld links in 4.4 instead of 3.9s,
      # and gdb loads and runs it in 2s instead of in 30s).  It's likely that
      # people doing symbol_level=2 want to run a debugger (since
      # symbol_level=2 isn't the default). So this seems like the right
      # tradeoff.
      if (host_os != "mac" && use_lld) {
        cflags += [ "-ggnu-pubnames" ]  # PR34820
        ldflags += [ "-Wl,--gdb-index" ]
      }
    } else if (symbol_level == 1) {
      cflags += [ "-g1" ]
      # For linetable-only -g1 builds, --gdb-index makes links ~8% slower, but
      # links are 4x faster than -g builds so it's a fairly small absolute cost.
      # On the other hand, gdb startup is well below 1s with and without the
      # index, and people using -g1 likely don't use a debugger. So don't use
      # the flag here.
    }
    if (is_optimized) {
      cflags += [ "-O3" ]
    }
    cflags += [ "-fdiagnostics-color" ]
    if (use_lld) {
      ldflags += [ "-Wl,--color-diagnostics" ]
    }
    cflags_cc = [
      "-std=c++14",
      "-fvisibility-inlines-hidden",
    ]
  } else {
    if (symbol_level != 0) {
      cflags += [
        "/Zi",
        "/FS",
      ]
      if (symbol_level == 1 && is_clang) {
        cflags += [ "-gline-tables-only" ]
      }
      ldflags += [ "/DEBUG" ]

      # Speed up links with ghash on windows.
      if (use_lld && is_clang) {
        cflags += [ "-gcodeview-ghash" ]
        ldflags += [ "/DEBUG:GHASH" ]
      }
    }
    if (is_optimized) {
      cflags += [
        "/O2",
        "/Gw",
        "/Zc:inline",
      ]
      ldflags += [
        "/OPT:REF",
        "/OPT:ICF",
      ]
    }
    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-" ]

    # 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" ]
    if (is_clang) {
      cflags += [
        "-Wdelete-non-virtual-dtor",
        "-Wstring-conversion",
      ]
    } else {
      cflags += [
        # GCC's -Wcomment complains about // comments ending with '\' if the
        # next line is also a // comment.
        "-Wno-comment",

        # Disable gcc's potentially uninitialized use analysis as it presents
        # lots of false positives.
        "-Wno-maybe-uninitialized",
      ]
      cflags_cc += [
        # The LLVM libraries have no stable C++ API, so -Wnoexcept-type is not
        # useful.
        "-Wno-noexcept-type",
      ]
      if (gcc_version >= 8) {
        cflags_cc += [
          # Disable -Wclass-memaccess, a C++-only warning from GCC 8 that fires
          # on LLVM's ADT classes.
          "-Wno-class-memaccess",
        ]
      }
      if (gcc_version >= 9) {
        cflags_cc += [
          # Disable -Wredundant-move on GCC>=9. GCC wants to remove std::move
          # in code like "A foo(ConvertibleToA a) { return std::move(a); }",
          # but this code does not compile (or uses the copy constructor
          # instead) on clang<=3.8. Clang also has a -Wredundant-move, but it
          # only fires when the types match exactly, so we can keep it here.
          "-Wno-redundant-move",
        ]
      }
    }
    if (is_clang && use_goma) {
      # goma converts all paths to lowercase on the server, breaking this
      # warning.
      cflags += [ "-Wno-nonportable-include-path" ]
    }
  }

  # On Windows, the linker is not invoked through the compiler driver.
  if (use_lld && host_os != "win") {
    if (host_os == "mac") {
      ldflags += [ "-fuse-ld=lld.darwinnew" ]
    } else {
      ldflags += [ "-fuse-ld=lld" ]
    }
  }

  if (llvm_build_instrumented_coverage) {
    cflags += [
      "-fcoverage-mapping",

      # Using an absolute path here is lame, but it's used at test execution
      # time to generate the profiles, and lit doesn't specify a fixed folder
      # for test execution -- so this is the only way to get all profiles into
      # a single folder like llvm/utils/prepare-code-coverage-artifact.py
      # expects.
      "-fprofile-instr-generate=" +
          rebase_path("$root_build_dir/profiles/%4m.profraw"),
    ]
    ldflags += [ "-fprofile-instr-generate" ]
  }

  # Deterministic build setup, see
  # http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
  if (current_os == "win") {
    ldflags += [ "/pdbaltpath:%_PDB%" ]
  }
  if (is_clang) {
    cflags += [
      "-no-canonical-prefixes",
      "-Werror=date-time",
    ]
    if (current_os == "win") {
      cflags += [ "-fmsc-version=1916" ]
      if (use_lld) {
        cflags += [ "/Brepro" ]
        ldflags += [ "/Brepro" ]
      }
    }
    if (use_relative_paths_in_debug_info) {
      cflags += [
        "-fdebug-compilation-dir",
        ".",
      ]
    }
  }
  if (sysroot != "") {
    if (current_os == "win") {
      assert(is_clang, "sysroot only works with clang-cl as host compiler")
      cflags += [ "/winsysroot" + rebase_path(sysroot, root_build_dir) ]
    } else if (current_os != "ios" && current_os != "mac") {
      cflags += [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
    }
  }
  if ((current_os == "ios" || current_os == "mac") &&
      (clang_base_path != "" || sysroot != "")) {
    if (current_os == "ios" && current_cpu == "arm64") {
      sdk_path = ios_sdk_path
    } else if (current_os == "ios" && current_cpu == "x64") {
      sdk_path = iossim_sdk_path
    } else if (current_os == "mac") {
      sdk_path = mac_sdk_path
    }
    cflags += [
      "-isysroot",
      rebase_path(sdk_path, root_build_dir),
    ]
    ldflags += [
      "-isysroot",
      rebase_path(sdk_path, root_build_dir),
    ]
  }
  if (sysroot != "" && current_os != "win" && is_clang) {
    cflags += [ "-Wpoison-system-directories" ]
  }
  assert(
      !use_goma || sysroot != "",
      "goma needs a sysroot: run `llvm/utils/sysroot.py make-fake --out-dir=sysroot` and add `sysroot = \"//sysroot\"` to your args.gn")

  if (use_ubsan) {
    assert(is_clang && current_os == "linux",
           "ubsan only supported on Linux/Clang")
    cflags += [ "-fsanitize=undefined" ]
    ldflags += [ "-fsanitize=undefined" ]
  }

  if (use_asan) {
    assert(is_clang && current_os == "linux",
           "asan only supported on Linux/Clang")
    cflags += [ "-fsanitize=address" ]
    ldflags += [ "-fsanitize=address" ]
  }

  if (use_tsan) {
    assert(is_clang && current_os == "linux",
           "tsan only supported on Linux/Clang")
    cflags += [ "-fsanitize=thread" ]
    ldflags += [ "-fsanitize=thread" ]
  }

  if (use_thinlto) {
    assert(is_clang, "ThinLTO only supported on Clang")

    lto_opt_level = 2

    cflags += [ "-flto=thin" ]

    if (host_os == "win") {
      ldflags += [
        "/opt:lldlto=" + lto_opt_level,
        "/opt:lldltojobs=" + max_jobs_per_lto_link,
      ]
    } else {
      ldflags += [
        "-flto=thin",
        "-Wl,--thinlto-jobs=" + max_jobs_per_lto_link,
        "-Wl,--lto-O" + lto_opt_level,
      ]
    }
  }
}

config("no_exceptions") {
  if (host_os != "win") {
    cflags_cc = [ "-fno-exceptions" ]
  }
}

config("no_rtti") {
  if (current_os == "win") {
    cflags_cc = [ "/GR-" ]
  } else {
    cflags_cc = [ "-fno-rtti" ]
  }
}

# To make an archive that can be distributed, you need to remove this config and
# set complete_static_lib.
config("thin_archive") {
  if (current_os != "ios" && current_os != "mac" && current_os != "win") {
    arflags = [ "-T" ]
  }
}

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") {
  if (host_os != "win") {
    cflags = [ "-fno-strict-aliasing" ]
  }
  include_dirs = [
    "//clang/include",
    "$root_gen_dir/clang/include",
  ]
}

config("crt_code") {
  include_dirs = [ "//compiler-rt/lib" ]
  cflags = [
    "-fPIC",
    "-funwind-tables",
    "-gline-tables-only",
    "-fvisibility=hidden",
  ]
}

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