import("//llvm/lib/Target/targets.gni")
import("//llvm/triples.gni")
import("//llvm/utils/gn/build/buildflags.gni")
import("//llvm/utils/gn/build/libs/edit/enable.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/xar/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")

# Contains actions to create config.h, llvm-config.h, abi-breaking.h,
# and the various .def files used by llvm/lib/Target.
# Other than in the cmake build, these are created at build time, not at
# config time. That way, they can run in parallel, and this pattern means that
# e.g. creating the clang config header (which happens in another gn file)
# doesn't block building lld.

# The headers are created by processing the foo.h.cmake files as input,
# to keep the gn build close to the cmake build.

# Other than in the cmake build, header generation doesn't do any feature
# checking. See also "Philosophy" in llvm/utils/gn/README.rst.

##############################################################################
# config.h, llvm-config.h, abi-breaking.h

# FIXME: Several of the config settings go in a global config header but
# are only used in a single translation unit -- so toggling that value
# causes a full rebuild when it really only has to rebuild a single file.
# Instead monolithing config headers, investigate using something like
# https://is.gd/buildflag_header_gni instead (needs to be done in both the
# cmake build and here).

# FIXME: This hardcodes a bunch of settings I never use; some of them should
# become declare_args if anyone wants to set them.

declare_args() {
  # Enable additional checks that alter the LLVM C++ ABI.
  llvm_enable_abi_breaking_checks = llvm_enable_assertions

  # Iterate unordered llvm containers in reverse.
  llvm_enable_reverse_iteration = false
}

write_cmake_config("abi-breaking") {
  input = "abi-breaking.h.cmake"
  output = "$target_gen_dir/abi-breaking.h"
  values = []

  if (llvm_enable_abi_breaking_checks) {
    values += [ "LLVM_ENABLE_ABI_BREAKING_CHECKS=1" ]
  } else {
    values += [ "LLVM_ENABLE_ABI_BREAKING_CHECKS=" ]
  }

  if (llvm_enable_reverse_iteration) {
    values += [ "LLVM_ENABLE_REVERSE_ITERATION=1" ]
  } else {
    values += [ "LLVM_ENABLE_REVERSE_ITERATION=" ]
  }
}

