blob: 852d7fea062c80f988c384c7ee4cf5c5b2280629 [file] [log] [blame]
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +00001//===- 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
Mikhail Glushenkov49254b52008-05-06 18:10:20 +000014// TOTHINK: Open issue: should we use DAG lists in Tool specifications
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000015// or change to something like
Mikhail Glushenkov49254b52008-05-06 18:10:20 +000016
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000017// def LLVMGccC : < Tool<
18// [ InLanguage<"c">,
19// PrefixListOption<"Wl", [UnpackValues, PropertyName<Arg>, ...]>
20// ...] ?
Mikhail Glushenkov49254b52008-05-06 18:10:20 +000021
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000022// DAG lists look more aesthetically pleasing to me.
23
24def llvm_gcc_c : Tool<
25[(in_language "c"),
Mikhail Glushenkov46d4e972008-05-06 16:36:06 +000026 (out_language "llvm-bitcode"),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000027 (output_suffix "bc"),
Mikhail Glushenkov35576b02008-05-30 06:10:19 +000028 (cmd_line (case
29 (switch_on "E"),
Mikhail Glushenkov3134d842008-05-30 19:56:27 +000030 (case (not_empty "o"),
31 "llvm-gcc -E -x c++ $INFILE -o $OUTFILE",
32 (default),
33 "llvm-gcc -E -x c++ $INFILE"),
Mikhail Glushenkov35576b02008-05-30 06:10:19 +000034 (default),
Mikhail Glushenkov3134d842008-05-30 19:56:27 +000035 "llvm-gcc -c -x c $INFILE -o $OUTFILE -emit-llvm")),
Mikhail Glushenkov158f4722008-05-30 06:18:50 +000036 (switch_option "E", (stop_compilation),
Mikhail Glushenkov36675382008-05-08 20:02:36 +000037 (help "Stop after the preprocessing stage, do not run the compiler")),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000038 (sink)
39]>;
40
41def llvm_gcc_cpp : Tool<
42[(in_language "c++"),
Mikhail Glushenkov46d4e972008-05-06 16:36:06 +000043 (out_language "llvm-bitcode"),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000044 (output_suffix "bc"),
Mikhail Glushenkov35576b02008-05-30 06:10:19 +000045 (cmd_line (case
46 (switch_on "E"),
Mikhail Glushenkov3134d842008-05-30 19:56:27 +000047 (case (not_empty "o"),
48 "llvm-g++ -E -x c++ $INFILE -o $OUTFILE",
49 (default),
50 "llvm-g++ -E -x c++ $INFILE"),
Mikhail Glushenkov35576b02008-05-30 06:10:19 +000051 (default),
52 "llvm-g++ -c -x c++ $INFILE -o $OUTFILE -emit-llvm")),
Mikhail Glushenkov158f4722008-05-30 06:18:50 +000053 (switch_option "E", (stop_compilation)),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000054 (sink)
55]>;
56
57def opt : Tool<
58[(in_language "llvm-bitcode"),
59 (out_language "llvm-bitcode"),
Mikhail Glushenkovf68efe12008-05-06 17:23:50 +000060 (switch_option "opt", (help "Enable opt")),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000061 (output_suffix "bc"),
Mikhail Glushenkov3134d842008-05-30 19:56:27 +000062 (cmd_line "opt -f $INFILE -o $OUTFILE")
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000063]>;
64
65def 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
72def llc : Tool<
73[(in_language "llvm-bitcode"),
74 (out_language "assembler"),
75 (output_suffix "s"),
Mikhail Glushenkov36675382008-05-08 20:02:36 +000076 (switch_option "S", (stop_compilation),
77 (help "Stop after compilation, do not assemble")),
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +000078 (cmd_line "llc -f $INFILE -o $OUTFILE")
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000079]>;
80
81def llvm_gcc_assembler : Tool<
82[(in_language "assembler"),
83 (out_language "object-code"),
84 (output_suffix "o"),
Mikhail Glushenkov49254b52008-05-06 18:10:20 +000085 (cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
Mikhail Glushenkovc38fb382008-05-06 18:17:42 +000086 (switch_option "c", (stop_compilation),
87 (help "Compile and assemble, but do not link")),
Mikhail Glushenkov4019e952008-05-12 16:33:06 +000088 (prefix_list_option "Wa,", (unpack_values), (help "pass options to assembler"))
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000089]>;
90
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +000091// Default linker
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000092def 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")),
Mikhail Glushenkov4019e952008-05-12 16:33:06 +0000100 (prefix_list_option "Wl,", (unpack_values), (help "pass options to linker"))
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +0000101]>;
102
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +0000103// Alternative linker for C++
Mikhail Glushenkov434816d2008-05-06 18:13:00 +0000104def 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)),
Mikhail Glushenkov4019e952008-05-12 16:33:06 +0000114 (prefix_list_option "Wl,", (unpack_values))
Mikhail Glushenkov434816d2008-05-06 18:13:00 +0000115]>;
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +0000116
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +0000117// Language map
118
119def 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"]>,
Mikhail Glushenkov49254b52008-05-06 18:10:20 +0000126 LangToSuffixes<"executable", ["out"]>
127 ]>;