diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2010-08-15 07:07:12 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2010-08-15 07:07:12 +0000 |
commit | b3d36293c2b7d5f4b53f3f907f97264309205c23 (patch) | |
tree | 9e3c0c04e35dd73864cced2cb17c5fb77e973f80 /tools/llvmc/src | |
parent | c0b2a2018ad194de6a9cf46a2a5936319787f1b1 (diff) | |
download | external_llvm-b3d36293c2b7d5f4b53f3f907f97264309205c23.zip external_llvm-b3d36293c2b7d5f4b53f3f907f97264309205c23.tar.gz external_llvm-b3d36293c2b7d5f4b53f3f907f97264309205c23.tar.bz2 |
llvmc: remove dynamic plugins.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111094 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvmc/src')
-rw-r--r-- | tools/llvmc/src/AutoGenerated.td | 17 | ||||
-rw-r--r-- | tools/llvmc/src/Base.td.in | 376 | ||||
-rw-r--r-- | tools/llvmc/src/Clang.td | 87 | ||||
-rw-r--r-- | tools/llvmc/src/Hooks.cpp | 33 | ||||
-rw-r--r-- | tools/llvmc/src/Main.cpp | 16 | ||||
-rw-r--r-- | tools/llvmc/src/Makefile | 14 |
6 files changed, 543 insertions, 0 deletions
diff --git a/tools/llvmc/src/AutoGenerated.td b/tools/llvmc/src/AutoGenerated.td new file mode 100644 index 0000000..8507b1f --- /dev/null +++ b/tools/llvmc/src/AutoGenerated.td @@ -0,0 +1,17 @@ +//===- AutoGenerated.td - LLVMC toolchain descriptions -----*- 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 compilation graph description used by llvmc. +// +//===----------------------------------------------------------------------===// + +include "llvm/CompilerDriver/Common.td" + +include "Base.td" +include "Clang.td" diff --git a/tools/llvmc/src/Base.td.in b/tools/llvmc/src/Base.td.in new file mode 100644 index 0000000..45b60b7 --- /dev/null +++ b/tools/llvmc/src/Base.td.in @@ -0,0 +1,376 @@ +//===- Base.td - LLVMC toolchain descriptions --------------*- 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 compilation graph description used by llvmc. +// +//===----------------------------------------------------------------------===// + + +// Options + +def OptList : OptionList<[ + (switch_option "emit-llvm", + (help "Emit LLVM .ll files instead of native object files")), + (switch_option "E", + (help "Stop after the preprocessing stage, do not run the compiler")), + (switch_option "fsyntax-only", + (help "Stop after checking the input for syntax errors")), + (switch_option "opt", + (help "Enable opt")), + (switch_option "O0", + (help "Turn off optimization"), (zero_or_more)), + (switch_option "O1", + (help "Optimization level 1"), (zero_or_more)), + (switch_option "O2", + (help "Optimization level 2"), (zero_or_more)), + (switch_option "O3", + (help "Optimization level 3"), (zero_or_more)), + (switch_option "S", + (help "Stop after compilation, do not assemble")), + (switch_option "c", + (help "Compile and assemble, but do not link")), + (switch_option "pthread", + (help "Enable threads")), + (switch_option "m32", + (help "Generate code for a 32-bit environment"), (hidden)), + (switch_option "m64", + (help "Generate code for a 64-bit environment"), (hidden)), + (switch_option "fPIC", + (help "Relocation model: PIC"), (hidden)), + (switch_option "mdynamic-no-pic", + (help "Relocation model: dynamic-no-pic"), (hidden)), + (switch_option "shared", + (help "Create a DLL instead of the regular executable")), + (parameter_option "linker", + (help "Choose linker (possible values: gcc, g++)")), + (parameter_option "mtune", + (help "Target a specific CPU type"), (hidden), (forward_not_split)), + + // TODO: Add a conditional compilation mechanism to make Darwin-only options + // like '-arch' really Darwin-only. + + (parameter_option "arch", + (help "Compile for the specified target architecture"), (hidden)), + (parameter_option "march", + (help "A synonym for -mtune"), (hidden), (forward_not_split)), + (parameter_option "mcpu", + (help "A deprecated synonym for -mtune"), (hidden), (forward_not_split)), + (switch_option "mfix-and-continue", + (help "Needed by gdb to load .o files dynamically"), (hidden)), + (parameter_option "MF", + (help "Specify a file to write dependencies to"), (hidden)), + (parameter_list_option "MT", + (help "Change the name of the rule emitted by dependency generation"), + (hidden)), + (parameter_list_option "include", + (help "Include the named file prior to preprocessing")), + (parameter_list_option "iquote", + (help "Search dir only for files requested with #inlcude \"file\""), + (hidden)), + (parameter_list_option "framework", + (help "Specifies a framework to link against")), + (parameter_list_option "weak_framework", + (help "Specifies a framework to weakly link against"), (hidden)), + (parameter_option "filelist", (hidden), + (help "Link the files listed in file")), + (prefix_list_option "F", + (help "Add a directory to framework search path")), + (prefix_list_option "I", + (help "Add a directory to include path")), + (prefix_list_option "D", + (help "Define a macro")), + (parameter_list_option "Xpreprocessor", (hidden), + (help "Pass options to preprocessor")), + (prefix_list_option "Wa,", (comma_separated), + (help "Pass options to assembler")), + (parameter_list_option "Xassembler", (hidden), + (help "Pass options to assembler")), + (prefix_list_option "Wllc,", (comma_separated), + (help "Pass options to llc")), + (prefix_list_option "L", + (help "Add a directory to link path")), + (prefix_list_option "l", + (help "Search a library when linking")), + (prefix_list_option "Wl,", + (help "Pass options to linker")), + (parameter_list_option "Xlinker", (hidden), + (help "Pass options to linker")), + (prefix_list_option "Wo,", (comma_separated), + (help "Pass options to opt")), + (prefix_list_option "m", + (help "Enable or disable various extensions (-mmmx, -msse, etc.)"), + (hidden)), + (switch_option "dynamiclib", (hidden), + (help "Produce a dynamic library")), + (switch_option "prebind", (hidden), + (help "Prebind all undefined symbols")), + (switch_option "dead_strip", (hidden), + (help "Remove unreachable blocks of code")), + (switch_option "single_module", (hidden), + (help "Build the library so it contains only one module")), + (parameter_option "install_name", (hidden), + (help "File name the library will be installed in")), + (parameter_option "compatibility_version", (hidden), + (help "Compatibility version number")), + (parameter_option "current_version", (hidden), + (help "Current version number")) +]>; + +// Option preprocessor. + +def Preprocess : OptionPreprocessor< +(case (not (any_switch_on ["O0", "O1", "O2", "O3"])), + (set_option "O2"), + (and (switch_on "O3"), (any_switch_on ["O0", "O1", "O2"])), + (unset_option ["O0", "O1", "O2"]), + (and (switch_on "O2"), (any_switch_on ["O0", "O1"])), + (unset_option ["O0", "O1"]), + (switch_on ["O1", "O0"]), + (unset_option "O0")) +>; + +// Tools + +class llvm_gcc_based <string cmd_prefix, string in_lang, + string E_ext, string out_lang> : Tool< +[(in_language in_lang), + (out_language "llvm-bitcode"), + (output_suffix out_lang), + (command cmd_prefix), + (actions + (case + (and (not_empty "o"), + (multiple_input_files), (or (switch_on "S"), (switch_on "c"))), + (error "cannot specify -o with -c or -S with multiple files"), + (switch_on "E"), + [(forward "E"), (stop_compilation), (output_suffix E_ext)], + (and (switch_on "E"), (empty "o")), (no_out_file), + (switch_on ["emit-llvm", "S"]), + [(output_suffix "ll"), (stop_compilation)], + (switch_on ["emit-llvm", "c"]), (stop_compilation), + (switch_on "fsyntax-only"), [(forward "fsyntax-only"), + (no_out_file), (stop_compilation)], + (switch_on ["S", "emit-llvm"]), [(forward "S"), (forward "emit-llvm")], + (not (or (switch_on ["S", "emit-llvm"]), (switch_on "fsyntax-only"))), + [(append_cmd "-c"), (append_cmd "-emit-llvm")], + + // Forwards + (not_empty "Xpreprocessor"), (forward "Xpreprocessor"), + (not_empty "include"), (forward "include"), + (not_empty "iquote"), (forward "iquote"), + (not_empty "save-temps"), (append_cmd "-save-temps"), + (not_empty "I"), (forward "I"), + (not_empty "F"), (forward "F"), + (not_empty "D"), (forward "D"), + (not_empty "arch"), (forward "arch"), + (not_empty "march"), (forward "march"), + (not_empty "mtune"), (forward "mtune"), + (not_empty "mcpu"), (forward "mcpu"), + (not_empty "m"), (forward "m"), + (switch_on "mfix-and-continue"), (forward "mfix-and-continue"), + (switch_on "m32"), (forward "m32"), + (switch_on "m64"), (forward "m64"), + (switch_on "O0"), (forward "O0"), + (switch_on "O1"), (forward "O1"), + (switch_on "O2"), (forward "O2"), + (switch_on "O3"), (forward "O3"), + (switch_on "fPIC"), (forward "fPIC"), + (switch_on "mdynamic-no-pic"), (forward "mdynamic-no-pic"), + (not_empty "MF"), (forward "MF"), + (not_empty "MT"), (forward "MT"))), + (sink) +]>; + +def llvm_gcc_c : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x c", "c", "i", "bc">; +def llvm_gcc_cpp : llvm_gcc_based<"@LLVMGXXCOMMAND@ -x c++", "c++", "i", "bc">; +def llvm_gcc_m : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c", + "objective-c", "mi", "bc">; +def llvm_gcc_mxx : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c++", + "objective-c++", "mi", "bc">; + +def llvm_gcc_c_pch : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x c-header", + "c-header", "i", "gch">; +def llvm_gcc_cpp_pch : llvm_gcc_based<"@LLVMGXXCOMMAND@ -x c++-header", + "c++-header", + "i", "gch">; +def llvm_gcc_m_pch : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c-header", + "objective-c-header", + "mi", "gch">; +def llvm_gcc_mxx_pch + : llvm_gcc_based<"@LLVMGCCCOMMAND@ -x objective-c++-header", + "objective-c++-header", "mi", "gch">; + +def opt : Tool< +[(in_language "llvm-bitcode"), + (out_language "llvm-bitcode"), + (output_suffix "bc"), + (actions (case (not_empty "Wo,"), (forward_value "Wo,"), + (switch_on "O1"), (forward "O1"), + (switch_on "O2"), (forward "O2"), + (switch_on "O3"), (forward "O3"))), + (command "opt -f") +]>; + +def llvm_as : Tool< +[(in_language "llvm-assembler"), + (out_language "llvm-bitcode"), + (output_suffix "bc"), + (command "llvm-as"), + (actions (case (switch_on "emit-llvm"), (stop_compilation))) +]>; + +def llvm_gcc_assembler : Tool< +[(in_language "assembler"), + (out_language "object-code"), + (output_suffix "o"), + (command "@LLVMGCCCOMMAND@ -c -x assembler"), + (actions (case + (switch_on "c"), (stop_compilation), + (not_empty "arch"), (forward "arch"), + (not_empty "Xassembler"), (forward "Xassembler"), + (switch_on "m32"), (forward "m32"), + (switch_on "m64"), (forward "m64"), + (not_empty "Wa,"), (forward "Wa,"))) +]>; + +def llc : Tool< +[(in_language ["llvm-bitcode", "llvm-assembler"]), + (out_language "assembler"), + (output_suffix "s"), + (command "llc"), + (actions (case + (switch_on "S"), (stop_compilation), + (switch_on "O0"), (forward "O0"), + (switch_on "O1"), (forward "O1"), + (switch_on "O2"), (forward "O2"), + (switch_on "O3"), (forward "O3"), + (switch_on "fPIC"), (append_cmd "-relocation-model=pic"), + (switch_on "mdynamic-no-pic"), + (append_cmd "-relocation-model=dynamic-no-pic"), + (not_empty "march"), (forward_as "mtune", "-mcpu"), + (not_empty "mtune"), (forward_as "mtune", "-mcpu"), + (not_empty "mcpu"), (forward "mcpu"), + (not_empty "m"), (forward_transformed_value "m", "ConvertToMAttr"), + (not_empty "Wllc,"), (forward_value "Wllc,"))) +]>; + +// Base class for linkers +class llvm_gcc_based_linker <string cmd_prefix, dag on_empty> : Tool< +[(in_language ["object-code", "static-library"]), + (out_language "executable"), + (output_suffix "out"), + (command cmd_prefix), + (works_on_empty (case (and (not_empty "filelist"), on_empty), true, + (default), false)), + (join), + (actions (case + (switch_on "pthread"), (append_cmd "-lpthread"), + (not_empty "L"), (forward "L"), + (not_empty "F"), (forward "F"), + (not_empty "arch"), (forward "arch"), + (not_empty "framework"), (forward "framework"), + (not_empty "weak_framework"), (forward "weak_framework"), + (not_empty "filelist"), (forward "filelist"), + (switch_on "m32"), (forward "m32"), + (switch_on "m64"), (forward "m64"), + (not_empty "l"), (forward "l"), + (not_empty "Xlinker"), (forward "Xlinker"), + (not_empty "Wl,"), (forward "Wl,"), + (switch_on "shared"), (forward "shared"), + (switch_on "dynamiclib"), (forward "dynamiclib"), + (switch_on "prebind"), (forward "prebind"), + (switch_on "dead_strip"), (forward "dead_strip"), + (switch_on "single_module"), (forward "single_module"), + (not_empty "compatibility_version"), + (forward "compatibility_version"), + (not_empty "current_version"), (forward "current_version"), + (not_empty "install_name"), (forward "install_name"))) +]>; + +// Default linker +def llvm_gcc_linker : llvm_gcc_based_linker<"@LLVMGCCCOMMAND@", + (not (or (parameter_equals "linker", "g++"), + (parameter_equals "linker", "c++")))>; +// Alternative linker for C++ +def llvm_gcc_cpp_linker : llvm_gcc_based_linker<"@LLVMGXXCOMMAND@", + (or (parameter_equals "linker", "g++"), + (parameter_equals "linker", "c++"))>; + +// Language map + +def LanguageMap : LanguageMap< + [LangToSuffixes<"c++", ["cc", "cp", "cxx", "cpp", "CPP", "c++", "C"]>, + LangToSuffixes<"c++-header", ["hpp"]>, + LangToSuffixes<"c", ["c"]>, + LangToSuffixes<"c-header", ["h"]>, + LangToSuffixes<"c-cpp-output", ["i"]>, + LangToSuffixes<"objective-c-cpp-output", ["mi"]>, + LangToSuffixes<"objective-c++", ["mm"]>, + LangToSuffixes<"objective-c++-header", ["hmm"]>, + LangToSuffixes<"objective-c", ["m"]>, + LangToSuffixes<"objective-c-header", ["hm"]>, + LangToSuffixes<"assembler", ["s"]>, + LangToSuffixes<"assembler-with-cpp", ["S"]>, + LangToSuffixes<"llvm-assembler", ["ll"]>, + LangToSuffixes<"llvm-bitcode", ["bc"]>, + LangToSuffixes<"object-code", ["o", "*empty*"]>, + LangToSuffixes<"static-library", ["a", "lib"]>, + LangToSuffixes<"executable", ["out"]> + ]>; + +// Compilation graph + +def CompilationGraph : CompilationGraph<[ + Edge<"root", "llvm_gcc_c">, + Edge<"root", "llvm_gcc_assembler">, + Edge<"root", "llvm_gcc_cpp">, + Edge<"root", "llvm_gcc_m">, + Edge<"root", "llvm_gcc_mxx">, + Edge<"root", "llc">, + + Edge<"root", "llvm_gcc_c_pch">, + Edge<"root", "llvm_gcc_cpp_pch">, + Edge<"root", "llvm_gcc_m_pch">, + Edge<"root", "llvm_gcc_mxx_pch">, + + Edge<"llvm_gcc_c", "llc">, + Edge<"llvm_gcc_cpp", "llc">, + Edge<"llvm_gcc_m", "llc">, + Edge<"llvm_gcc_mxx", "llc">, + Edge<"llvm_as", "llc">, + + OptionalEdge<"root", "llvm_as", + (case (switch_on "emit-llvm"), (inc_weight))>, + OptionalEdge<"llvm_gcc_c", "opt", (case (switch_on "opt"), (inc_weight))>, + OptionalEdge<"llvm_gcc_cpp", "opt", (case (switch_on "opt"), (inc_weight))>, + OptionalEdge<"llvm_gcc_m", "opt", (case (switch_on "opt"), (inc_weight))>, + OptionalEdge<"llvm_gcc_mxx", "opt", (case (switch_on "opt"), (inc_weight))>, + OptionalEdge<"llvm_as", "opt", (case (switch_on "opt"), (inc_weight))>, + Edge<"opt", "llc">, + + Edge<"llc", "llvm_gcc_assembler">, + Edge<"llvm_gcc_assembler", "llvm_gcc_linker">, + OptionalEdge<"llvm_gcc_assembler", "llvm_gcc_cpp_linker", + (case + (or (input_languages_contain "c++"), + (input_languages_contain "objective-c++")), + (inc_weight), + (or (parameter_equals "linker", "g++"), + (parameter_equals "linker", "c++")), (inc_weight))>, + + + Edge<"root", "llvm_gcc_linker">, + OptionalEdge<"root", "llvm_gcc_cpp_linker", + (case + (or (input_languages_contain "c++"), + (input_languages_contain "objective-c++")), + (inc_weight), + (or (parameter_equals "linker", "g++"), + (parameter_equals "linker", "c++")), (inc_weight))> + ]>; diff --git a/tools/llvmc/src/Clang.td b/tools/llvmc/src/Clang.td new file mode 100644 index 0000000..c8c396e --- /dev/null +++ b/tools/llvmc/src/Clang.td @@ -0,0 +1,87 @@ +//===- Clang.td - LLVMC toolchain descriptions -------------*- 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 compilation graph description used by llvmc. +// +//===----------------------------------------------------------------------===// + + +def Options : OptionList<[ +(switch_option "clang", (help "Use Clang instead of llvm-gcc")) +]>; + +class clang_based<string language, string cmd, string ext_E> : Tool< +[(in_language language), + (out_language "llvm-bitcode"), + (output_suffix "bc"), + (command cmd), + (actions (case (switch_on "E"), + [(forward "E"), (stop_compilation), (output_suffix ext_E)], + (and (switch_on "E"), (empty "o")), (no_out_file), + (switch_on "fsyntax-only"), (stop_compilation), + (switch_on ["S", "emit-llvm"]), + [(append_cmd "-emit-llvm"), + (stop_compilation), (output_suffix "ll")], + (not (switch_on ["S", "emit-llvm"])), + (append_cmd "-emit-llvm-bc"), + (switch_on ["c", "emit-llvm"]), + (stop_compilation), + (not_empty "include"), (forward "include"), + (not_empty "I"), (forward "I"))), + (sink) +]>; + +def clang_c : clang_based<"c", "clang -x c", "i">; +def clang_cpp : clang_based<"c++", "clang -x c++", "i">; +def clang_objective_c : clang_based<"objective-c", + "clang -x objective-c", "mi">; +def clang_objective_cpp : clang_based<"objective-c++", + "clang -x objective-c++", "mi">; + +def as : Tool< +[(in_language "assembler"), + (out_language "object-code"), + (output_suffix "o"), + (command "as"), + (actions (case (not_empty "Wa,"), (forward_value "Wa,"), + (switch_on "c"), (stop_compilation))) +]>; + +// Default linker +def llvm_ld : Tool< +[(in_language "object-code"), + (out_language "executable"), + (output_suffix "out"), + (command "llvm-ld -native -disable-internalize"), + (actions (case + (switch_on "pthread"), (append_cmd "-lpthread"), + (not_empty "L"), (forward "L"), + (not_empty "l"), (forward "l"), + (not_empty "Wl,"), (forward_value "Wl,"))), + (join) +]>; + +// Compilation graph + +def ClangCompilationGraph : CompilationGraph<[ + OptionalEdge<"root", "clang_c", + (case (switch_on "clang"), (inc_weight))>, + OptionalEdge<"root", "clang_cpp", + (case (switch_on "clang"), (inc_weight))>, + OptionalEdge<"root", "clang_objective_c", + (case (switch_on "clang"), (inc_weight))>, + OptionalEdge<"root", "clang_objective_cpp", + (case (switch_on "clang"), (inc_weight))>, + Edge<"clang_c", "llc">, + Edge<"clang_cpp", "llc">, + Edge<"clang_objective_c", "llc">, + Edge<"clang_objective_cpp", "llc">, + OptionalEdge<"llc", "as", (case (switch_on "clang"), (inc_weight))>, + Edge<"as", "llvm_ld"> +]>; diff --git a/tools/llvmc/src/Hooks.cpp b/tools/llvmc/src/Hooks.cpp new file mode 100644 index 0000000..661a914 --- /dev/null +++ b/tools/llvmc/src/Hooks.cpp @@ -0,0 +1,33 @@ +#include <string> +#include <vector> + +namespace hooks { +typedef std::vector<std::string> StrVec; + +/// ConvertToMAttr - Convert -m* and -mno-* to -mattr=+*,-* +std::string ConvertToMAttr(const StrVec& Opts) { + std::string out("-mattr="); + + bool firstIter = true; + for (StrVec::const_iterator B = Opts.begin(), E = Opts.end(); B!=E; ++B) { + const std::string& Arg = *B; + + if (firstIter) + firstIter = false; + else + out += ","; + + if (Arg.find("no-") == 0 && Arg[3] != 0) { + out += '-'; + out += Arg.c_str() + 3; + } + else { + out += '+'; + out += Arg; + } + } + + return out; +} + +} diff --git a/tools/llvmc/src/Main.cpp b/tools/llvmc/src/Main.cpp new file mode 100644 index 0000000..9f9c71a --- /dev/null +++ b/tools/llvmc/src/Main.cpp @@ -0,0 +1,16 @@ +//===--- Main.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open +// Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Just include AutoGenerated.inc and CompilerDriver/Main.inc. +// +//===----------------------------------------------------------------------===// + +#include "AutoGenerated.inc" + +#include "llvm/CompilerDriver/Main.inc" diff --git a/tools/llvmc/src/Makefile b/tools/llvmc/src/Makefile new file mode 100644 index 0000000..9cfb27f --- /dev/null +++ b/tools/llvmc/src/Makefile @@ -0,0 +1,14 @@ +##===- tools/llvmc/driver/Makefile -------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open +# Source License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../../.. +LLVMC_BASED_DRIVER = llvmc +BUILT_SOURCES = AutoGenerated.inc + +include $(LEVEL)/Makefile.common |