write_cmake_config("config") {
  public_deps = [
    ":llvm-config",
  ]

  input = "config.h.cmake"
  output = "$target_gen_dir/config.h"
  values = [
    "BUG_REPORT_URL=https://bugs.llvm.org/",
    "ENABLE_BACKTRACES=1",
    "ENABLE_CRASH_OVERRIDES=1",
    "BACKTRACE_HEADER=execinfo.h",
    "HAVE_CRASHREPORTERCLIENT_H=",
    "HAVE_DECL_FE_ALL_EXCEPT=1",
    "HAVE_DECL_FE_INEXACT=1",
    "LLVM_ENABLE_DIA_SDK=",
    "LLVM_ENABLE_CRASH_DUMPS=",
    "HAVE_ERRNO_H=1",
    "HAVE_FCNTL_H=1",
    "HAVE_FENV_H=1",
    "HAVE_FFI_CALL=",
    "HAVE_FFI_FFI_H=",
    "HAVE_FFI_H=",
    "HAVE_LIBPFM=",
    "HAVE_LIBPSAPI=",
    "HAVE_MALLCTL=",
    "HAVE_SIGNAL_H=1",
    "HAVE_STRERROR=1",
    "HAVE_SYS_STAT_H=1",
    "HAVE_SYS_TYPES_H=1",
    "HAVE__ALLOCA=",
    "HAVE___ALLOCA=",
    "HAVE___ASHLDI3=",
    "HAVE___ASHRDI3=",
    "HAVE___CHKSTK=",
    "HAVE___CHKSTK_MS=",
    "HAVE___CMPDI2=",
    "HAVE___DIVDI3=",
    "HAVE___FIXDFDI=",
    "HAVE___FIXSFDI=",
    "HAVE___FLOATDIDF=",
    "HAVE___LSHRDI3=",
    "HAVE___MAIN=",
    "HAVE___MODDI3=",
    "HAVE___UDIVDI3=",
    "HAVE___UMODDI3=",
    "HAVE____CHKSTK=",
    "HAVE____CHKSTK_MS=",
    "HOST_LINK_VERSION=",
    "LLVM_TARGET_TRIPLE_ENV=",
    "LLVM_VERSION_INFO=",
    "LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO=1",
    "PACKAGE_BUGREPORT=https://bugs.llvm.org/",
    "PACKAGE_NAME=LLVM",
    "PACKAGE_STRING=LLVM ${llvm_version}svn",
    "PACKAGE_VERSION=${llvm_version}svn",
    "PACKAGE_VENDOR=",
    "RETSIGTYPE=void",
    "LLVM_GISEL_COV_ENABLED=",
    "LLVM_GISEL_COV_PREFIX=",

    # This is both in llvm-config.h and config.h; llvm-config.h doesn't
    # define it if it's not set while config.h defines it to empty in that case.
    "LLVM_DEFAULT_TARGET_TRIPLE=$llvm_target_triple",
  ]

  if (current_os == "linux" || current_os == "android") {
    values += [
      "HAVE_FUTIMENS=1",
      "HAVE_LINK_H=1",
      "HAVE_LSEEK64=1",
      "HAVE_MALLINFO=1",
      "HAVE_POSIX_FALLOCATE=1",
      "HAVE_SCHED_GETAFFINITY=1",
      "HAVE_CPU_COUNT=1",
      "HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC=1",
    ]
  } else {
    values += [
      "HAVE_FUTIMENS=",
      "HAVE_LINK_H=",
      "HAVE_LSEEK64=",
      "HAVE_MALLINFO=",
      "HAVE_POSIX_FALLOCATE=",
      "HAVE_SCHED_GETAFFINITY=",
      "HAVE_CPU_COUNT=",
      "HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC=",
    ]
  }

  if (current_os == "linux") {
    values += [ "HAVE_VALGRIND_VALGRIND_H=1" ]
  } else {
    values += [ "HAVE_VALGRIND_VALGRIND_H=" ]
  }

  if (current_os == "mac") {
    values += [
      "HAVE_CRASHREPORTER_INFO=1",
      "HAVE_DECL_ARC4RANDOM=1",
      "HAVE_DLADDR=1",
      "HAVE_MALLOC_H=",
      "HAVE_MACH_MACH_H=1",
      "HAVE_MALLOC_MALLOC_H=1",
      "HAVE_MALLOC_ZONE_STATISTICS=1",
      "HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC=1",
    ]
  } else {
    values += [
      "HAVE_CRASHREPORTER_INFO=",
      "HAVE_DECL_ARC4RANDOM=",
      "HAVE_DLADDR=",
      "HAVE_MACH_MACH_H=",
      "HAVE_MALLOC_H=1",
      "HAVE_MALLOC_MALLOC_H=",
      "HAVE_MALLOC_ZONE_STATISTICS=",
      "HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC=",
    ]
  }

  if (current_os == "linux" || current_os == "mac") {
    values += [
      "HAVE_BACKTRACE=1",
      "HAVE_POSIX_SPAWN=1",
      "HAVE_PTHREAD_GETNAME_NP=1",
    ]
  } else {
    values += [
      "HAVE_BACKTRACE=",
      "HAVE_POSIX_SPAWN=",
      "HAVE_PTHREAD_GETNAME_NP=",
    ]
  }

  if (current_os == "win") {
    values += [
      "HAVE_DECL_STRERROR_S=1",
      "HAVE_DLFCN_H=",
      "HAVE_DLOPEN=",
      "HAVE_FUTIMES=",
      "HAVE_GETPAGESIZE=",
      "HAVE_GETRLIMIT=",
      "HAVE_GETRUSAGE=",
      "HAVE_ISATTY=",
      "HAVE_LIBPTHREAD=",
      "HAVE_PTHREAD_SETNAME_NP=",
      "HAVE_LIBZ=",
      "HAVE_PREAD=",
      "HAVE_PTHREAD_GETSPECIFIC=",
      "HAVE_PTHREAD_H=",
      "HAVE_PTHREAD_MUTEX_LOCK=",
      "HAVE_PTHREAD_RWLOCK_INIT=",
      "HAVE_REALPATH=",
      "HAVE_SBRK=",
      "HAVE_SETENV=",
      "HAVE_SETRLIMIT=",
      "HAVE_SIGALTSTACK=",
      "HAVE_STRERROR_R=",
      "HAVE_SYSCONF=",
      "HAVE_SYS_IOCTL_H=",
      "HAVE_SYS_MMAN_H=",
      "HAVE_SYS_PARAM_H=",
      "HAVE_SYS_RESOURCE_H=",
      "HAVE_SYS_TIME_H=",
      "HAVE_TERMIOS_H=",
      "HAVE_UNISTD_H=",
      "HAVE_ZLIB_H=",
      "HAVE__CHSIZE_S=1",
      "HAVE__UNWIND_BACKTRACE=",
      "stricmp=_stricmp",
      "strdup=_strdup",
    ]
  } else {
    # POSIX-y system defaults.
    values += [
      "HAVE_DECL_STRERROR_S=",
      "HAVE_DLFCN_H=1",
      "HAVE_DLOPEN=1",
      "HAVE_FUTIMES=1",
      "HAVE_GETPAGESIZE=1",
      "HAVE_GETRLIMIT=1",
      "HAVE_GETRUSAGE=1",
      "HAVE_ISATTY=1",
      "HAVE_LIBPTHREAD=1",
      "HAVE_PTHREAD_SETNAME_NP=1",
      "HAVE_LIBZ=1",
      "HAVE_PREAD=1",
      "HAVE_PTHREAD_GETSPECIFIC=1",
      "HAVE_PTHREAD_H=1",
      "HAVE_PTHREAD_MUTEX_LOCK=1",
      "HAVE_PTHREAD_RWLOCK_INIT=1",
      "HAVE_REALPATH=1",
      "HAVE_SBRK=1",
      "HAVE_SETENV=1",
      "HAVE_SETRLIMIT=1",
      "HAVE_SIGALTSTACK=1",
      "HAVE_STRERROR_R=1",
      "HAVE_SYSCONF=1",
      "HAVE_SYS_IOCTL_H=1",
      "HAVE_SYS_MMAN_H=1",
      "HAVE_SYS_PARAM_H=1",
      "HAVE_SYS_RESOURCE_H=1",
      "HAVE_SYS_TIME_H=1",
      "HAVE_TERMIOS_H=1",
      "HAVE_UNISTD_H=1",
      "HAVE_ZLIB_H=1",
      "HAVE__CHSIZE_S=",
      "HAVE__UNWIND_BACKTRACE=1",
      "stricmp=",
      "strdup=",
    ]
  }

  if (current_os == "linux" || current_os == "android") {
    values += [ "LTDL_SHLIB_EXT=.so" ]
  } else if (current_os == "mac") {
    values += [ "LTDL_SHLIB_EXT=.dylib" ]
  } else if (current_os == "win") {
    values += [ "LTDL_SHLIB_EXT=.dll" ]
  }

  if (llvm_enable_libedit) {
    values += [ "HAVE_LIBEDIT=1" ]
  } else {
    values += [ "HAVE_LIBEDIT=" ]
  }

  if (llvm_enable_libxar) {
    values += [ "HAVE_LIBXAR=1" ]
  } else {
    values += [ "HAVE_LIBXAR=" ]
  }

  if (llvm_enable_terminfo) {
    values += [ "HAVE_TERMINFO=1" ]
  } else {
    values += [ "HAVE_TERMINFO=" ]
  }

  if (llvm_enable_zlib) {
    values += [ "LLVM_ENABLE_ZLIB=1" ]
  } else {
    values += [ "LLVM_ENABLE_ZLIB=" ]
  }

  if (llvm_enable_libxml2) {
    values += [ "LLVM_LIBXML2_ENABLED=1" ]
  } else {
    values += [ "LLVM_LIBXML2_ENABLED=" ]
  }
}

