diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-06 18:08:59 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-06 18:08:59 +0000 |
commit | be9d9a153f7c26b2c450b4f33487c81e02b8cf36 (patch) | |
tree | 278dc136a4a7adb1bb2c12f16f6c89256a4ce195 | |
parent | f7bab8c7433d1d1e8393a7c6dc72441f12e659f2 (diff) | |
download | external_llvm-be9d9a153f7c26b2c450b4f33487c81e02b8cf36.zip external_llvm-be9d9a153f7c26b2c450b4f33487c81e02b8cf36.tar.gz external_llvm-be9d9a153f7c26b2c450b4f33487c81e02b8cf36.tar.bz2 |
Add output redirection, rename namespace llvmcc to namespace llvmc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50746 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | tools/llvmc2/Action.cpp | 32 | ||||
-rw-r--r-- | tools/llvmc2/Action.h | 8 | ||||
-rw-r--r-- | tools/llvmc2/AutoGenerated.cpp | 2 | ||||
-rw-r--r-- | tools/llvmc2/AutoGenerated.h | 2 | ||||
-rw-r--r-- | tools/llvmc2/CompilationGraph.cpp | 10 | ||||
-rw-r--r-- | tools/llvmc2/CompilationGraph.h | 12 | ||||
-rw-r--r-- | tools/llvmc2/Tool.cpp | 2 | ||||
-rw-r--r-- | tools/llvmc2/Tool.h | 2 | ||||
-rw-r--r-- | tools/llvmc2/llvmc.cpp | 4 | ||||
-rw-r--r-- | utils/TableGen/LLVMCCConfigurationEmitter.cpp | 10 |
10 files changed, 52 insertions, 32 deletions
diff --git a/tools/llvmc2/Action.cpp b/tools/llvmc2/Action.cpp index 8d34910..fdbfb88 100644 --- a/tools/llvmc2/Action.cpp +++ b/tools/llvmc2/Action.cpp @@ -20,12 +20,13 @@ #include <stdexcept> using namespace llvm; +using namespace llvmc; extern cl::opt<bool> VerboseMode; namespace { int ExecuteProgram(const std::string& name, - const std::vector<std::string>& args) { + const StringVector& args) { sys::Path prog = sys::Program::FindProgramByName(name); if (prog.isEmpty()) @@ -33,14 +34,27 @@ namespace { if (!prog.canExecute()) throw std::runtime_error("Program '" + name + "' is not executable."); - // Invoke the program - std::vector<const char*> argv((args.size()+2)); - argv[0] = name.c_str(); - for (unsigned i = 1; i <= args.size(); ++i) - argv[i] = args[i-1].c_str(); - argv[args.size()+1] = 0; // null terminate list. + const sys::Path* redirects[3] = {0,0,0}; + sys::Path stdout_redirect; - return sys::Program::ExecuteAndWait(prog, &argv[0]); + std::vector<const char*> argv; + argv.reserve((args.size()+2)); + argv.push_back(name.c_str()); + + for (StringVector::const_iterator B = args.begin(), E = args.end(); + B!=E; ++B) { + if (*B == ">") { + ++B; + stdout_redirect.set(*B); + redirects[1] = &stdout_redirect; + } + else { + argv.push_back((*B).c_str()); + } + } + argv.push_back(0); // null terminate list. + + return sys::Program::ExecuteAndWait(prog, &argv[0], 0, &redirects[0]); } void print_string (const std::string& str) { @@ -48,7 +62,7 @@ namespace { } } -int llvmcc::Action::Execute() const { +int llvmc::Action::Execute() const { if (VerboseMode) { std::cerr << Command_ << " "; std::for_each(Args_.begin(), Args_.end(), print_string); diff --git a/tools/llvmc2/Action.h b/tools/llvmc2/Action.h index 3f7b33b..7aaf470 100644 --- a/tools/llvmc2/Action.h +++ b/tools/llvmc2/Action.h @@ -17,14 +17,16 @@ #include <string> #include <vector> -namespace llvmcc { +namespace llvmc { + + typedef std::vector<std::string> StringVector; class Action { std::string Command_; std::vector<std::string> Args_; public: - Action (std::string const& C, - std::vector<std::string> const& A) + Action (const std::string& C, + const StringVector& A) : Command_(C), Args_(A) {} diff --git a/tools/llvmc2/AutoGenerated.cpp b/tools/llvmc2/AutoGenerated.cpp index 327e8e7..9b0255c 100644 --- a/tools/llvmc2/AutoGenerated.cpp +++ b/tools/llvmc2/AutoGenerated.cpp @@ -20,7 +20,7 @@ #include <stdexcept> using namespace llvm; -using namespace llvmcc; +using namespace llvmc; // The auto-generated file #include "AutoGenerated.inc" diff --git a/tools/llvmc2/AutoGenerated.h b/tools/llvmc2/AutoGenerated.h index 686ae3f..49248d9 100644 --- a/tools/llvmc2/AutoGenerated.h +++ b/tools/llvmc2/AutoGenerated.h @@ -18,7 +18,7 @@ #include <string> -namespace llvmcc { +namespace llvmc { typedef llvm::StringMap<std::string> LanguageMap; class CompilationGraph; diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp index a130ee5..817e0fb 100644 --- a/tools/llvmc2/CompilationGraph.cpp +++ b/tools/llvmc2/CompilationGraph.cpp @@ -24,7 +24,7 @@ #include <stdexcept> using namespace llvm; -using namespace llvmcc; +using namespace llvmc; extern cl::list<std::string> InputFilenames; extern cl::opt<std::string> OutputFilename; @@ -215,6 +215,9 @@ const Node* CompilationGraph::FindToolChain(const sys::Path& In) const { return &getNode(ChooseEdge(TV)->ToolName()); } +// TOFIX: merge some parts with PassThroughGraph. +// Build the targets. Command-line options are passed through +// temporary variables. int CompilationGraph::Build (const sys::Path& TempDir) { // For each input file: @@ -234,12 +237,13 @@ int CompilationGraph::Build (const sys::Path& TempDir) { // For all join nodes in topological order: for (std::vector<const Node*>::iterator B = JTV.begin(), E = JTV.end(); B != E; ++B) { - // TOFIX: more testing, merge some parts with PassThroughGraph. + sys::Path Out; const Node* CurNode = *B; JoinTool* JT = &dynamic_cast<JoinTool&>(*CurNode->ToolPtr.getPtr()); bool IsLast = false; + // Has files pending? if (JT->JoinListEmpty()) continue; @@ -277,7 +281,7 @@ int CompilationGraph::Build (const sys::Path& TempDir) { namespace llvm { template <> - struct DOTGraphTraits<llvmcc::CompilationGraph*> + struct DOTGraphTraits<llvmc::CompilationGraph*> : public DefaultDOTGraphTraits { diff --git a/tools/llvmc2/CompilationGraph.h b/tools/llvmc2/CompilationGraph.h index dc388d0..7d949e6 100644 --- a/tools/llvmc2/CompilationGraph.h +++ b/tools/llvmc2/CompilationGraph.h @@ -26,7 +26,7 @@ #include <string> -namespace llvmcc { +namespace llvmc { // An edge in the graph. class Edge : public llvm::RefCountedBaseVPTR<Edge> { @@ -255,10 +255,10 @@ namespace llvmcc { namespace llvm { template <> - struct GraphTraits<llvmcc::CompilationGraph*> { - typedef llvmcc::CompilationGraph GraphType; - typedef llvmcc::Node NodeType; - typedef llvmcc::NodeChildIterator ChildIteratorType; + struct GraphTraits<llvmc::CompilationGraph*> { + typedef llvmc::CompilationGraph GraphType; + typedef llvmc::Node NodeType; + typedef llvmc::NodeChildIterator ChildIteratorType; static NodeType* getEntryNode(GraphType* G) { return &G->getNode("root"); @@ -271,7 +271,7 @@ namespace llvm { return ChildIteratorType(N, N->OutEdges.end()); } - typedef llvmcc::NodesIterator nodes_iterator; + typedef llvmc::NodesIterator nodes_iterator; static nodes_iterator nodes_begin(GraphType *G) { return GraphBegin(G); } diff --git a/tools/llvmc2/Tool.cpp b/tools/llvmc2/Tool.cpp index d0e703a..eea0145 100644 --- a/tools/llvmc2/Tool.cpp +++ b/tools/llvmc2/Tool.cpp @@ -15,7 +15,7 @@ #include "llvm/ADT/StringExtras.h" -void llvmcc::Tool::UnpackValues (const std::string& from, +void llvmc::Tool::UnpackValues (const std::string& from, std::vector<std::string>& to) { llvm::SplitString(from, to, ","); } diff --git a/tools/llvmc2/Tool.h b/tools/llvmc2/Tool.h index b4478f9..1cac7ee 100644 --- a/tools/llvmc2/Tool.h +++ b/tools/llvmc2/Tool.h @@ -22,7 +22,7 @@ #include <string> #include <vector> -namespace llvmcc { +namespace llvmc { typedef std::vector<llvm::sys::Path> PathVector; diff --git a/tools/llvmc2/llvmc.cpp b/tools/llvmc2/llvmc.cpp index 87c0e41..b4f0afe 100644 --- a/tools/llvmc2/llvmc.cpp +++ b/tools/llvmc2/llvmc.cpp @@ -1,4 +1,4 @@ -//===--- llvmcc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===// +//===--- llvmc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -26,7 +26,7 @@ namespace cl = llvm::cl; namespace sys = llvm::sys; -using namespace llvmcc; +using namespace llvmc; // Built-in command-line options. // External linkage here is intentional. diff --git a/utils/TableGen/LLVMCCConfigurationEmitter.cpp b/utils/TableGen/LLVMCCConfigurationEmitter.cpp index aa99b26..e79ff31 100644 --- a/utils/TableGen/LLVMCCConfigurationEmitter.cpp +++ b/utils/TableGen/LLVMCCConfigurationEmitter.cpp @@ -1,4 +1,4 @@ -//===- LLVMCConfigurationEmitter.cpp - Generate LLVMCC config -------------===// +//===- LLVMCConfigurationEmitter.cpp - Generate LLVMC config --------------===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This tablegen backend is responsible for emitting LLVMCC configuration code. +// This tablegen backend is responsible for emitting LLVMC configuration code. // //===----------------------------------------------------------------------===// @@ -848,7 +848,7 @@ void EmitPopulateLanguageMap (const RecordKeeper& Records, std::ostream& O) throw std::string("Error in the language map definition!"); // Generate code - O << "void llvmcc::PopulateLanguageMap(LanguageMap& language_map) {\n"; + O << "void llvmc::PopulateLanguageMap(LanguageMap& language_map) {\n"; for (unsigned i = 0; i < LangsToSuffixesList->size(); ++i) { Record* LangToSuffixes = LangsToSuffixesList->getElementAsRecord(i); @@ -1040,7 +1040,7 @@ void EmitPopulateCompilationGraph (Record* CompilationGraph, ListInit* edges = CompilationGraph->getValueAsListInit("edges"); // Generate code - O << "void llvmcc::PopulateCompilationGraph(CompilationGraph& G) {\n" + O << "void llvmc::PopulateCompilationGraph(CompilationGraph& G) {\n" << Indent1 << "PopulateLanguageMap(G.ExtsToLangs);\n\n"; // Insert vertices @@ -1085,7 +1085,7 @@ void EmitPopulateCompilationGraph (Record* CompilationGraph, // Back-end entry point void LLVMCCConfigurationEmitter::run (std::ostream &O) { // Emit file header - EmitSourceFileHeader("LLVMCC Configuration Library", O); + EmitSourceFileHeader("LLVMC Configuration Library", O); // Get a list of all defined Tools RecordVector Tools = Records.getAllDerivedDefinitions("Tool"); |