llvm-6502/tools/llvmc2/Common.td
Mikhail Glushenkov e43228958c New feature: OptionList.
It can be handy to have all information about options gathered in a single place
to provide an overview of all supported options. This patch allows the following:

def Options : OptionList<[
(switch_option "E", (help "Help string")),
(alias_option "quiet", "q")
...
]>;

Tool-specific option properties (like 'append_cmd') have (obviously) no meaning in
this context, so the only properties that are allowed are 'help' and 'required'.

See usage example in examples/Clang.td.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51754 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-30 06:26:08 +00:00

107 lines
2.2 KiB
TableGen

//===- Common.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;
}
// 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 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;
// TOTHINK: remove?
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;
}