Mikhail Glushenkov 010887765a Add a layer of indirection to make plugins more flexible.
Use strings instead of TableGen defs in the compilation graph
definition. Makes it easier for the plugins to modify an existing graph.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59447 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-17 17:29:18 +00:00

87 lines
2.2 KiB
TableGen

// A (first stab at a) replacement for the Clang's ccc script.
// To compile, use this command:
// cd $LLVMC2_DIR
// make DRIVER_NAME=ccc2 BUILTIN_PLUGINS=Clang
include "llvm/CompilerDriver/Common.td"
def Options : OptionList<[
(switch_option "E",
(help "Stop after the preprocessing stage, do not run the compiler"))
]>;
class clang_base<string language, dag cmdline> : Tool<
[(in_language language),
(out_language "llvm-bitcode"),
(output_suffix "bc"),
(cmd_line cmdline),
(switch_option "E", (stop_compilation), (output_suffix "i")),
(sink)
]>;
def clang_c : clang_base<"c",
(case
(switch_on "E"),
(case
(not_empty "o"),
"clang -E -x c $INFILE -o $OUTFILE",
(default),
"clang -E -x c $INFILE"),
(default),
"clang -emit-llvm-bc -x c $INFILE -o $OUTFILE")>;
def clang_cpp : clang_base<"c++",
(case
(switch_on "E"),
(case
(not_empty "o"),
"clang -E -x c++ $INFILE -o $OUTFILE",
(default),
"clang -E -x c++ $INFILE"),
(default),
"clang -emit-llvm-bc -x c++ $INFILE -o $OUTFILE")>;
def clang_objective_c : clang_base<"objective-c",
(case
(switch_on "E"),
(case
(not_empty "o"),
"clang -E -x objective-c $INFILE -o $OUTFILE",
(default),
"clang -E -x objective-c $INFILE"),
(default),
"clang -emit-llvm-bc -x objective-c $INFILE -o $OUTFILE")>;
// Default linker
def llvm_ld : Tool<
[(in_language "llvm-bitcode"),
(out_language "executable"),
(output_suffix "out"),
(cmd_line "llvm-ld -native -disable-internalize $INFILE -o $OUTFILE"),
(prefix_list_option "L", (forward), (help "Specify a library search path")),
(join)
]>;
// Language map
def LanguageMap : LanguageMap<
[LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>,
LangToSuffixes<"c", ["c"]>,
LangToSuffixes<"objective-c", ["m"]>,
LangToSuffixes<"c-cpp-output", ["i"]>,
LangToSuffixes<"objective-c-cpp-output", ["mi"]>
]>;
// Compilation graph
def CompilationGraph : CompilationGraph<[
Edge<"root", "clang_c">,
Edge<"root", "clang_cpp">,
Edge<"root", "clang_objective_c">,
Edge<"clang_c", "llvm_ld">,
Edge<"clang_cpp", "llvm_ld">,
Edge<"clang_objective_c", "llvm_ld">
]>;