--- /dev/null
+//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Action class - implementation and auxiliary functions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Action.h"
+
+#include "llvm/Support/CommandLine.h"
+#include "llvm/System/Program.h"
+
+#include <iostream>
+#include <stdexcept>
+
+using namespace llvm;
+
+extern cl::opt<bool> VerboseMode;
+
+namespace {
+ int ExecuteProgram(const std::string& name,
+ const std::vector<std::string>& args) {
+ sys::Path prog = sys::Program::FindProgramByName(name);
+
+ if (prog.isEmpty())
+ throw std::runtime_error("Can't find program '" + name + "'");
+ 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.
+
+ return sys::Program::ExecuteAndWait(prog, &argv[0]);
+ }
+
+ void print_string (const std::string& str) {
+ std::cerr << str << ' ';
+ }
+}
+
+int llvmcc::Action::Execute() {
+ if (VerboseMode) {
+ std::cerr << Command_ << " ";
+ std::for_each(Args_.begin(), Args_.end(), print_string);
+ std::cerr << '\n';
+ }
+ return ExecuteProgram(Command_, Args_);
+}
--- /dev/null
+//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Action - encapsulates a single shell command.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_ACTION_H
+#define LLVM_TOOLS_LLVMC2_ACTION_H
+
+#include <string>
+#include <vector>
+
+namespace llvmcc {
+
+ class Action {
+ std::string Command_;
+ std::vector<std::string> Args_;
+ public:
+ Action (std::string const& C,
+ std::vector<std::string> const& A)
+ : Command_(C), Args_(A)
+ {}
+
+ int Execute();
+ };
+
+}
+
+#endif // LLVM_TOOLS_LLVMC2_ACTION_H
--- /dev/null
+//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Auto-generated tool descriptions - implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "AutoGenerated.h"
+#include "CompilationGraph.h"
+#include "Tool.h"
+
+#include "llvm/Support/CommandLine.h"
+
+#include <stdexcept>
+
+using namespace llvm;
+using namespace llvmcc;
+
+// The auto-generated file
+#include "AutoGenerated.inc"
--- /dev/null
+//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Auto-generated tool descriptions - public interface.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_AUTOGENERATED_H
+#define LLVM_TOOLS_LLVMC2_AUTOGENERATED_H
+
+#include "llvm/ADT/StringMap.h"
+
+#include <string>
+
+namespace llvmcc {
+
+ typedef llvm::StringMap<std::string> LanguageMap;
+ class CompilationGraph;
+
+ void PopulateLanguageMap(LanguageMap& language_map);
+ void PopulateCompilationGraph(CompilationGraph& tools);
+}
+
+#endif // LLVM_TOOLS_LLVMC2_AUTOGENERATED_H
--- /dev/null
+//===--- CompilationGraph.cpp - The LLVM Compiler Driver --------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Compilation graph - implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "CompilationGraph.h"
+
+#include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/STLExtras.h"
+
+#include <stdexcept>
+
+using namespace llvm;
+
+extern cl::list<std::string> InputFilenames;
+extern cl::opt<std::string> OutputFilename;
+
+int llvmcc::CompilationGraph::Build (const sys::Path& tempDir) const {
+ sys::Path In(InputFilenames.at(0)), Out;
+
+ // Find out which language corresponds to the suffix of the first input file
+ LanguageMap::const_iterator Lang = ExtsToLangs.find(In.getSuffix());
+ if (Lang == ExtsToLangs.end())
+ throw std::runtime_error("Unknown suffix!");
+
+ // Find the toolchain corresponding to this language
+ ToolChainMap::const_iterator ToolsIt = ToolChains.find(Lang->second);
+ if (ToolsIt == ToolChains.end())
+ throw std::runtime_error("Unknown language!");
+ ToolChain Tools = ToolsIt->second;
+
+ PathVector JoinList;
+
+ for (cl::list<std::string>::const_iterator B = InputFilenames.begin(),
+ E = InputFilenames.end(); B != E; ++B) {
+ In = sys::Path(*B);
+
+ // Pass input file through the toolchain
+ for (ToolChain::const_iterator B = Tools.begin(), E = Tools.end();
+ B != E; ++B) {
+
+ const Tool* CurTool = B->getPtr();
+
+ // Is this the last step in the chain?
+ if (llvm::next(B) == E || CurTool->IsLast()) {
+ JoinList.push_back(In);
+ break;
+ }
+ else {
+ Out = tempDir;
+ Out.appendComponent(In.getBasename());
+ Out.appendSuffix(CurTool->OutputSuffix());
+ Out.makeUnique(true, NULL);
+ Out.eraseFromDisk();
+ }
+
+ if (CurTool->GenerateAction(In, Out).Execute() != 0)
+ throw std::runtime_error("Tool returned error code!");
+
+ In = Out; Out.clear();
+ }
+ }
+
+ // Pass .o files to linker
+ const Tool* JoinNode = (--Tools.end())->getPtr();
+
+ // If the final output name is empty, set it to "a.out"
+ if (!OutputFilename.empty()) {
+ Out = sys::Path(OutputFilename);
+ }
+ else {
+ Out = sys::Path("a");
+ Out.appendSuffix(JoinNode->OutputSuffix());
+ }
+
+ if (JoinNode->GenerateAction(JoinList, Out).Execute() != 0)
+ throw std::runtime_error("Tool returned error code!");
+
+ return 0;
+}
--- /dev/null
+//===--- CompilationGraph.h - The LLVM Compiler Driver ----------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Compilation graph - definition.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H
+#define LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H
+
+#include "AutoGenerated.h"
+#include "Tool.h"
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/System/Path.h"
+
+namespace llvmcc {
+
+ typedef std::vector<llvm::IntrusiveRefCntPtr<Tool> > ToolChain;
+ typedef llvm::StringMap<ToolChain> ToolChainMap;
+
+ struct CompilationGraph {
+ ToolChainMap ToolChains;
+ LanguageMap ExtsToLangs;
+
+ int Build(llvm::sys::Path const& tempDir) const;
+ };
+}
+
+#endif // LLVM_TOOLS_LLVMC2_COMPILATION_GRAPH_H
+++ /dev/null
-//===--- Core.cpp - The LLVM Compiler Driver --------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Core driver abstractions.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Core.h"
-#include "Utility.h"
-
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/Support/CommandLine.h"
-
-#include <algorithm>
-#include <iostream>
-#include <stdexcept>
-
-using namespace llvm;
-using namespace llvmcc;
-
-extern cl::list<std::string> InputFilenames;
-extern cl::opt<std::string> OutputFilename;
-extern cl::opt<bool> VerboseMode;
-
-namespace {
- void print_string (const std::string& str) {
- std::cerr << str << ' ';
- }
-}
-
-int llvmcc::Action::Execute() {
- if (VerboseMode) {
- std::cerr << Command_ << " ";
- std::for_each(Args_.begin(), Args_.end(), print_string);
- std::cerr << '\n';
- }
- return ExecuteProgram(Command_, Args_);
-}
-
-int llvmcc::CompilationGraph::Build (const sys::Path& tempDir) const {
- sys::Path In(InputFilenames.at(0)), Out;
-
- // Find out which language corresponds to the suffix of the first input file
- LanguageMap::const_iterator Lang = ExtsToLangs.find(In.getSuffix());
- if (Lang == ExtsToLangs.end())
- throw std::runtime_error("Unknown suffix!");
-
- // Find the toolchain corresponding to this language
- ToolChainMap::const_iterator ToolsIt = ToolChains.find(Lang->second);
- if (ToolsIt == ToolChains.end())
- throw std::runtime_error("Unknown language!");
- ToolChain Tools = ToolsIt->second;
-
- PathVector JoinList;
-
- for (cl::list<std::string>::const_iterator B = InputFilenames.begin(),
- E = InputFilenames.end(); B != E; ++B) {
- In = sys::Path(*B);
-
- // Pass input file through the toolchain
- for (ToolChain::const_iterator B = Tools.begin(), E = Tools.end();
- B != E; ++B) {
-
- const Tool* CurTool = B->getPtr();
-
- // Is this the last step in the chain?
- if (llvm::next(B) == E || CurTool->IsLast()) {
- JoinList.push_back(In);
- break;
- }
- else {
- Out = tempDir;
- Out.appendComponent(In.getBasename());
- Out.appendSuffix(CurTool->OutputSuffix());
- Out.makeUnique(true, NULL);
- Out.eraseFromDisk();
- }
-
- if (CurTool->GenerateAction(In, Out).Execute() != 0)
- throw std::runtime_error("Tool returned error code!");
-
- In = Out; Out.clear();
- }
- }
-
- // Pass .o files to linker
- const Tool* JoinNode = (--Tools.end())->getPtr();
-
- // If the final output name is empty, set it to "a.out"
- if (!OutputFilename.empty()) {
- Out = sys::Path(OutputFilename);
- }
- else {
- Out = sys::Path("a");
- Out.appendSuffix(JoinNode->OutputSuffix());
- }
-
- if (JoinNode->GenerateAction(JoinList, Out).Execute() != 0)
- throw std::runtime_error("Tool returned error code!");
-
- return 0;
-}
-
-void llvmcc::Tool::UnpackValues (const std::string& from,
- std::vector<std::string>& to) const {
- SplitString(from, to, ",");
-}
-
+++ /dev/null
-//===--- Core.h - The LLVM Compiler Driver ----------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Core driver abstractions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMCC_CORE_H
-#define LLVM_TOOLS_LLVMCC_CORE_H
-
-#include "Utility.h"
-
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/System/Path.h"
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-
-// Core functionality
-
-namespace llvmcc {
-
- typedef std::vector<llvm::sys::Path> PathVector;
- typedef llvm::StringMap<std::string> LanguageMap;
-
- class Action {
- std::string Command_;
- std::vector<std::string> Args_;
- public:
- Action (std::string const& C,
- std::vector<std::string> const& A)
- : Command_(C), Args_(A)
- {}
-
- int Execute();
- };
-
- class Tool : public llvm::RefCountedBaseVPTR<Tool> {
- public:
- virtual Action GenerateAction (PathVector const& inFiles,
- llvm::sys::Path const& outFile) const = 0;
-
- virtual Action GenerateAction (llvm::sys::Path const& inFile,
- llvm::sys::Path const& outFile) const = 0;
-
- virtual std::string Name() const = 0;
- virtual std::string InputLanguage() const = 0;
- virtual std::string OutputLanguage() const = 0;
- virtual std::string OutputSuffix() const = 0;
-
- virtual bool IsLast() const = 0;
- virtual bool IsJoin() const = 0;
-
- // Helper function that is called by the auto-generated code
- // Splits strings of the form ",-foo,-bar,-baz"
- // TOFIX: find a better name
- void UnpackValues (std::string const& from,
- std::vector<std::string>& to) const;
-
- virtual ~Tool()
- {}
- };
-
- typedef std::vector<llvm::IntrusiveRefCntPtr<Tool> > ToolChain;
- typedef llvm::StringMap<ToolChain> ToolChainMap;
-
- struct CompilationGraph {
- ToolChainMap ToolChains;
- LanguageMap ExtsToLangs;
-
- int Build(llvm::sys::Path const& tempDir) const;
- };
-}
-
-#endif // LLVM_TOOLS_LLVMCC_CORE_H
##===----------------------------------------------------------------------===##
LEVEL = ../..
TOOLNAME = llvmc2
-BUILT_SOURCES = Tools.inc
+BUILT_SOURCES = AutoGenerated.inc
LINK_COMPONENTS = support system
REQUIRES_EH := 1
# TOFIX: integrate this part into Makefile.rules?
# The degree of horrorshowness in that file is too much for me atm.
-$(ObjDir)/Tools.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir
+$(ObjDir)/AutoGenerated.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir
$(Echo) "Building LLVMCC configuration library with tblgen"
$(Verb) $(TableGen) -gen-llvmcc -o $(call SYSPATH, $@) $<
-Tools.inc : $(ObjDir)/Tools.inc.tmp
+AutoGenerated.inc : $(ObjDir)/AutoGenerated.inc.tmp
$(Verb) $(CMP) -s $@ $< || $(CP) $< $@
--- /dev/null
+//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Tool abstract base class - implementation of the auxiliary functions.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Tool.h"
+
+#include "llvm/ADT/StringExtras.h"
+
+void llvmcc::Tool::UnpackValues (const std::string& from,
+ std::vector<std::string>& to) {
+ llvm::SplitString(from, to, ",");
+}
--- /dev/null
+//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Tool abstract base class - an interface to tool descriptions.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMC2_TOOL_H
+#define LLVM_TOOLS_LLVMC2_TOOL_H
+
+#include "Action.h"
+
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/System/Path.h"
+
+#include <string>
+#include <vector>
+
+namespace llvmcc {
+
+ typedef std::vector<llvm::sys::Path> PathVector;
+
+ class Tool : public llvm::RefCountedBaseVPTR<Tool> {
+ public:
+ virtual Action GenerateAction (PathVector const& inFiles,
+ llvm::sys::Path const& outFile) const = 0;
+
+ virtual Action GenerateAction (llvm::sys::Path const& inFile,
+ llvm::sys::Path const& outFile) const = 0;
+
+ virtual std::string Name() const = 0;
+ virtual std::string InputLanguage() const = 0;
+ virtual std::string OutputLanguage() const = 0;
+ virtual std::string OutputSuffix() const = 0;
+
+ virtual bool IsLast() const = 0;
+ virtual bool IsJoin() const = 0;
+
+ // Helper function that is called by the auto-generated code
+ // Splits strings of the form ",-foo,-bar,-baz"
+ // TOFIX: find a better name
+ static void UnpackValues (std::string const& from,
+ std::vector<std::string>& to);
+
+ virtual ~Tool()
+ {}
+ };
+
+}
+
+#endif //LLVM_TOOLS_LLVMC2_TOOL_H
+++ /dev/null
-//===--- Tools.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Auto-generated tool descriptions.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Tools.h"
-#include "Core.h"
-
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/Support/CommandLine.h"
-
-#include <stdexcept>
-#include <string>
-#include <vector>
-
-using namespace llvm;
-using namespace llvmcc;
-
-// Include the auto-generated file
-#include "Tools.inc"
+++ /dev/null
-//===--- Tools.h - The LLVM Compiler Driver ---------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Auto-generated tool descriptions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMCC_TOOLS_H
-#define LLVM_TOOLS_LLVMCC_TOOLS_H
-
-#include "Core.h"
-
-namespace llvmcc {
-
- void PopulateLanguageMap(LanguageMap& language_map);
- void PopulateCompilationGraph(CompilationGraph& tools);
-
-}
-
-#endif //LLVM_TOOLS_LLVMCC_TOOLS_H
+++ /dev/null
-//===--- Utility.cpp - The LLVM Compiler Driver -----------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Various helper and utility functions - implementation.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Utility.h"
-
-#include "llvm/System/Program.h"
-
-#include <stdexcept>
-
-using namespace llvm;
-
-int llvmcc::ExecuteProgram(const std::string& name,
- const std::vector<std::string>& args) {
- sys::Path prog = sys::Program::FindProgramByName(name);
-
- if (prog.isEmpty())
- throw std::runtime_error("Can't find program '" + name + "'");
- 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.
-
- return sys::Program::ExecuteAndWait(prog, &argv[0]);
-}
+++ /dev/null
-//===--- Utility.h - The LLVM Compiler Driver -------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Various helper and utility functions.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMCC_UTILITY_H
-#define LLVM_TOOLS_LLVMCC_UTILITY_H
-
-#include <string>
-#include <vector>
-
-namespace llvmcc {
-
- int ExecuteProgram (const std::string& name,
- const std::vector<std::string>& arguments);
-
-}
-
-#endif // LLVM_TOOLS_LLVMCC_UTILITY_H
--- /dev/null
+//===--- llvmcc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open
+// Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This tool provides a single point of access to the LLVM
+// compilation tools. It has many options. To discover the options
+// supported please refer to the tools' manual page or run the tool
+// with the --help option.
+//
+//===----------------------------------------------------------------------===//
+
+#include "CompilationGraph.h"
+#include "Tool.h"
+
+#include "llvm/System/Path.h"
+#include "llvm/Support/CommandLine.h"
+
+#include <iostream>
+#include <stdexcept>
+#include <string>
+
+namespace cl = llvm::cl;
+namespace sys = llvm::sys;
+using namespace llvmcc;
+
+// External linkage here is intentional.
+cl::list<std::string> InputFilenames(cl::Positional,
+ cl::desc("<input file>"), cl::OneOrMore);
+cl::opt<std::string> OutputFilename("o", cl::desc("Output file name"),
+ cl::value_desc("file"));
+cl::opt<bool> VerboseMode("v", cl::desc("Enable verbose mode"));
+
+
+namespace {
+ int BuildTargets(const CompilationGraph& graph) {
+ int ret;
+ sys::Path tempDir(sys::Path::GetTemporaryDirectory());
+
+ try {
+ ret = graph.Build(tempDir);
+ }
+ catch(...) {
+ tempDir.eraseFromDisk(true);
+ throw;
+ }
+
+ tempDir.eraseFromDisk(true);
+ return ret;
+ }
+}
+
+int main(int argc, char** argv) {
+ try {
+ CompilationGraph graph;
+
+ cl::ParseCommandLineOptions(argc, argv,
+ "LLVM Compiler Driver(Work In Progress)");
+ PopulateCompilationGraph(graph);
+ return BuildTargets(graph);
+ }
+ catch(const std::exception& ex) {
+ std::cerr << ex.what() << '\n';
+ }
+ catch(...) {
+ std::cerr << "Unknown error!\n";
+ }
+}
+++ /dev/null
-//===--- llvmcc.cpp - The LLVM Compiler Driver ------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open
-// Source License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This tool provides a single point of access to the LLVM
-// compilation tools. It has many options. To discover the options
-// supported please refer to the tools' manual page or run the tool
-// with the --help option.
-//
-//===----------------------------------------------------------------------===//
-
-#include "Core.h"
-#include "Utility.h"
-#include "Tools.h"
-
-#include "llvm/System/Path.h"
-#include "llvm/Support/CommandLine.h"
-
-#include <iostream>
-#include <stdexcept>
-#include <string>
-
-using namespace llvm;
-using namespace llvmcc;
-
-// These variables are also used in Core.cpp,
-// so they should have external linkage.
-cl::list<std::string> InputFilenames(cl::Positional,
- cl::desc("<input file>"), cl::OneOrMore);
-cl::opt<std::string> OutputFilename("o", cl::desc("Output file name"),
- cl::value_desc("file"));
-cl::opt<bool> VerboseMode("v", cl::desc("Enable verbose mode"));
-
-
-namespace {
- int BuildTargets(const CompilationGraph& graph) {
- int ret;
- sys::Path tempDir(sys::Path::GetTemporaryDirectory());
-
- try {
- ret = graph.Build(tempDir);
- }
- catch(...) {
- tempDir.eraseFromDisk(true);
- throw;
- }
-
- tempDir.eraseFromDisk(true);
- return ret;
- }
-}
-
-int main(int argc, char** argv) {
- try {
- CompilationGraph graph;
-
- cl::ParseCommandLineOptions(argc, argv,
- "LLVM Compiler Driver(Work In Progress)");
- PopulateCompilationGraph(graph);
- return BuildTargets(graph);
- }
- catch(const std::exception& ex) {
- std::cerr << ex.what() << '\n';
- }
- catch(...) {
- std::cerr << "Unknown error!\n";
- }
-}
<< "::iterator B = " << D.GenVariableName() << ".begin(),\n"
<< Indent3 << "E = " << D.GenVariableName()
<< ".end(); B != E; ++B)\n"
- << Indent4 << "UnpackValues(*B, vec);\n";
+ << Indent4 << "Tool::UnpackValues(*B, vec);\n";
}
else if (D.Type == OptionType::Prefix || D.Type == OptionType::Parameter){
- O << Indent3 << "UnpackValues("
+ O << Indent3 << "Tool::UnpackValues("
<< D.GenVariableName() << ", vec);\n";
}
else {