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_STD_IS_TRIVIALLY_COPYABLE=1",
    "HAVE_STRERROR=1",
    "HAVE_SYS_STAT_H=1",
    "HAVE_SYS_TYPES_H=1",
    "HAVE_VALGRIND_VALGRIND_H=",
    "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 == "mac") {
    values += [
      "HAVE_CRASHREPORTER_INFO=1",
      "HAVE_DECL_ARC4RANDOM=1",
      "HAVE_DLADDR=1",
      "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_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 == "mac") {
    values += [ "LTDL_SHLIB_EXT=.dylib" ]
  } else if (current_os == "win") {
    values += [ "LTDL_SHLIB_EXT=.dll" ]
  } else {
    values += [ "LTDL_SHLIB_EXT=.so" ]
  }

  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_current_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",
  ]
}
