aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorSanjiv Gupta <sanjiv.gupta@microchip.com>2009-07-22 18:41:45 +0000
committerSanjiv Gupta <sanjiv.gupta@microchip.com>2009-07-22 18:41:45 +0000
commitd7de7bc2971c7aba0bcd4537cfd1b9c2fff44036 (patch)
tree8beb073c67c3a31d5ebef43007230d1ed301b354 /tools
parent02383cc52ba9c5f944186b5878f2e9d09d479f18 (diff)
downloadexternal_llvm-d7de7bc2971c7aba0bcd4537cfd1b9c2fff44036.zip
external_llvm-d7de7bc2971c7aba0bcd4537cfd1b9c2fff44036.tar.gz
external_llvm-d7de7bc2971c7aba0bcd4537cfd1b9c2fff44036.tar.bz2
Added -b option to override the default bitcode output file name.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76768 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/llvm-ld/llvm-ld.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp
index a4bd110..cc672bc 100644
--- a/tools/llvm-ld/llvm-ld.cpp
+++ b/tools/llvm-ld/llvm-ld.cpp
@@ -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) {