Updated VS build system. Patch provided by Cedric Venet:
[oota-llvm.git] / tools / llvmc2 / Tools.td
index f4c73cb735b265a3965d56b2b48329f4d135e3f6..4c04f3c4c2f3aae9fe9aa7ad53d4488a1cfef8ff 100644 (file)
 //
 //===----------------------------------------------------------------------===//
 
-// Open issue: should we use DAG lists in Tool specifications
+// TOTHINK: Open issue: should we use DAG lists in Tool specifications
 // or change to something like
+
 // def LLVMGccC : < Tool<
 // [ InLanguage<"c">,
 //   PrefixListOption<"Wl", [UnpackValues, PropertyName<Arg>, ...]>
 //  ...] ?
+
 // DAG lists look more aesthetically pleasing to me.
 
 def llvm_gcc_c : Tool<
 [(in_language "c"),
  (out_language "llvm-bitcode"),
  (output_suffix "bc"),
- (cmd_line "llvm-gcc -c $INFILE -o $OUTFILE -emit-llvm"),
+ (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)
 ]>;
 
@@ -31,18 +42,24 @@ def llvm_gcc_cpp : Tool<
 [(in_language "c++"),
  (out_language "llvm-bitcode"),
  (output_suffix "bc"),
- (cmd_line "llvm-g++ -c $INFILE -o $OUTFILE -emit-llvm"),
+ (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 "S", (help "Test switch")),
- (parameter_option "O", (help "Test Parameter")),
- (prefix_list_option "P", (help "Test Parameter List")),
+ (switch_option "opt", (help "Enable opt")),
  (output_suffix "bc"),
- (cmd_line "opt $INFILE -o $OUTFILE")
+ (cmd_line "opt -f $INFILE -o $OUTFILE")
 ]>;
 
 def llvm_as : Tool<
@@ -56,26 +73,45 @@ def llc : Tool<
 [(in_language "llvm-bitcode"),
  (out_language "assembler"),
  (output_suffix "s"),
- (cmd_line "llc $INFILE -o $OUTFILE")
+ (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 $INFILE -o $OUTFILE"),
- (prefix_list_option "Wa", (unpack_values), (help "pass options to assembler"))
+ (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"))
+ (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
@@ -87,4 +123,5 @@ def LanguageMap : LanguageMap<
      LangToSuffixes<"llvm-assembler", ["ll"]>,
      LangToSuffixes<"llvm-bitcode", ["bc"]>,
      LangToSuffixes<"object-code", ["o"]>,
-     LangToSuffixes<"executable", ["out"]>]>;
+     LangToSuffixes<"executable", ["out"]>
+     ]>;