Give extract -o and -f options, just like every other tool!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11580 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2004-02-18 16:53:59 +00:00
parent 9b2c31c5cb
commit ba9cc1f789
2 changed files with 56 additions and 8 deletions

View File

@ -20,7 +20,7 @@
#include "llvm/Target/TargetData.h"
#include "Support/CommandLine.h"
#include <memory>
#include <fstream>
using namespace llvm;
// InputFilename - The filename to read from.
@ -28,6 +28,12 @@ static cl::opt<std::string>
InputFilename(cl::Positional, cl::desc("<input bytecode file>"),
cl::init("-"), cl::value_desc("filename"));
static cl::opt<std::string>
OutputFilename("o", cl::desc("Specify output filename"),
cl::value_desc("filename"), cl::init("-"));
static cl::opt<bool>
Force("f", cl::desc("Overwrite output files"));
// ExtractFunc - The function to extract from the module... defaults to main.
static cl::opt<std::string>
@ -51,8 +57,8 @@ int main(int argc, char **argv) {
return 1;
}
// In addition to just parsing the input from GCC, we also want to spiff it up
// a little bit. Do this now.
// In addition to deleting all other functions, we also want to spiff it up a
// little bit. Do this now.
//
PassManager Passes;
Passes.add(new TargetData("extract", M.get())); // Use correct TargetData
@ -60,8 +66,26 @@ int main(int argc, char **argv) {
Passes.add(createGlobalDCEPass()); // Delete unreachable globals
Passes.add(createFunctionResolvingPass()); // Delete prototypes
Passes.add(createDeadTypeEliminationPass()); // Remove dead types...
Passes.add(new WriteBytecodePass(&std::cout)); // Write bytecode to file...
std::ostream *Out = 0;
if (OutputFilename != "-") { // Not stdout?
if (!Force && std::ifstream(OutputFilename.c_str())) {
// If force is not specified, make sure not to overwrite a file!
std::cerr << argv[0] << ": error opening '" << OutputFilename
<< "': file exists!\n"
<< "Use -f command line argument to force output\n";
return 1;
}
Out = new std::ofstream(OutputFilename.c_str());
} else { // Specified stdout
Out = &std::cout;
}
Passes.add(new WriteBytecodePass(Out)); // Write bytecode to file...
Passes.run(*M.get());
if (Out != &std::cout)
delete Out;
return 0;
}

View File

@ -20,7 +20,7 @@
#include "llvm/Target/TargetData.h"
#include "Support/CommandLine.h"
#include <memory>
#include <fstream>
using namespace llvm;
// InputFilename - The filename to read from.
@ -28,6 +28,12 @@ static cl::opt<std::string>
InputFilename(cl::Positional, cl::desc("<input bytecode file>"),
cl::init("-"), cl::value_desc("filename"));
static cl::opt<std::string>
OutputFilename("o", cl::desc("Specify output filename"),
cl::value_desc("filename"), cl::init("-"));
static cl::opt<bool>
Force("f", cl::desc("Overwrite output files"));
// ExtractFunc - The function to extract from the module... defaults to main.
static cl::opt<std::string>
@ -51,8 +57,8 @@ int main(int argc, char **argv) {
return 1;
}
// In addition to just parsing the input from GCC, we also want to spiff it up
// a little bit. Do this now.
// In addition to deleting all other functions, we also want to spiff it up a
// little bit. Do this now.
//
PassManager Passes;
Passes.add(new TargetData("extract", M.get())); // Use correct TargetData
@ -60,8 +66,26 @@ int main(int argc, char **argv) {
Passes.add(createGlobalDCEPass()); // Delete unreachable globals
Passes.add(createFunctionResolvingPass()); // Delete prototypes
Passes.add(createDeadTypeEliminationPass()); // Remove dead types...
Passes.add(new WriteBytecodePass(&std::cout)); // Write bytecode to file...
std::ostream *Out = 0;
if (OutputFilename != "-") { // Not stdout?
if (!Force && std::ifstream(OutputFilename.c_str())) {
// If force is not specified, make sure not to overwrite a file!
std::cerr << argv[0] << ": error opening '" << OutputFilename
<< "': file exists!\n"
<< "Use -f command line argument to force output\n";
return 1;
}
Out = new std::ofstream(OutputFilename.c_str());
} else { // Specified stdout
Out = &std::cout;
}
Passes.add(new WriteBytecodePass(Out)); // Write bytecode to file...
Passes.run(*M.get());
if (Out != &std::cout)
delete Out;
return 0;
}