* Print commands as we execute them with `-v'
authorMisha Brukman <brukman+llvm@gmail.com>
Wed, 20 Apr 2005 03:22:18 +0000 (03:22 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Wed, 20 Apr 2005 03:22:18 +0000 (03:22 +0000)
* Add option `-save-temps'
Patch contributed by Markus Oberhumer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21367 91177308-0d34-0410-b5e6-96231b3b80d8

tools/gccld/GenerateCode.cpp
tools/gccld/gccld.cpp
tools/gccld/gccld.h

index fa054e79b70a88d75546bc7de8bba956a77819ee..1f1a261248f0ffe82a73163800ef1275d1577e8e 100644 (file)
@@ -120,6 +120,13 @@ static void RemoveEnv(const char * name, char ** const envp) {
   return;
 }
 
+static void dumpArgs(const char **args) {
+  std::cout << *args++;
+  while (*args)
+    std::cout << ' ' << *args++;
+  std::cout << '\n';
+}
+
 static inline void addPass(PassManager &PM, Pass *P) {
   // Add the pass to the pass manager...
   PM.add(P);
@@ -297,7 +304,8 @@ int llvm::GenerateBytecode(Module *M, int StripLevel, bool Internalize,
 ///
 int llvm::GenerateAssembly(const std::string &OutputFilename,
                            const std::string &InputFilename,
-                           const sys::Path &llc) {
+                           const sys::Path &llc,
+                           bool Verbose) {
   // Run LLC to convert the bytecode file into assembly code.
   std::vector<const char*> args;
   args.push_back(llc.c_str());
@@ -306,7 +314,7 @@ int llvm::GenerateAssembly(const std::string &OutputFilename,
   args.push_back(OutputFilename.c_str());
   args.push_back(InputFilename.c_str());
   args.push_back(0);
-
+  if (Verbose) dumpArgs(&args[0]);
   return sys::Program::ExecuteAndWait(llc, &args[0]);
 }
 
@@ -314,7 +322,8 @@ int llvm::GenerateAssembly(const std::string &OutputFilename,
 /// specified bytecode file.
 int llvm::GenerateCFile(const std::string &OutputFile,
                         const std::string &InputFile,
-                        const sys::Path &llc) {
+                        const sys::Path &llc,
+                        bool Verbose) {
   // Run LLC to convert the bytecode file into C.
   std::vector<const char*> args;
   args.push_back(llc.c_str());
@@ -324,6 +333,7 @@ int llvm::GenerateCFile(const std::string &OutputFile,
   args.push_back(OutputFile.c_str());
   args.push_back(InputFile.c_str());
   args.push_back(0);
+  if (Verbose) dumpArgs(&args[0]);
   return sys::Program::ExecuteAndWait(llc, &args[0]);
 }
 
@@ -349,7 +359,8 @@ int llvm::GenerateNative(const std::string &OutputFilename,
                          const sys::Path &gcc, char ** const envp,
                          bool Shared,
                          const std::string &RPath,
-                         const std::string &SOName) {
+                         const std::string &SOName,
+                         bool Verbose) {
   // Remove these environment variables from the environment of the
   // programs that we will execute.  It appears that GCC sets these
   // environment variables so that the programs it uses can configure
@@ -417,6 +428,7 @@ int llvm::GenerateNative(const std::string &OutputFilename,
   args.push_back(0);
 
   // Run the compiler to assembly and link together the program.
+  if (Verbose) dumpArgs(&args[0]);
   return sys::Program::ExecuteAndWait(gcc, &args[0], (const char**)clean_env);
 }
 
index 8698cc889910fa2fa1ed554666c2274446638a73..98e7dea3258871edeeba3c612e7bbb371c3579b9 100644 (file)
@@ -83,6 +83,10 @@ namespace {
   cl::opt<bool>    
   NativeCBE("native-cbe",
             cl::desc("Generate a native binary with the C backend and GCC"));
+
+  cl::opt<bool>    
+  SaveTemps("save-temps",
+         cl::desc("Do not delete temporary files"));
             
   cl::opt<std::string>
   RPath("rpath",
@@ -300,16 +304,19 @@ int main(int argc, char **argv, char **envp ) {
 
       // Generate an assembly language file for the bytecode.
       if (Verbose) std::cout << "Generating Assembly Code\n";
-      GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput, llc);
+      GenerateAssembly(AssemblyFile.toString(), RealBytecodeOutput, llc, 
+                       Verbose);
       if (Verbose) std::cout << "Generating Native Code\n";
       GenerateNative(OutputFilename, AssemblyFile.toString(), 
                      LibPaths, Libraries, gcc, envp, LinkAsLibrary, RPath,
-                     SOName );
+                     SOName, Verbose);
 
-      // Remove the assembly language file.
-      AssemblyFile.destroyFile();
-      // Remove the bytecode language file.
-      sys::Path(RealBytecodeOutput).destroyFile();
+      if (!SaveTemps) {
+        // Remove the assembly language file.
+        AssemblyFile.destroyFile();
+        // Remove the bytecode language file.
+        sys::Path(RealBytecodeOutput).destroyFile();
+      }
     
     } else if (NativeCBE) {
       sys::Path CFile (OutputFilename);
@@ -329,18 +336,19 @@ int main(int argc, char **argv, char **envp ) {
         return PrintAndReturn(argv[0], "Failed to find gcc");
 
       // Generate an assembly language file for the bytecode.
-      if (Verbose) std::cout << "Generating Assembly Code\n";
-      GenerateCFile(CFile.toString(), RealBytecodeOutput, llc);
+      if (Verbose) std::cout << "Generating C Source Code\n";
+      GenerateCFile(CFile.toString(), RealBytecodeOutput, llc, Verbose);
       if (Verbose) std::cout << "Generating Native Code\n";
       GenerateNative(OutputFilename, CFile.toString(),
                      LibPaths, Libraries, gcc, envp, LinkAsLibrary, RPath,
-                     SOName );
+                     SOName, Verbose);
 
-      // Remove the assembly language file.
-      CFile.destroyFile();
-    
-      // Remove the bytecode language file.
-      sys::Path(RealBytecodeOutput).destroyFile();
+      if (!SaveTemps) {
+        // Remove the assembly language file.
+        CFile.destroyFile();
+        // Remove the bytecode language file.
+        sys::Path(RealBytecodeOutput).destroyFile();
+      }
 
     } else if (!LinkAsLibrary) {
       EmitShellScript(argv);
index ea9a8ee3a1daae141e58e37eea51025f13adcb29..85dfb2d5c5cef31eb45f77a3ce0c9c363b60acc2 100644 (file)
@@ -29,12 +29,14 @@ GenerateBytecode (Module * M,
 int
 GenerateAssembly (const std::string & OutputFilename,
                   const std::string & InputFilename,
-                  const sys::Path & llc);
+                  const sys::Path & llc,
+                  bool Verbose=false);
 
 int 
 GenerateCFile (const std::string &OutputFile, 
                const std::string &InputFile,
-               const sys::Path &llc);
+               const sys::Path &llc,
+               bool Verbose=false);
 int
 GenerateNative (const std::string & OutputFilename,
                 const std::string & InputFilename,
@@ -44,6 +46,7 @@ GenerateNative (const std::string & OutputFilename,
                 char ** const envp,
                 bool Shared,
                 const std::string & RPath,
-                const std::string & SOName);
+                const std::string & SOName,
+                bool Verbose=false);
 
 } // End llvm namespace