write_cmake_config("llvm-config") {
  input = "llvm-config.h.cmake"
  output = "$target_gen_dir/llvm-config.h"
  values = [
    "LLVM_ENABLE_DUMP=",
    "LINK_POLLY_INTO_TOOLS=",
    "LLVM_DEFAULT_TARGET_TRIPLE=$llvm_target_triple",
    "LLVM_HAS_ATOMICS=1",
    "LLVM_HOST_TRIPLE=$llvm_host_triple",
    "LLVM_NATIVE_ARCH=$native_target",
    "LLVM_NATIVE_ASMPARSER=1",
    "LLVM_NATIVE_ASMPRINTER=1",
    "LLVM_NATIVE_DISASSEMBLER=1",
    "LLVM_NATIVE_TARGET=1",
    "LLVM_NATIVE_TARGETINFO=1",
    "LLVM_NATIVE_TARGETMC=1",
    "LLVM_USE_INTEL_JITEVENTS=",
    "LLVM_USE_OPROFILE=",
    "LLVM_USE_PERF=",
    "LLVM_VERSION_MAJOR=$llvm_version_major",
    "LLVM_VERSION_MINOR=$llvm_version_minor",
    "LLVM_VERSION_PATCH=$llvm_version_patch",
    "PACKAGE_VERSION=${llvm_version}svn",
    "LLVM_FORCE_ENABLE_STATS=",
  ]

  if (current_os == "win") {
    values += [ "LLVM_ON_UNIX=" ]
  } else {
    values += [ "LLVM_ON_UNIX=1" ]
  }

  if (llvm_enable_threads) {
    values += [ "LLVM_ENABLE_THREADS=1" ]
  } else {
    values += [ "LLVM_ENABLE_THREADS=" ]
  }
}

