blob: 897892415ebd2028bbf0ae6fa935a6567406bb07 [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 Glushenkov49254b52008-05-06 18:10:20 +000028 (cmd_line "llvm-gcc -c -x c $INFILE -o $OUTFILE -emit-llvm"),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000029 (sink)
30]>;
31
32def llvm_gcc_cpp : Tool<
33[(in_language "c++"),
Mikhail Glushenkov46d4e972008-05-06 16:36:06 +000034 (out_language "llvm-bitcode"),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000035 (output_suffix "bc"),
Mikhail Glushenkov49254b52008-05-06 18:10:20 +000036 (cmd_line "llvm-g++ -c -x c++ $INFILE -o $OUTFILE -emit-llvm"),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000037 (sink)
38]>;
39
40def opt : Tool<
41[(in_language "llvm-bitcode"),
42 (out_language "llvm-bitcode"),
Mikhail Glushenkovf68efe12008-05-06 17:23:50 +000043 (switch_option "opt", (help "Enable opt")),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000044 (output_suffix "bc"),
45 (cmd_line "opt $INFILE -o $OUTFILE")
46]>;
47
48def llvm_as : Tool<
49[(in_language "llvm-assembler"),
50 (out_language "llvm-bitcode"),
51 (output_suffix "bc"),
52 (cmd_line "llvm-as $INFILE -o $OUTFILE")
53]>;
54
55def llc : Tool<
56[(in_language "llvm-bitcode"),
57 (out_language "assembler"),
58 (output_suffix "s"),
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +000059 (cmd_line "llc -f $INFILE -o $OUTFILE")
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000060]>;
61
62def llvm_gcc_assembler : Tool<
63[(in_language "assembler"),
64 (out_language "object-code"),
65 (output_suffix "o"),
Mikhail Glushenkov49254b52008-05-06 18:10:20 +000066 (cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
67 (switch_option "c", (stop_compilation)),
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000068 (prefix_list_option "Wa", (unpack_values), (help "pass options to assembler"))
69]>;
70
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +000071// Default linker
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000072def llvm_gcc_linker : Tool<
73[(in_language "object-code"),
74 (out_language "executable"),
75 (output_suffix "out"),
76 (cmd_line "llvm-gcc $INFILE -o $OUTFILE"),
77 (join),
78 (prefix_list_option "L", (forward), (help "add a directory to link path")),
79 (prefix_list_option "l", (forward), (help "search a library when linking")),
80 (prefix_list_option "Wl", (unpack_values), (help "pass options to linker"))
81]>;
82
Mikhail Glushenkovedd7ff92008-05-06 18:10:53 +000083// Alternative linker for C++
84// TOTHINK: how to implement this best?
85// Something like input_file_language can only choose between two languages.
86// def llvm_gcc_cpp_linker : Tool<
87// [(in_language "object-code"),
88// (out_language "executable"),
89// (output_suffix "out"),
90// (cmd_line "llvm-g++ $INFILE -o $OUTFILE"),
91// (join),
92// //(input_file_language "c++"),
93// (prefix_list_option "L", (forward)),
94// (prefix_list_option "l", (forward)),
95// (prefix_list_option "Wl", (unpack_values))
96// ]>;
97
Anton Korobeynikove9ffb5b2008-03-23 08:57:20 +000098// Language map
99
100def LanguageMap : LanguageMap<
101 [LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>,
102 LangToSuffixes<"c", ["c"]>,
103 LangToSuffixes<"assembler", ["s"]>,
104 LangToSuffixes<"llvm-assembler", ["ll"]>,
105 LangToSuffixes<"llvm-bitcode", ["bc"]>,
106 LangToSuffixes<"object-code", ["o"]>,
Mikhail Glushenkov49254b52008-05-06 18:10:20 +0000107 LangToSuffixes<"executable", ["out"]>
108 ]>;