Added -b option to override the default bitcode output file name.
authorSanjiv Gupta <sanjiv.gupta@microchip.com>
Wed, 22 Jul 2009 18:41:45 +0000 (18:41 +0000)
committerSanjiv Gupta <sanjiv.gupta@microchip.com>
Wed, 22 Jul 2009 18:41:45 +0000 (18:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76768 91177308-0d34-0410-b5e6-96231b3b80d8

docs/CommandGuide/llvm-ld.pod
tools/llvm-ld/llvm-ld.cpp

index 224939c77c94e05c20402d6a82df0cb7616cdecc..536ab0fa43d5fe1f86ed87b701c688151401738e 100644 (file)
@@ -104,6 +104,12 @@ should be generated by the linker. By default, B<llvm-ld> generates a file named
 F<a.out> for compatibility with B<ld>. The output will be written to
 F<filename>.
 
+=item B<-b> F<filename>
+
+This option can be used to override the output bitcode file name. By default, 
+the name of the bitcode output file is one more ".bc" suffix added to the name 
+specified by B<-o filename> option.
+
 =item B<-l>F<name>
 
 This option specifies the F<name> of a library to search when resolving symbols
index a4bd1108375925b3b7f647cfdddafedb4fcfa9dc..cc672bc5da7a8f59c8e85a4d0d27b115badf8e8d 100644 (file)
@@ -49,6 +49,10 @@ static cl::opt<std::string> OutputFilename("o", cl::init("a.out"),
   cl::desc("Override output filename"),
   cl::value_desc("filename"));
 
+static cl::opt<std::string> BitcodeOutputFilename("b", cl::init(""),
+  cl::desc("Override bitcode output filename"),
+  cl::value_desc("filename"));
+
 static cl::opt<bool> Verbose("v",
   cl::desc("Print information about actions taken"));
 
@@ -458,7 +462,7 @@ static void EmitShellScript(char **argv) {
     if (!FullLibraryPath.isEmpty())
       Out2 << "    -load=" << FullLibraryPath.toString() << " \\\n";
   }
-  Out2 << "    $0.bc ${1+\"$@\"}\n";
+  Out2 << "    "  << BitcodeOutputFilename << " ${1+\"$@\"}\n";
   Out2.close();
 }
 
@@ -573,10 +577,14 @@ int main(int argc, char **argv, char **envp) {
 #endif
 
     // Generate the bitcode for the optimized module.
-    std::string RealBitcodeOutput = OutputFilename;
+    // If -b wasn't specified, use the name specified
+    // with -o to construct BitcodeOutputFilename.
+    if (BitcodeOutputFilename.empty()) {
+      BitcodeOutputFilename = OutputFilename;
+      if (!LinkAsLibrary) BitcodeOutputFilename += ".bc";
+    }
 
-    if (!LinkAsLibrary) RealBitcodeOutput += ".bc";
-    GenerateBitcode(Composite.get(), RealBitcodeOutput);
+    GenerateBitcode(Composite.get(), BitcodeOutputFilename);
 
     // If we are not linking a library, generate either a native executable
     // or a JIT shell script, depending upon what the user wants.
@@ -601,12 +609,12 @@ int main(int argc, char **argv, char **envp) {
 
           const char* args[4];
           args[0] = I->c_str();
-          args[1] = RealBitcodeOutput.c_str();
+          args[1] = BitcodeOutputFilename.c_str();
           args[2] = tmp_output.c_str();
           args[3] = 0;
           if (0 == sys::Program::ExecuteAndWait(prog, args, 0,0,0,0, &ErrMsg)) {
             if (tmp_output.isBitcodeFile() || tmp_output.isBitcodeFile()) {
-              sys::Path target(RealBitcodeOutput);
+              sys::Path target(BitcodeOutputFilename);
               target.eraseFromDisk();
               if (tmp_output.renamePathOnDisk(target, &ErrMsg))
                 PrintAndExit(ErrMsg, 2);
@@ -642,7 +650,7 @@ int main(int argc, char **argv, char **envp) {
 
         // Generate an assembly language file for the bitcode.
         std::string ErrMsg;
-        if (0 != GenerateAssembly(AssemblyFile.toString(), RealBitcodeOutput,
+        if (0 != GenerateAssembly(AssemblyFile.toString(), BitcodeOutputFilename,
             llc, ErrMsg))
           PrintAndExit(ErrMsg);
 
@@ -672,7 +680,7 @@ int main(int argc, char **argv, char **envp) {
         // Generate an assembly language file for the bitcode.
         std::string ErrMsg;
         if (0 != GenerateCFile(
-            CFile.toString(), RealBitcodeOutput, llc, ErrMsg))
+            CFile.toString(), BitcodeOutputFilename, llc, ErrMsg))
           PrintAndExit(ErrMsg);
 
         if (0 != GenerateNative(OutputFilename, CFile.toString(), 
@@ -692,10 +700,10 @@ int main(int argc, char **argv, char **envp) {
         PrintAndExit(ErrMsg);
 
       // Make the bitcode file readable and directly executable in LLEE as well
-      if (sys::Path(RealBitcodeOutput).makeExecutableOnDisk(&ErrMsg))
+      if (sys::Path(BitcodeOutputFilename).makeExecutableOnDisk(&ErrMsg))
         PrintAndExit(ErrMsg);
 
-      if (sys::Path(RealBitcodeOutput).makeReadableOnDisk(&ErrMsg))
+      if (sys::Path(BitcodeOutputFilename).makeReadableOnDisk(&ErrMsg))
         PrintAndExit(ErrMsg);
     }
   } catch (const std::string& msg) {