aboutsummaryrefslogtreecommitdiffstats
path: root/tools/llvmc2/llvmcc.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2008-03-23 08:57:20 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2008-03-23 08:57:20 +0000
commitac67b7ea8fcd530995d7aefd2ad0f04543789855 (patch)
treeed9601b834e843e454707c7b07595ce91e27acbd /tools/llvmc2/llvmcc.cpp
parentd59c517a8309faac030d98b37459ca18a204da5a (diff)
downloadexternal_llvm-ac67b7ea8fcd530995d7aefd2ad0f04543789855.zip
external_llvm-ac67b7ea8fcd530995d7aefd2ad0f04543789855.tar.gz
external_llvm-ac67b7ea8fcd530995d7aefd2ad0f04543789855.tar.bz2
Add first proof-of-concept universal compiler driver framework based
on ideas mentioned in PR686. Written by Mikhail Glushenkov and contributed by Codedgers, Inc. Old llvmc will be removed soon after new one will have all its properties. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48699 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvmc2/llvmcc.cpp')
-rw-r--r--tools/llvmc2/llvmcc.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/llvmc2/llvmcc.cpp b/tools/llvmc2/llvmcc.cpp
new file mode 100644
index 0000000..c5edac9
--- /dev/null
+++ b/tools/llvmc2/llvmcc.cpp
@@ -0,0 +1,73 @@
+//===--- 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";
+ }
+}