import("//llvm/utils/gn/build/symlink_or_copy.gni")
import("//llvm/utils/gn/build/write_cmake_config.gni")
import("//llvm/version.gni")

symlinks = [
  # target_name, symlink_target pairs: GN doesn't support '+' in rule names.
  [
    "clangxx",
    "clang++",
  ],
  [
    "clang-cl",
    "clang-cl",
  ],
  [
    "clang-cpp",
    "clang-cpp",
  ],
]
foreach(target, symlinks) {
  symlink_or_copy(target[0]) {
    deps = [
      ":clang",
    ]
    source = "clang"
    output = "$root_out_dir/bin/${target[1]}"
  }
}

# //:clang depends on this symlink target, see comment in //BUILD.gn.
group("symlinks") {
  deps = []
  foreach(target, symlinks) {
    deps += [ ":${target[0]}" ]
  }
}

if (host_os == "mac") {
  write_cmake_config("write_info_plist") {
    input = "Info.plist.in"
    output = "$target_gen_dir/Info.plist"
    values = [
      "TOOL_INFO_BUILD_VERSION=$llvm_version_major.$llvm_version_minor",
      "TOOL_INFO_NAME=clang",
      "TOOL_INFO_UTI=org.llvm.clang",
      "TOOL_INFO_VERSION=$llvm_version",
    ]
  }
}

executable("clang") {
  configs += [ "//llvm/utils/gn/build:clang_code" ]
  deps = [
    "//clang/include/clang/Config",
    "//clang/lib/Basic",
    "//clang/lib/CodeGen",
    "//clang/lib/Driver",
    "//clang/lib/Frontend",
    "//clang/lib/FrontendTool",
    "//clang/lib/Headers",
    "//clang/tools/clang-offload-bundler",
    "//llvm/include/llvm/Config:llvm-config",
    "//llvm/lib/Analysis",
    "//llvm/lib/CodeGen",
    "//llvm/lib/IR",
    "//llvm/lib/MC",
    "//llvm/lib/MC/MCParser",
    "//llvm/lib/Option",
    "//llvm/lib/Support",
    "//llvm/lib/Target:TargetsToBuild",
    "//llvm/lib/Transforms/IPO",
    "//llvm/lib/Transforms/InstCombine",
    "//llvm/lib/Transforms/Instrumentation",
    "//llvm/lib/Transforms/ObjCARC",
    "//llvm/lib/Transforms/Scalar",
    "//llvm/lib/Transforms/Utils",
    "//llvm/lib/Transforms/Vectorize",
  ]
  if (host_os == "mac") {
    deps += [ ":write_info_plist" ]
    plist = get_target_outputs(":write_info_plist")
    ldflags = [ "-Wl,-sectcreate,__TEXT,__info_plist," +
                rebase_path(plist[0], root_out_dir) ]
  }
  sources = [
    "cc1_main.cpp",
    "cc1as_main.cpp",
    "cc1gen_reproducer_main.cpp",
    "driver.cpp",
  ]
}