##############################################################################
# .def files used by llvm/lib/Target

template("write_target_def_file") {
  assert(defined(invoker.key), "must set 'key' in $target_name")
  assert(defined(invoker.value), "must set 'value' in $target_name")

  write_cmake_config(target_name) {
    visibility = [ ":write_target_def_files" ]
    input = "$target_name.in"
    output = "$target_gen_dir/$target_name"

    # Build something like
    # `LLVM_ENUM_ASM_PARSERS=LLVM_ASM_PARSER(ARM)\nLLVM_ASM_PARSER(X86)\n`. Note
    # that \n is a literal '\' followed by a literal 'n', not a newline
    # character.  (write_cmake_config.py replaces that with a real newline).
    value = ""
    foreach(target, llvm_targets_to_build) {
      value = "$value${invoker.value}($target)\n"
    }
    values = [ "${invoker.key}=$value" ]
  }
}

write_target_def_file("AsmParsers.def") {
  key = "LLVM_ENUM_ASM_PARSERS"
  value = "LLVM_ASM_PARSER"
}

write_target_def_file("AsmPrinters.def") {
  key = "LLVM_ENUM_ASM_PRINTERS"
  value = "LLVM_ASM_PRINTER"
}

write_target_def_file("Disassemblers.def") {
  key = "LLVM_ENUM_DISASSEMBLERS"
  value = "LLVM_DISASSEMBLER"
}

write_target_def_file("Targets.def") {
  key = "LLVM_ENUM_TARGETS"
  value = "LLVM_TARGET"
}

group("write_target_def_files") {
  visibility = [
    "//llvm/lib/Support",
    "//llvm/lib/Target",
  ]
  deps = [
    ":AsmParsers.def",
    ":AsmPrinters.def",
    ":Disassemblers.def",
    ":Targets.def",
  ]
}
