1import("//llvm/utils/gn/build/driver_executable.gni") 2import("//llvm/utils/gn/build/symlink_or_copy.gni") 3import("//llvm/utils/gn/build/write_cmake_config.gni") 4import("//llvm/version.gni") 5 6symlinks = [ 7 # target_name, symlink_target pairs: GN doesn't support '+' in rule names. 8 [ 9 "clangxx", 10 "clang++", 11 ], 12 [ 13 "clang-cl", 14 "clang-cl", 15 ], 16 [ 17 "clang-cpp", 18 "clang-cpp", 19 ], 20] 21foreach(target, symlinks) { 22 symlink_or_copy(target[0]) { 23 deps = [ ":clang" ] 24 source = "clang" 25 output = "$root_out_dir/bin/${target[1]}" 26 } 27} 28 29# //:clang depends on this symlink target, see comment in //BUILD.gn. 30group("symlinks") { 31 deps = [ ":clang" ] 32 foreach(target, symlinks) { 33 deps += [ ":${target[0]}" ] 34 } 35} 36 37if (host_os == "mac") { 38 write_cmake_config("write_info_plist") { 39 input = "Info.plist.in" 40 output = "$target_gen_dir/Info.plist" 41 values = [ 42 "TOOL_INFO_BUILD_VERSION=$llvm_version_major.$llvm_version_minor", 43 "TOOL_INFO_NAME=clang", 44 "TOOL_INFO_UTI=org.llvm.clang", 45 "TOOL_INFO_VERSION=$llvm_version", 46 ] 47 } 48} 49 50driver_executable("clang") { 51 configs += [ "//llvm/utils/gn/build:clang_code" ] 52 deps = [ 53 "//clang/include/clang/Config", 54 "//clang/lib/Basic", 55 "//clang/lib/CodeGen", 56 "//clang/lib/Driver", 57 "//clang/lib/Frontend", 58 "//clang/lib/FrontendTool", 59 "//clang/lib/Headers", 60 "//clang/tools/clang-linker-wrapper", 61 "//clang/tools/clang-nvlink-wrapper", 62 "//clang/tools/clang-offload-bundler", 63 "//clang/tools/clang-offload-packager", 64 "//llvm/include/llvm/Config:llvm-config", 65 "//llvm/lib/Analysis", 66 "//llvm/lib/CodeGen", 67 "//llvm/lib/IR", 68 "//llvm/lib/MC", 69 "//llvm/lib/MC/MCParser", 70 "//llvm/lib/Option", 71 "//llvm/lib/Support", 72 "//llvm/lib/Target:TargetsToBuild", 73 "//llvm/lib/TargetParser", 74 "//llvm/lib/Transforms/IPO", 75 "//llvm/lib/Transforms/InstCombine", 76 "//llvm/lib/Transforms/Instrumentation", 77 "//llvm/lib/Transforms/ObjCARC", 78 "//llvm/lib/Transforms/Scalar", 79 "//llvm/lib/Transforms/Utils", 80 "//llvm/lib/Transforms/Vectorize", 81 ] 82 assert_no_deps = [ "//llvm/lib/Debuginfod" ] 83 if (host_os == "mac") { 84 deps += [ ":write_info_plist" ] 85 plist = get_target_outputs(":write_info_plist") 86 ldflags = [ "-Wl,-sectcreate,__TEXT,__info_plist," + 87 rebase_path(plist[0], root_out_dir) ] 88 89 # On macOS, libcxx headers are bundled with the compiler, not with the 90 # sysroot. As a convenience, automatically copy them over when buildling 91 # clang. This is different from the CMake build, which requires devs to 92 # explicitly build the "libcxx" target (which also needlessly compiles the 93 # libcxx sources) to get a working compiler. 94 deps += [ "//libcxx/include:copy_headers" ] 95 } 96 sources = [ 97 "cc1_main.cpp", 98 "cc1as_main.cpp", 99 "cc1gen_reproducer_main.cpp", 100 "driver.cpp", 101 ] 102} 103