2008-03-23 08:57:20 +00:00
|
|
|
//===- Tools.td - Common definitions for LLVMCC -----------*- 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 llvmcc tool description files.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
class Tool<list<dag> l> {
|
|
|
|
list<dag> properties = l;
|
|
|
|
}
|
|
|
|
|
2008-05-09 08:27:26 +00:00
|
|
|
// Special Tool instance - the root node of the compilation graph.
|
2008-05-06 16:35:25 +00:00
|
|
|
|
|
|
|
def root : Tool<[]>;
|
|
|
|
|
2008-03-23 08:57:20 +00:00
|
|
|
// Possible Tool properties
|
|
|
|
|
|
|
|
def in_language;
|
|
|
|
def out_language;
|
|
|
|
def output_suffix;
|
|
|
|
def cmd_line;
|
|
|
|
def join;
|
|
|
|
def sink;
|
|
|
|
|
|
|
|
// Possible option types
|
|
|
|
|
|
|
|
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 stop_compilation;
|
|
|
|
def unpack_values;
|
|
|
|
def help;
|
|
|
|
def required;
|
|
|
|
|
2008-05-06 16:36:06 +00:00
|
|
|
// Possible edge properties
|
|
|
|
|
2008-05-09 08:27:26 +00:00
|
|
|
// 'Atomic' properties.
|
2008-05-06 16:36:06 +00:00
|
|
|
def switch_on;
|
|
|
|
def parameter_equals;
|
|
|
|
def element_in_list;
|
2008-05-06 18:15:12 +00:00
|
|
|
def if_input_languages_contain;
|
|
|
|
|
|
|
|
// Edge property combinators.
|
2008-05-06 18:18:20 +00:00
|
|
|
def weight;
|
2008-05-06 17:22:47 +00:00
|
|
|
def and;
|
2008-05-06 18:15:12 +00:00
|
|
|
def or;
|
2008-05-06 16:36:06 +00:00
|
|
|
|
2008-03-23 08:57:20 +00:00
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
|
2008-05-06 16:35:25 +00:00
|
|
|
// Compilation graph
|
2008-03-23 08:57:20 +00:00
|
|
|
|
2008-05-06 16:36:06 +00:00
|
|
|
class EdgeBase<Tool t1, Tool t2, list<dag> lst> {
|
2008-05-06 16:35:25 +00:00
|
|
|
Tool a = t1;
|
|
|
|
Tool b = t2;
|
2008-05-06 16:36:06 +00:00
|
|
|
list<dag> props = lst;
|
2008-03-23 08:57:20 +00:00
|
|
|
}
|
|
|
|
|
2008-05-06 16:36:06 +00:00
|
|
|
class Edge<Tool t1, Tool t2> : EdgeBase<t1, t2, []>;
|
|
|
|
|
2008-05-06 18:18:20 +00:00
|
|
|
// Edge and SimpleEdge are synonyms.
|
|
|
|
class SimpleEdge<Tool t1, Tool t2> : EdgeBase<t1, t2, []>;
|
2008-05-06 16:36:06 +00:00
|
|
|
|
|
|
|
// Optionally enabled edge.
|
|
|
|
class OptionalEdge<Tool t1, Tool t2, list<dag> lst> : EdgeBase<t1, t2, lst>;
|
|
|
|
|
|
|
|
class CompilationGraph<list<EdgeBase> lst> {
|
|
|
|
list<EdgeBase> edges = lst;
|
2008-03-23 08:57:20 +00:00
|
|
|
}
|