aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CompilerDriver
diff options
context:
space:
mode:
authorMikhail Glushenkov <foldr@codedgers.com>2008-10-02 21:15:05 +0000
committerMikhail Glushenkov <foldr@codedgers.com>2008-10-02 21:15:05 +0000
commitadcf753e17e21426408100ec39765de144cf7511 (patch)
treed6e05c63cbcdec28213f5462d45b770dfa5cfcda /include/llvm/CompilerDriver
parent0b1654a52874c2a06157f1519b7089639c5d83d8 (diff)
downloadexternal_llvm-adcf753e17e21426408100ec39765de144cf7511.zip
external_llvm-adcf753e17e21426408100ec39765de144cf7511.tar.gz
external_llvm-adcf753e17e21426408100ec39765de144cf7511.tar.bz2
Build system tweaks to make it more convenient for the plugin authors.
Plugins can be now compiled in with a slight Makefile change. For example, to compile the new Clang driver, use: cd $LLVMC2_DIR make TOOLNAME=ccc2 BUILTIN_PLUGINS=Clang git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56967 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CompilerDriver')
-rw-r--r--include/llvm/CompilerDriver/Common.td106
-rw-r--r--include/llvm/CompilerDriver/Tools.td117
2 files changed, 223 insertions, 0 deletions
diff --git a/include/llvm/CompilerDriver/Common.td b/include/llvm/CompilerDriver/Common.td
new file mode 100644
index 0000000..4551838
--- /dev/null
+++ b/include/llvm/CompilerDriver/Common.td
@@ -0,0 +1,106 @@
+//===- Common.td - Common definitions for LLVMC2 ----------*- tablegen -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains common definitions used in llvmc2 tool description files.
+//
+//===----------------------------------------------------------------------===//
+
+class Tool<list<dag> l> {
+ list<dag> properties = l;
+}
+
+// Special Tool instance - the root node of the compilation graph.
+
+def root : Tool<[]>;
+
+// Possible Tool properties
+
+def in_language;
+def out_language;
+def output_suffix;
+def cmd_line;
+def join;
+def sink;
+
+// Possible option types
+
+def alias_option;
+def switch_option;
+def parameter_option;
+def parameter_list_option;
+def prefix_option;
+def prefix_list_option;
+
+// Possible option properties
+
+def append_cmd;
+def forward;
+def forward_as;
+def stop_compilation;
+def unpack_values;
+def help;
+def required;
+
+// Empty DAG marker.
+def empty;
+
+// The 'case' construct.
+def case;
+
+// Primitive tests.
+def switch_on;
+def parameter_equals;
+def element_in_list;
+def input_languages_contain;
+def not_empty;
+def default;
+
+// Boolean operators.
+def and;
+def or;
+
+// Increase/decrease the edge weight.
+def inc_weight;
+def dec_weight;
+
+// Option list - used to specify aliases and sometimes help strings.
+class OptionList<list<dag> l> {
+ list<dag> options = l;
+}
+
+// Map from suffixes to language names
+
+class LangToSuffixes<string str, list<string> lst> {
+ string lang = str;
+ list<string> suffixes = lst;
+}
+
+class LanguageMap<list<LangToSuffixes> lst> {
+ list<LangToSuffixes> map = lst;
+}
+
+// Compilation graph
+
+class EdgeBase<Tool t1, Tool t2, dag d> {
+ Tool a = t1;
+ Tool b = t2;
+ dag weight = d;
+}
+
+class Edge<Tool t1, Tool t2> : EdgeBase<t1, t2, (empty)>;
+
+// Edge and SimpleEdge are synonyms.
+class SimpleEdge<Tool t1, Tool t2> : EdgeBase<t1, t2, (empty)>;
+
+// Optionally enabled edge.
+class OptionalEdge<Tool t1, Tool t2, dag props> : EdgeBase<t1, t2, props>;
+
+class CompilationGraph<list<EdgeBase> lst> {
+ list<EdgeBase> edges = lst;
+}
diff --git a/include/llvm/CompilerDriver/Tools.td b/include/llvm/CompilerDriver/Tools.td
new file mode 100644
index 0000000..1a466a2
--- /dev/null
+++ b/include/llvm/CompilerDriver/Tools.td
@@ -0,0 +1,117 @@
+//===- Tools.td - Tools description for LLVMC2 -------------*- tablegen -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains descriptions of the various build tools run by llvmc2.
+//
+//===----------------------------------------------------------------------===//
+
+def llvm_gcc_c : Tool<
+[(in_language "c"),
+ (out_language "llvm-bitcode"),
+ (output_suffix "bc"),
+ (cmd_line (case
+ (switch_on "E"),
+ (case (not_empty "o"),
+ "llvm-gcc -E -x c++ $INFILE -o $OUTFILE",
+ (default),
+ "llvm-gcc -E -x c++ $INFILE"),
+ (default),
+ "llvm-gcc -c -x c $INFILE -o $OUTFILE -emit-llvm")),
+ (switch_option "E", (stop_compilation),
+ (help "Stop after the preprocessing stage, do not run the compiler")),
+ (sink)
+]>;
+
+def llvm_gcc_cpp : Tool<
+[(in_language "c++"),
+ (out_language "llvm-bitcode"),
+ (output_suffix "bc"),
+ (cmd_line (case
+ (switch_on "E"),
+ (case (not_empty "o"),
+ "llvm-g++ -E -x c++ $INFILE -o $OUTFILE",
+ (default),
+ "llvm-g++ -E -x c++ $INFILE"),
+ (default),
+ "llvm-g++ -c -x c++ $INFILE -o $OUTFILE -emit-llvm")),
+ (switch_option "E", (stop_compilation)),
+ (sink)
+]>;
+
+def opt : Tool<
+[(in_language "llvm-bitcode"),
+ (out_language "llvm-bitcode"),
+ (switch_option "opt", (help "Enable opt")),
+ (output_suffix "bc"),
+ (cmd_line "opt -f $INFILE -o $OUTFILE")
+]>;
+
+def llvm_as : Tool<
+[(in_language "llvm-assembler"),
+ (out_language "llvm-bitcode"),
+ (output_suffix "bc"),
+ (cmd_line "llvm-as $INFILE -o $OUTFILE")
+]>;
+
+def llc : Tool<
+[(in_language "llvm-bitcode"),
+ (out_language "assembler"),
+ (output_suffix "s"),
+ (switch_option "S", (stop_compilation),
+ (help "Stop after compilation, do not assemble")),
+ (cmd_line "llc -f $INFILE -o $OUTFILE")
+]>;
+
+def llvm_gcc_assembler : Tool<
+[(in_language "assembler"),
+ (out_language "object-code"),
+ (output_suffix "o"),
+ (cmd_line "llvm-gcc -c -x assembler $INFILE -o $OUTFILE"),
+ (switch_option "c", (stop_compilation),
+ (help "Compile and assemble, but do not link")),
+ (prefix_list_option "Wa,", (unpack_values), (help "Pass options to assembler"))
+]>;
+
+// Default linker
+def llvm_gcc_linker : Tool<
+[(in_language "object-code"),
+ (out_language "executable"),
+ (output_suffix "out"),
+ (cmd_line "llvm-gcc $INFILE -o $OUTFILE"),
+ (join),
+ (prefix_list_option "L", (forward), (help "Add a directory to link path")),
+ (prefix_list_option "l", (forward), (help "Search a library when linking")),
+ (prefix_list_option "Wl,", (unpack_values), (help "Pass options to linker"))
+]>;
+
+// Alternative linker for C++
+def llvm_gcc_cpp_linker : Tool<
+[(in_language "object-code"),
+ (out_language "executable"),
+ (output_suffix "out"),
+ (cmd_line "llvm-g++ $INFILE -o $OUTFILE"),
+ (join),
+ (parameter_option "linker",
+ (help "Choose linker (possible values: gcc, g++)")),
+ (prefix_list_option "L", (forward)),
+ (prefix_list_option "l", (forward)),
+ (prefix_list_option "Wl,", (unpack_values))
+]>;
+
+// Language map
+
+def LanguageMap : LanguageMap<
+ [LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>,
+ LangToSuffixes<"c", ["c"]>,
+ LangToSuffixes<"assembler", ["s"]>,
+ LangToSuffixes<"llvm-assembler", ["ll"]>,
+ LangToSuffixes<"llvm-bitcode", ["bc"]>,
+ LangToSuffixes<"object-code", ["o"]>,
+ LangToSuffixes<"executable", ["out"]>
+ ]>;