mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 14:47:00 +00:00
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
This commit is contained in:
parent
f7bab8c743
commit
be9d9a153f
@ -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);
|
||||
|
@ -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)
|
||||
{}
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <stdexcept>
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvmcc;
|
||||
using namespace llvmc;
|
||||
|
||||
// The auto-generated file
|
||||
#include "AutoGenerated.inc"
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace llvmcc {
|
||||
namespace llvmc {
|
||||
|
||||
typedef llvm::StringMap<std::string> LanguageMap;
|
||||
class CompilationGraph;
|
||||
|
@ -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
|
||||
{
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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, ",");
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace llvmcc {
|
||||
namespace llvmc {
|
||||
|
||||
typedef std::vector<llvm::sys::Path> PathVector;
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user