Mikhail Glushenkov | b3d3629 | 2010-08-15 07:07:12 +0000 | [diff] [blame] | 1 | //===- Clang.td - LLVMC toolchain descriptions -------------*- tablegen -*-===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // This file contains compilation graph description used by llvmc. |
| 11 | // |
| 12 | //===----------------------------------------------------------------------===// |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 13 | |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 14 | |
Mikhail Glushenkov | e4322895 | 2008-05-30 06:26:08 +0000 | [diff] [blame] | 15 | def Options : OptionList<[ |
Mikhail Glushenkov | c8813da | 2008-12-07 16:43:17 +0000 | [diff] [blame] | 16 | (switch_option "clang", (help "Use Clang instead of llvm-gcc")) |
Mikhail Glushenkov | e4322895 | 2008-05-30 06:26:08 +0000 | [diff] [blame] | 17 | ]>; |
| 18 | |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 19 | class clang_based<string language, string cmd, string ext_E> : Tool< |
Mikhail Glushenkov | e4322895 | 2008-05-30 06:26:08 +0000 | [diff] [blame] | 20 | [(in_language language), |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 21 | (out_language "llvm-bitcode"), |
| 22 | (output_suffix "bc"), |
Mikhail Glushenkov | 9e7d90b | 2010-02-23 09:59:30 +0000 | [diff] [blame] | 23 | (command cmd), |
Mikhail Glushenkov | c8813da | 2008-12-07 16:43:17 +0000 | [diff] [blame] | 24 | (actions (case (switch_on "E"), |
Mikhail Glushenkov | 9e7d90b | 2010-02-23 09:59:30 +0000 | [diff] [blame] | 25 | [(forward "E"), (stop_compilation), (output_suffix ext_E)], |
| 26 | (and (switch_on "E"), (empty "o")), (no_out_file), |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 27 | (switch_on "fsyntax-only"), (stop_compilation), |
Mikhail Glushenkov | 9e7d90b | 2010-02-23 09:59:30 +0000 | [diff] [blame] | 28 | (switch_on ["S", "emit-llvm"]), |
| 29 | [(append_cmd "-emit-llvm"), |
| 30 | (stop_compilation), (output_suffix "ll")], |
| 31 | (not (switch_on ["S", "emit-llvm"])), |
| 32 | (append_cmd "-emit-llvm-bc"), |
| 33 | (switch_on ["c", "emit-llvm"]), |
Mikhail Glushenkov | 74bcb05 | 2008-12-09 14:40:18 +0000 | [diff] [blame] | 34 | (stop_compilation), |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 35 | (not_empty "include"), (forward "include"), |
| 36 | (not_empty "I"), (forward "I"))), |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 37 | (sink) |
| 38 | ]>; |
| 39 | |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 40 | def clang_c : clang_based<"c", "clang -x c", "i">; |
| 41 | def clang_cpp : clang_based<"c++", "clang -x c++", "i">; |
| 42 | def clang_objective_c : clang_based<"objective-c", |
| 43 | "clang -x objective-c", "mi">; |
Mikhail Glushenkov | bfdef3a | 2008-11-28 00:14:11 +0000 | [diff] [blame] | 44 | def clang_objective_cpp : clang_based<"objective-c++", |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 45 | "clang -x objective-c++", "mi">; |
| 46 | |
| 47 | def as : Tool< |
| 48 | [(in_language "assembler"), |
| 49 | (out_language "object-code"), |
| 50 | (output_suffix "o"), |
Mikhail Glushenkov | 9e7d90b | 2010-02-23 09:59:30 +0000 | [diff] [blame] | 51 | (command "as"), |
Mikhail Glushenkov | 5b9b3ba | 2009-12-07 18:25:54 +0000 | [diff] [blame] | 52 | (actions (case (not_empty "Wa,"), (forward_value "Wa,"), |
Mikhail Glushenkov | 74bcb05 | 2008-12-09 14:40:18 +0000 | [diff] [blame] | 53 | (switch_on "c"), (stop_compilation))) |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 54 | ]>; |
Mikhail Glushenkov | e4322895 | 2008-05-30 06:26:08 +0000 | [diff] [blame] | 55 | |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 56 | // Default linker |
| 57 | def llvm_ld : Tool< |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 58 | [(in_language "object-code"), |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 59 | (out_language "executable"), |
| 60 | (output_suffix "out"), |
Mikhail Glushenkov | 9e7d90b | 2010-02-23 09:59:30 +0000 | [diff] [blame] | 61 | (command "llvm-ld -native -disable-internalize"), |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 62 | (actions (case |
| 63 | (switch_on "pthread"), (append_cmd "-lpthread"), |
| 64 | (not_empty "L"), (forward "L"), |
| 65 | (not_empty "l"), (forward "l"), |
Mikhail Glushenkov | 5b9b3ba | 2009-12-07 18:25:54 +0000 | [diff] [blame] | 66 | (not_empty "Wl,"), (forward_value "Wl,"))), |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 67 | (join) |
| 68 | ]>; |
| 69 | |
Mikhail Glushenkov | 163dc1e | 2008-05-30 06:16:32 +0000 | [diff] [blame] | 70 | // Compilation graph |
| 71 | |
Mikhail Glushenkov | b3d3629 | 2010-08-15 07:07:12 +0000 | [diff] [blame] | 72 | def ClangCompilationGraph : CompilationGraph<[ |
Mikhail Glushenkov | d9a7316 | 2010-08-23 23:21:23 +0000 | [diff] [blame] | 73 | (optional_edge "root", "clang_c", |
| 74 | (case (switch_on "clang"), (inc_weight))), |
| 75 | (optional_edge "root", "clang_cpp", |
| 76 | (case (switch_on "clang"), (inc_weight))), |
| 77 | (optional_edge "root", "clang_objective_c", |
| 78 | (case (switch_on "clang"), (inc_weight))), |
| 79 | (optional_edge "root", "clang_objective_cpp", |
| 80 | (case (switch_on "clang"), (inc_weight))), |
| 81 | (edge "clang_c", "llc"), |
| 82 | (edge "clang_cpp", "llc"), |
| 83 | (edge "clang_objective_c", "llc"), |
| 84 | (edge "clang_objective_cpp", "llc"), |
| 85 | (optional_edge "llc", "as", (case (switch_on "clang"), (inc_weight))), |
| 86 | (edge "as", "llvm_ld") |
Mikhail Glushenkov | 940cdfe | 2008-12-07 16:46:23 +0000 | [diff] [blame] | 87 | ]>; |