import("//llvm/lib/Target/targets_string.gni")
import("//llvm/utils/gn/build/buildflags.gni")
import("//llvm/utils/gn/build/libs/pthread/enable.gni")
import("//llvm/utils/gn/build/libs/terminfo/enable.gni")
import("//llvm/utils/gn/build/libs/xml/enable.gni")
import("//llvm/utils/gn/build/libs/zlib/enable.gni")
import("//llvm/utils/gn/build/write_cmake_config.gni")
import("//llvm/version.gni")

write_cmake_config("BuildVariables.inc") {
  input = "BuildVariables.inc.in"
  output = "$target_gen_dir/BuildVariables.inc"

  if (is_debug) {
    build_mode = "debug"
  } else {
    build_mode = "release"
  }

  # FIXME: Why doesn't llvm-config do this, why is this done in
  # llvm-config/CMakeLists.txt?
  if (host_os == "win") {
    l = ""
    lib = ".lib"
  } else {
    l = "-l"
    lib = ""
  }

  # Windows doesn't use any of libxml2,terminfo, zlib by default.
  # Make GN not warn about these variables being unused.
  not_needed([
               "l",
               "lib",
             ])

  system_libs = ""
  if (host_os == "win") {
    # libuuid required for FOLDERID_Profile usage in
    # lib/Support/Windows/Path.inc.
    # advapi32 required for CryptAcquireContextW in
    # lib/Support/Windows/Path.inc
    system_libs = "psapi.lib shell32.lib ole32.lib uuid.lib advapi32"
  } else {
    system_libs += "-lm"
    if (host_os == "linux") {
      system_libs += " -lrt -ldl"
    }
    if (llvm_enable_threads) {
      system_libs += " -llibpthreads"
      if (host_os == "linux") {
        system_libs += " -latomic"
      }
    }
  }
  if (llvm_enable_libxml2) {
    system_libs += " ${l}xml2${lib}"
  }
  if (llvm_enable_terminfo) {
    system_libs += " ${l}ncurses${lib}"
  }
  if (llvm_enable_zlib) {
    system_libs += " ${l}z${lib}"
  }

  values = [
    "LLVM_SRC_ROOT=" + rebase_path("//llvm"),
    "LLVM_OBJ_ROOT=" + rebase_path(root_out_dir),

    # FIXME: Only the bits needed to run LLVM's test are implemented.
    "LLVM_CPPFLAGS=.",  # FIXME
    "LLVM_CFLAGS=.",  # FIXME
    "LLVM_LDFLAGS=.",  # FIXME
    "LLVM_CXXFLAGS=.",  # FIXME
    "LLVM_BUILDMODE=$build_mode",
    "LLVM_LIBDIR_SUFFIX=",
    "LLVM_TARGETS_BUILT=$llvm_targets_to_build_string",
    "LLVM_SYSTEM_LIBS=$system_libs",
    "LLVM_BUILD_SYSTEM=gn",
    "LLVM_HAS_RTTI=0",
    "LLVM_BUILD_LLVM_DYLIB=0",
    "LLVM_LINK_LLVM_DYLIB=0",
    "BUILD_SHARED_LIBS=0",
    "LLVM_DYLIB_COMPONENTS=all",
    "LLVM_DYLIB_VERSION=${llvm_version_major}svn",
    "LLVM_HAS_GLOBAL_ISEL=1",
    "LLVM_TOOLS_INSTALL_DIR=",
  ]
}

# FIXME: It'd be nice to not depend on llvm-build on this, Depending on all the
# LLVMBuild.txt files just for this seems a bit overkill.  `gn desc` should
# have all this information too and could be called at build time.
# When this is removed, update llvm/test/BUILD.gn to no longer have unnecessary
# deps on a couple llvm/lib/ targets.
action("LibraryDependencies.inc") {
  script = "//llvm/utils/llvm-build/llvm-build"
  output = "$target_gen_dir/LibraryDependencies.inc"
  args = [
    "--native-target=$native_target",
    "--enable-targets=$llvm_targets_to_build_string",
    "--write-library-table=" + rebase_path(output, root_out_dir),
  ]
  outputs = [
    output,
  ]
}

executable("llvm-config") {
  deps = [
    ":BuildVariables.inc",
    ":LibraryDependencies.inc",
    "//llvm/include/llvm/Config:config",
    "//llvm/include/llvm/Config:llvm-config",
    "//llvm/lib/Support",
  ]

  # To pick up the generated inc files.
  include_dirs = [ "$target_gen_dir" ]
  sources = [
    "llvm-config.cpp",
  ]
}
