From b3d36293c2b7d5f4b53f3f907f97264309205c23 Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov Date: Sun, 15 Aug 2010 07:07:12 +0000 Subject: llvmc: remove dynamic plugins. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111094 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvmc/src/Base.td.in | 376 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 376 insertions(+) create mode 100644 tools/llvmc/src/Base.td.in (limited to 'tools/llvmc/src/Base.td.in') diff --git a/tools/llvmc/src/Base.td.in b/tools/llvmc/src/Base.td.in new file mode 100644 index 0000000000..45b60b735b --- /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 : 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 : 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))> + ]>; -- cgit v1.2.3