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