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/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
}

action("abi-breaking") {
  script = "//llvm/utils/gn/build/write_cmake_config.py"

  sources = [
    "abi-breaking.h.cmake",
  ]
  outputs = [
    "$target_gen_dir/abi-breaking.h",
  ]
  args = [
    "-o",
    rebase_path(outputs[0], root_out_dir),

    rebase_path(sources[0], root_out_dir),
  ]

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

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

action("config") {
  script = "//llvm/utils/gn/build/write_cmake_config.py"

  public_deps = [
    ":llvm-config",
  ]

  sources = [
    "config.h.cmake",
  ]
  outputs = [
    "$target_gen_dir/config.h",
  ]
  args = [
    "-o",
    rebase_path(outputs[0], root_out_dir),
    rebase_path(sources[0], root_out_dir),

    "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 (host_os == "linux") {
    args += [
      "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",
      "HAVE_VALGRIND_VALGRIND_H=1",
    ]
  } else {
    args += [
      "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=",
      "HAVE_VALGRIND_VALGRIND_H=",
    ]
  }

  if (host_os == "mac") {
    args += [
      "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 {
    args += [
      "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 (host_os == "win") {
    args += [
      "HAVE_BACKTRACE=",
      "HAVE_DECL_STRERROR_S=1",
      "HAVE_DLFCN_H=",
      "HAVE_DLOPEN=",
      "HAVE_FUTIMES=",
      "HAVE_GETPAGESIZE=",
      "HAVE_GETRLIMIT=",
      "HAVE_GETRUSAGE=",
      "HAVE_ISATTY=",
      "HAVE_LIBPTHREAD=",
      "HAVE_PTHREAD_GETNAME_NP=",
      "HAVE_PTHREAD_SETNAME_NP=",
      "HAVE_LIBZ=",
      "HAVE_POSIX_SPAWN=",
      "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.
    args += [
      "HAVE_BACKTRACE=1",
      "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_GETNAME_NP=1",
      "HAVE_PTHREAD_SETNAME_NP=1",
      "HAVE_LIBZ=1",
      "HAVE_POSIX_SPAWN=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 (host_os == "linux") {
    args += [ "LTDL_SHLIB_EXT=.so" ]
  } else if (host_os == "mac") {
    args += [ "LTDL_SHLIB_EXT=.dylib" ]
  } else if (host_os == "win") {
    args += [ "LTDL_SHLIB_EXT=.dll" ]
  }

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

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

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

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

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

action("llvm-config") {
  script = "//llvm/utils/gn/build/write_cmake_config.py"

  sources = [
    "llvm-config.h.cmake",
  ]
  outputs = [
    "$target_gen_dir/llvm-config.h",
  ]
  args = [
    "-o",
    rebase_path(outputs[0], root_out_dir),
    rebase_path(sources[0], root_out_dir),

    "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 (host_os == "win") {
    args += [ "LLVM_ON_UNIX=" ]
  } else {
    args += [ "LLVM_ON_UNIX=1" ]
  }

  if (llvm_enable_threads) {
    args += [ "LLVM_ENABLE_THREADS=1" ]
  } else {
    args += [ "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")

  action(target_name) {
    visibility = [ ":write_target_def_files" ]
    script = "//llvm/utils/gn/build/write_cmake_config.py"

    sources = [
      "$target_name.in",
    ]
    outputs = [
      "$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"
    }
    args = [
      "-o",
      rebase_path(outputs[0], root_out_dir),
      rebase_path(sources[0], root_out_dir),
      "${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",
  ]
}
