summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvmc2/Utility.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
commit70548d835e45009b4f3f213520681513552b0d75 (patch)
tree6041136d65c52b78c9f30f62022cde17268aeb9b /llvm/tools/llvmc2/Utility.cpp
parentac92a13c8638901ba06ddf144bbb24b257690ef3 (diff)
downloadbcm5719-llvm-70548d835e45009b4f3f213520681513552b0d75.tar.gz
bcm5719-llvm-70548d835e45009b4f3f213520681513552b0d75.zip
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. llvm-svn: 48699
Diffstat (limited to 'llvm/tools/llvmc2/Utility.cpp')
-rw-r--r--llvm/tools/llvmc2/Utility.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/tools/llvmc2/Utility.cpp b/llvm/tools/llvmc2/Utility.cpp
new file mode 100644
index 00000000000..c53578ad44b
--- /dev/null
+++ b/llvm/tools/llvmc2/Utility.cpp
@@ -0,0 +1,39 @@
+//===--- 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]);
+}
OpenPOWER on IntegriCloud