Add a way to query the number of input files.
authorMikhail Glushenkov <foldr@codedgers.com>
Mon, 28 Sep 2009 01:16:42 +0000 (01:16 +0000)
committerMikhail Glushenkov <foldr@codedgers.com>
Mon, 28 Sep 2009 01:16:42 +0000 (01:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82957 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CompilerDriver/Common.td
tools/llvmc/doc/LLVMC-Reference.rst
tools/llvmc/plugins/Base/Base.td.in
utils/TableGen/LLVMCConfigurationEmitter.cpp

index e1a0213bf0b88980bbcc20be89f60aeb4a4747c9..5b7c543f1c92330e806e4e4d0ba0e473d0376fb7 100644 (file)
@@ -66,6 +66,8 @@ def input_languages_contain;
 def empty;
 def not_empty;
 def default;
+def single_input_file;
+def multiple_input_files;
 
 // Possible actions.
 
index 7e609a7bc341d25e01fcb09a22d3ab990c4fd04f..5d3b02a1695a3a5146c1872ddb80308e5d2126cb 100644 (file)
@@ -458,6 +458,13 @@ use TableGen inheritance instead.
   - ``empty`` - The opposite of ``not_empty``. Equivalent to ``(not (not_empty
     X))``. Provided for convenience.
 
+  - ``single_input_file`` - Returns true if there was only one input file
+    provided on the command-line. Used without arguments:
+    ``(single_input_file)``.
+
+  - ``multiple_input_files`` - Equivalent to ``(not (single_input_file))`` (the
+    case of zero input files is considered an error).
+
   - ``default`` - Always evaluates to true. Should always be the last
     test in the ``case`` expression.
 
index d4bff17a3180368006d759b0ef81ef032f17b6c4..4b964e3dea1d0bb87ff522e670a81d1fe52eb110 100644 (file)
@@ -70,6 +70,8 @@ class llvm_gcc_based <string cmd_prefix, string in_lang, string E_ext> : Tool<
               !strconcat(cmd_prefix, " -c $INFILE -o $OUTFILE -emit-llvm"))),
  (actions
      (case
+         (and (multiple_input_files), (or (switch_on "S"), (switch_on "c"))),
+              (error "cannot specify -o with -c or -S with multiple files"),
          (switch_on "E"), [(stop_compilation), (output_suffix E_ext)],
          (and (switch_on "emit-llvm"), (switch_on "S")),
               [(output_suffix "ll"), (stop_compilation)],
index 2800678f8c5bbe95b9a96af79a58a62d7ee539a8..f9a447adffa6971ca1dfcb4f3333566033733d04 100644 (file)
@@ -976,8 +976,22 @@ void CheckForSuperfluousOptions (const RecordVector& Edges,
   }
 }
 
-/// EmitCaseTest1Arg - Helper function used by
-/// EmitCaseConstructHandler.
+/// EmitCaseTest0Args - Helper function used by EmitCaseConstructHandler().
+bool EmitCaseTest0Args(const std::string& TestName, raw_ostream& O) {
+  if (TestName == "single_input_file") {
+    O << "InputFilenames.size() == 1";
+    return true;
+  }
+  else if (TestName == "multiple_input_files") {
+    O << "InputFilenames.size() > 1";
+    return true;
+  }
+
+  return false;
+}
+
+
+/// EmitCaseTest1Arg - Helper function used by EmitCaseConstructHandler().
 bool EmitCaseTest1Arg(const std::string& TestName,
                       const DagInit& d,
                       const OptionDescriptions& OptDescs,
@@ -1021,8 +1035,7 @@ bool EmitCaseTest1Arg(const std::string& TestName,
   return false;
 }
 
-/// EmitCaseTest2Args - Helper function used by
-/// EmitCaseConstructHandler.
+/// EmitCaseTest2Args - Helper function used by EmitCaseConstructHandler().
 bool EmitCaseTest2Args(const std::string& TestName,
                        const DagInit& d,
                        unsigned IndentLevel,
@@ -1101,6 +1114,8 @@ void EmitCaseTest(const DagInit& d, unsigned IndentLevel,
     EmitLogicalOperationTest(d, "||", IndentLevel, OptDescs, O);
   else if (TestName == "not")
     EmitLogicalNot(d, IndentLevel, OptDescs, O);
+  else if (EmitCaseTest0Args(TestName, O))
+    return;
   else if (EmitCaseTest1Arg(TestName, d, OptDescs, O))
     return;
   else if (EmitCaseTest2Args(TestName, d, IndentLevel, OptDescs, O))
@@ -2043,7 +2058,8 @@ void EmitRegisterPlugin(int Priority, raw_ostream& O) {
 /// EmitIncludes - Emit necessary #include directives and some
 /// additional declarations.
 void EmitIncludes(raw_ostream& O) {
-  O << "#include \"llvm/CompilerDriver/CompilationGraph.h\"\n"
+  O << "#include \"llvm/CompilerDriver/BuiltinOptions.h\"\n"
+    << "#include \"llvm/CompilerDriver/CompilationGraph.h\"\n"
     << "#include \"llvm/CompilerDriver/ForceLinkageMacros.h\"\n"
     << "#include \"llvm/CompilerDriver/Plugin.h\"\n"
     << "#include \"llvm/CompilerDriver/Tool.h\"\n\n"