1a466a2735d774ddfea913b0af151571bab019c0
[oota-llvm.git] / include / llvm / CompilerDriver / Tools.td
1 //===- Tools.td - Tools description for LLVMC2 -------------*- 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 descriptions of the various build tools run by llvmc2.
11 //
12 //===----------------------------------------------------------------------===//
13
14 def llvm_gcc_c : Tool<
15 [(in_language "c"),
16  (out_language "llvm-bitcode"),
17  (output_suffix "bc"),
18  (cmd_line (case
19             (switch_on "E"),
20               (case (not_empty "o"),
21                     "llvm-gcc -E -x c++ $INFILE -o $OUTFILE",
22                     (default),
23                     "llvm-gcc -E -x c++ $INFILE"),
24             (default),
25               "llvm-gcc -c -x c $INFILE -o $OUTFILE -emit-llvm")),
26  (switch_option "E", (stop_compilation),
27    (help "Stop after the preprocessing stage, do not run the compiler")),
28  (sink)
29 ]>;
30
31 def llvm_gcc_cpp : Tool<
32 [(in_language "c++"),
33  (out_language "llvm-bitcode"),
34  (output_suffix "bc"),
35  (cmd_line (case
36             (switch_on "E"),
37               (case (not_empty "o"),
38                     "llvm-g++ -E -x c++ $INFILE -o $OUTFILE",
39                     (default),
40                     "llvm-g++ -E -x c++ $INFILE"),
41             (default),
42               "llvm-g++ -c -x c++ $INFILE -o $OUTFILE -emit-llvm")),
43  (switch_option "E", (stop_compilation)),
44  (sink)
45 ]>;
46
47 def opt : Tool<
48 [(in_language "llvm-bitcode"),
49  (out_language "llvm-bitcode"),
50  (switch_option "opt", (help "Enable opt")),
51  (output_suffix "bc"),
52  (cmd_line "opt -f $INFILE -o $OUTFILE")
53 ]>;
54
55 def llvm_as : Tool<
56 [(in_language "llvm-assembler"),
57  (out_language "llvm-bitcode"),
58  (output_suffix "bc"),
59  (cmd_line "llvm-as $INFILE -o $OUTFILE")
60 ]>;
61
62 def llc : Tool<
63 [(in_language "llvm-bitcode"),
64  (out_language "assembler"),
65  (output_suffix "s"),
66  (switch_option "S", (stop_compilation),
67                 (help "Stop after compilation, do not assemble")),
68  (cmd_line "llc -f $INFILE -o $OUTFILE")
69 ]>;
70
71 def llvm_gcc_assembler : Tool<
72 [(in_language "assembler"),
73  (out_language "object-code"),
74  (output_suffix "o"),
75  (cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
76  (switch_option "c", (stop_compilation),
77                 (help "Compile and assemble, but do not link")),
78  (prefix_list_option "Wa,", (unpack_values), (help "Pass options to assembler"))
79 ]>;
80
81 // Default linker
82 def llvm_gcc_linker : Tool<
83 [(in_language "object-code"),
84  (out_language "executable"),
85  (output_suffix "out"),
86  (cmd_line "llvm-gcc $INFILE -o $OUTFILE"),
87  (join),
88  (prefix_list_option "L", (forward), (help "Add a directory to link path")),
89  (prefix_list_option "l", (forward), (help "Search a library when linking")),
90  (prefix_list_option "Wl,", (unpack_values), (help "Pass options to linker"))
91 ]>;
92
93 // Alternative linker for C++
94 def llvm_gcc_cpp_linker : Tool<
95 [(in_language "object-code"),
96  (out_language "executable"),
97  (output_suffix "out"),
98  (cmd_line "llvm-g++ $INFILE -o $OUTFILE"),
99  (join),
100  (parameter_option "linker",
101                    (help "Choose linker (possible values: gcc, g++)")),
102  (prefix_list_option "L", (forward)),
103  (prefix_list_option "l", (forward)),
104  (prefix_list_option "Wl,", (unpack_values))
105 ]>;
106
107 // Language map
108
109 def LanguageMap : LanguageMap<
110     [LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>,
111      LangToSuffixes<"c", ["c"]>,
112      LangToSuffixes<"assembler", ["s"]>,
113      LangToSuffixes<"llvm-assembler", ["ll"]>,
114      LangToSuffixes<"llvm-bitcode", ["bc"]>,
115      LangToSuffixes<"object-code", ["o"]>,
116      LangToSuffixes<"executable", ["out"]>
117      ]>;