(help "Stop after checking the input for syntax errors")),
(switch_option "opt",
(help "Enable opt")),
+ (switch_option "O0",
+ (help "Turn off optimization")),
+ (switch_option "O1",
+ (help "Optimization level 1")),
+ (switch_option "O2",
+ (help "Optimization level 2")),
+ (switch_option "O3",
+ (help "Optimization level 3")),
(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)),
(parameter_option "linker",
(help "Choose linker (possible values: gcc, g++)")),
+ (parameter_option "mtune",
+ (help "Target a specific CPU type"), (hidden)),
+ (parameter_option "march",
+ (help "A synonym for -mtune"), (hidden)),
+ (parameter_option "mcpu",
+ (help "A deprecated synonym for -mtune"), (hidden)),
(parameter_option "MF",
(help "Specify a file to write dependencies to"), (hidden)),
(parameter_option "MT",
(hidden)),
(parameter_list_option "include",
(help "Include the named file prior to preprocessing")),
+ (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)),
+ (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")),
- (prefix_list_option "Wa,",
+ (prefix_list_option "Wa,", (comma_separated),
(help "Pass options to assembler")),
- (prefix_list_option "Wllc,",
+ (prefix_list_option "Wllc,", (comma_separated),
(help "Pass options to llc")),
(prefix_list_option "L",
(help "Add a directory to link path")),
(help "Search a library when linking")),
(prefix_list_option "Wl,",
(help "Pass options to linker")),
- (prefix_list_option "Wo,",
- (help "Pass options to opt"))
+ (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))
]>;
+// 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"]),
+ (and (switch_on "O1"), (switch_on "O0")),
+ (unset_option "O0"))
+>;
+
+
// Tools
class llvm_gcc_based <string cmd_prefix, string in_lang, string E_ext> : Tool<
(and (switch_on "emit-llvm"), (switch_on "c")), (stop_compilation),
(switch_on "fsyntax-only"), (stop_compilation),
(not_empty "include"), (forward "include"),
- (not_empty "I"), (forward "I")),
- (not_empty "D"), (forward "D")),
- (not_empty "MF"), (forward "MF")),
+ (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 "march"), (forward "march"),
+ (not_empty "mtune"), (forward "mtune"),
+ (not_empty "mcpu"), (forward "mcpu"),
+ (not_empty "m"), (forward "m"),
+ (switch_on "m32"), (forward "m32"),
+ (switch_on "m64"), (forward "m64"),
+ (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)
]>;
[(in_language "llvm-bitcode"),
(out_language "llvm-bitcode"),
(output_suffix "bc"),
- (actions (case (not_empty "Wo,"), (unpack_values "Wo,"))),
+ (actions (case (not_empty "Wo,"), (forward_value "Wo,"),
+ (switch_on "O1"), (forward "O1"),
+ (switch_on "O2"), (forward "O2"),
+ (switch_on "O3"), (forward "O3"))),
(cmd_line "opt -f $INFILE -o $OUTFILE")
]>;
[(in_language "llvm-assembler"),
(out_language "llvm-bitcode"),
(output_suffix "bc"),
- (cmd_line "llvm-as $INFILE -o $OUTFILE")
+ (cmd_line "llvm-as $INFILE -o $OUTFILE"),
+ (actions (case (switch_on "emit-llvm"), (stop_compilation)))
]>;
def llvm_gcc_assembler : Tool<
(cmd_line "@LLVMGCCCOMMAND@ -c -x assembler $INFILE -o $OUTFILE"),
(actions (case
(switch_on "c"), (stop_compilation),
- (not_empty "Wa,"), (unpack_values "Wa,")))
+ (not_empty "Wa,"), (forward_value "Wa,")))
]>;
def llc : Tool<
-[(in_language "llvm-bitcode"),
+[(in_language ["llvm-bitcode", "llvm-assembler"]),
(out_language "assembler"),
(output_suffix "s"),
(cmd_line "llc -f $INFILE -o $OUTFILE"),
(actions (case
(switch_on "S"), (stop_compilation),
- (not_empty "Wllc,"), (unpack_values "Wllc,")))
+ (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 "mcpu"),
+ (not_empty "mtune"), (forward "mcpu"),
+ (not_empty "mcpu"), (forward "mcpu"),
+ (not_empty "m"), (forward_transformed_value "m", "ConvertToMAttr"),
+ (not_empty "Wllc,"), (forward_value "Wllc,")))
]>;
// Base class for linkers
(actions (case
(switch_on "pthread"), (append_cmd "-lpthread"),
(not_empty "L"), (forward "L"),
+ (not_empty "F"), (forward "F"),
+ (not_empty "framework"), (forward "framework"),
+ (not_empty "weak_framework"), (forward "weak_framework"),
+ (switch_on "m32"), (forward "m32"),
+ (switch_on "m64"), (forward "m64"),
(not_empty "l"), (forward "l"),
(not_empty "Wl,"), (forward "Wl,")))
]>;
Edge<"root", "llvm_gcc_cpp">,
Edge<"root", "llvm_gcc_m">,
Edge<"root", "llvm_gcc_mxx">,
- Edge<"root", "llvm_as">,
Edge<"root", "llc">,
Edge<"llvm_gcc_c", "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))>,