[llvm-commits] CVS: llvm/lib/Support/ToolRunner.cpp
Chris Lattner
lattner at cs.uiuc.edu
Tue Oct 14 16:54:05 PDT 2003
Changes in directory llvm/lib/Support:
ToolRunner.cpp updated: 1.5 -> 1.6
---
Log message:
Generalize abstract interpreter interface to allow linking in an arbitrary number of shared objects
---
Diffs of the changes: (+23 -18)
Index: llvm/lib/Support/ToolRunner.cpp
diff -u llvm/lib/Support/ToolRunner.cpp:1.5 llvm/lib/Support/ToolRunner.cpp:1.6
--- llvm/lib/Support/ToolRunner.cpp:1.5 Tue Oct 14 16:34:11 2003
+++ llvm/lib/Support/ToolRunner.cpp Tue Oct 14 16:52:52 2003
@@ -23,15 +23,16 @@
const std::vector<std::string> &Args,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib = "");
+ const std::vector<std::string> &SharedLibs =
+ std::vector<std::string>());
};
int LLI::ExecuteProgram(const std::string &Bytecode,
const std::vector<std::string> &Args,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib) {
- if (!SharedLib.empty()) {
+ const std::vector<std::string> &SharedLibs) {
+ if (!SharedLibs.empty()) {
std::cerr << "LLI currently does not support loading shared libraries.\n"
<< "Exiting.\n";
exit(1);
@@ -99,7 +100,8 @@
const std::vector<std::string> &Args,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib) {
+ const std::vector<std::string> &SharedLibs) {
+
std::string OutputAsmFile;
if (OutputAsm(Bytecode, OutputAsmFile)) {
std::cerr << "Could not generate asm code with `llc', exiting.\n";
@@ -108,7 +110,7 @@
// Assuming LLC worked, compile the result with GCC and run it.
int Result = gcc->ExecuteProgram(OutputAsmFile, Args, GCC::AsmFile,
- InputFile, OutputFile, SharedLib);
+ InputFile, OutputFile, SharedLibs);
removeFile(OutputAsmFile);
return Result;
}
@@ -145,22 +147,24 @@
const std::vector<std::string> &Args,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib = "");
+ const std::vector<std::string> &SharedLibs =
+ std::vector<std::string>());
};
int JIT::ExecuteProgram(const std::string &Bytecode,
const std::vector<std::string> &Args,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib) {
+ const std::vector<std::string> &SharedLibs) {
// Construct a vector of parameters, incorporating those from the command-line
std::vector<const char*> JITArgs;
JITArgs.push_back(LLIPath.c_str());
JITArgs.push_back("-quiet");
JITArgs.push_back("-force-interpreter=false");
- if (!SharedLib.empty()) {
+
+ for (unsigned i = 0, e = SharedLibs.size(); i != e; ++i) {
JITArgs.push_back("-load");
- JITArgs.push_back(SharedLib.c_str());
+ JITArgs.push_back(SharedLibs[i].c_str());
}
JITArgs.push_back(Bytecode.c_str());
// Add optional parameters to the running program from Argv
@@ -220,7 +224,7 @@
const std::vector<std::string> &Args,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib) {
+ const std::vector<std::string> &SharedLibs) {
std::string OutputCFile;
if (OutputC(Bytecode, OutputCFile)) {
std::cerr << "Could not generate C code with `llvm-dis', exiting.\n";
@@ -228,7 +232,7 @@
}
int Result = gcc->ExecuteProgram(OutputCFile, Args, GCC::CFile,
- InputFile, OutputFile, SharedLib);
+ InputFile, OutputFile, SharedLibs);
removeFile(OutputCFile);
return Result;
@@ -257,21 +261,21 @@
//===---------------------------------------------------------------------===//
// GCC abstraction
//
-// This is not a *real* AbstractInterpreter as it does not accept bytecode
-// files, but only input acceptable to GCC, i.e. C, C++, and assembly files
-//
int GCC::ExecuteProgram(const std::string &ProgramFile,
const std::vector<std::string> &Args,
FileType fileType,
const std::string &InputFile,
const std::string &OutputFile,
- const std::string &SharedLib) {
- std::string OutputBinary = getUniqueFilename(ProgramFile+".gcc.exe");
+ const std::vector<std::string> &SharedLibs) {
std::vector<const char*> GCCArgs;
GCCArgs.push_back(GCCPath.c_str());
- if (!SharedLib.empty()) // Specify the shared library to link in...
- GCCArgs.push_back(SharedLib.c_str());
+
+ // Specify the shared libraries to link in...
+ for (unsigned i = 0, e = SharedLibs.size(); i != e; ++i)
+ GCCArgs.push_back(SharedLibs[i].c_str());
+
+ // Specify -x explicitly in case the extension is wonky
GCCArgs.push_back("-x");
if (fileType == CFile) {
GCCArgs.push_back("c");
@@ -281,6 +285,7 @@
}
GCCArgs.push_back(ProgramFile.c_str()); // Specify the input filename...
GCCArgs.push_back("-o");
+ std::string OutputBinary = getUniqueFilename(ProgramFile+".gcc.exe");
GCCArgs.push_back(OutputBinary.c_str()); // Output to the right file...
GCCArgs.push_back("-lm"); // Hard-code the math library...
GCCArgs.push_back("-O2"); // Optimize the program a bit...
More information about the llvm-commits
mailing list