From 2f7c963559dbc6dbda43df77a090a93f94c6625e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 6 Jun 2001 20:29:01 +0000 Subject: Initial revision llvm-svn: 2 --- llvm/tools/as/as.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 llvm/tools/as/as.cpp (limited to 'llvm/tools/as/as.cpp') diff --git a/llvm/tools/as/as.cpp b/llvm/tools/as/as.cpp new file mode 100644 index 00000000000..2c319a08491 --- /dev/null +++ b/llvm/tools/as/as.cpp @@ -0,0 +1,85 @@ +//===------------------------------------------------------------------------=== +// LLVM 'AS' UTILITY +// +// This utility may be invoked in the following manner: +// as --help - Output information about command line switches +// as [options] - Read LLVM assembly from stdin, write bytecode to stdout +// as [options] x.ll - Read LLVM assembly from the x.ll file, write bytecode +// to the x.bc file. +// +//===------------------------------------------------------------------------=== + +#include +#include +#include +#include "llvm/Module.h" +#include "llvm/Assembly/Parser.h" +#include "llvm/Assembly/Writer.h" +#include "llvm/Bytecode/Writer.h" +#include "llvm/Tools/CommandLine.h" + + +int main(int argc, char **argv) { + ToolCommandLine Opts(argc, argv); + bool DumpAsm = false; + + for (int i = 1; i < argc; i++) { + if (string(argv[i]) == string("-d")) { + argv[i] = 0; DumpAsm = true; + } + } + + bool PrintMessage = false; + for (int i = 1; i < argc; i++) { + if (argv[i] == 0) continue; + + if (string(argv[i]) == string("--help")) { + PrintMessage = true; + } else { + cerr << argv[0] << ": argument not recognized: '" << argv[i] << "'!\n"; + } + } + + if (PrintMessage) { + cerr << argv[0] << " usage:\n" + << " " << argv[0] << " --help - Print this usage information\n" + << " " << argv[0] << " x.ll - Parse file and output " + << "bytecodes to x.bc\n" + << " " << argv[0] << " - Parse stdin and write to stdout.\n"; + return 1; + } + + ostream *Out = &cout; // Default to output to stdout... + try { + // Parse the file now... + Module *C = ParseAssemblyFile(Opts); + if (C == 0) { + cerr << "assembly didn't read correctly.\n"; + return 1; + } + + if (DumpAsm) + cerr << "Here's the assembly:\n" << C; + + if (Opts.getOutputFilename() != "-") { + Out = new ofstream(Opts.getOutputFilename().c_str(), + (Opts.getForce() ? 0 : ios::noreplace)|ios::out); + if (!Out->good()) { + cerr << "Error opening " << Opts.getOutputFilename() << "!\n"; + delete C; + return 1; + } + } + + WriteBytecodeToFile(C, *Out); + + delete C; + } catch (const ParseException &E) { + cerr << E.getMessage() << endl; + return 1; + } + + if (Out != &cout) delete Out; + return 0; +} + -- cgit v1.2.3