mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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"]>
|
||||
]>;
|
||||
Reference in New Issue
Block a user