diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2008-10-02 21:15:05 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2008-10-02 21:15:05 +0000 |
commit | adcf753e17e21426408100ec39765de144cf7511 (patch) | |
tree | d6e05c63cbcdec28213f5462d45b770dfa5cfcda /include/llvm/CompilerDriver | |
parent | 0b1654a52874c2a06157f1519b7089639c5d83d8 (diff) | |
download | external_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.td | 106 | ||||
-rw-r--r-- | include/llvm/CompilerDriver/Tools.td | 117 |
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"]> + ]>; |