103 lines · plain
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/lib/Options",61 "//clang/tools/clang-linker-wrapper",62 "//clang/tools/clang-nvlink-wrapper",63 "//clang/tools/clang-offload-bundler",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 the90 # sysroot. As a convenience, automatically copy them over when buildling91 # clang. This is different from the CMake build, which requires devs to92 # explicitly build the "libcxx" target (which also needlessly compiles the93 # 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