diff --git a/include/clang/Driver/Compilation.h b/include/clang/Driver/Compilation.h
new file mode 100644
index 0000000..d4792e8
--- /dev/null
+++ b/include/clang/Driver/Compilation.h
@@ -0,0 +1,29 @@
+//===--- Compilation.h - Compilation Task Data Structure --------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_DRIVER_COMPILATION_H_
+#define CLANG_DRIVER_COMPILATION_H_
+
+namespace clang {
+
+/// Compilation - A set of tasks to perform for a single driver
+/// invocation.
+class Compilation {
+public:
+  Compilation();
+  ~Compilation();
+
+  /// Execute - Execute the compilation jobs and return an
+  /// appropriate exit code.
+  int Execute() const;
+};
+
+} // end namespace clang
+
+#endif
diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h
new file mode 100644
index 0000000..62bcd43
--- /dev/null
+++ b/include/clang/Driver/Driver.h
@@ -0,0 +1,30 @@
+//===--- Driver.h - Clang GCC Compatible Driver -----------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_DRIVER_DRIVER_H_
+#define CLANG_DRIVER_DRIVER_H_
+
+namespace clang {
+  class Compilation;
+
+/// Driver - Encapsulate logic for constructing compilation processes
+/// from a set of gcc-driver-like command line arguments.
+class Driver {
+public:
+  Driver();
+  ~Driver();
+
+  /// BuildCompilation - Construct a compilation object for a command
+  /// line argument vector.
+  Compilation *BuildCompilation(int argc, const char **argv);
+};
+
+} // end namespace clang
+
+#endif
diff --git a/lib/Driver/Compilation.cpp b/lib/Driver/Compilation.cpp
new file mode 100644
index 0000000..7f3454b
--- /dev/null
+++ b/lib/Driver/Compilation.cpp
@@ -0,0 +1,21 @@
+//===--- Compilation.cpp - Compilation Task Implementation --------------*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Driver/Compilation.h"
+using namespace clang;
+
+Compilation::Compilation() {
+}
+
+Compilation::~Compilation() {
+}
+
+int Compilation::Execute() const {
+  return 0;
+}
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
new file mode 100644
index 0000000..7ecc38a
--- /dev/null
+++ b/lib/Driver/Driver.cpp
@@ -0,0 +1,24 @@
+//===--- Driver.cpp - Clang GCC Compatible Driver -----------------------*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Driver.h"
+using namespace clang;
+
+Driver::Driver() {
+}
+
+Driver::~Driver() {
+}
+
+Compilation *Driver::BuildCompilation(int argc, const char **argv) {
+  return new Compilation();
+}
+
+                                      
diff --git a/lib/Driver/Makefile b/lib/Driver/Makefile
new file mode 100644
index 0000000..a43033a
--- /dev/null
+++ b/lib/Driver/Makefile
@@ -0,0 +1,18 @@
+##===- clang/lib/Driver/Makefile ---------------------------*- Makefile -*-===##
+# 
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+# 
+##===----------------------------------------------------------------------===##
+
+LEVEL = ../../../..
+LIBRARYNAME := clangDriver
+BUILD_ARCHIVE = 1
+CXXFLAGS = -fno-rtti
+
+CPPFLAGS += -I$(PROJ_SRC_DIR)/../../include
+
+include $(LEVEL)/Makefile.common
+
diff --git a/lib/Makefile b/lib/Makefile
index 802c91e..50ed94a 100755
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -8,7 +8,8 @@
 ##===----------------------------------------------------------------------===##
 LEVEL = ../../..
 
-PARALLEL_DIRS = Headers Basic Lex Parse AST Sema CodeGen Analysis Rewrite Frontend
+PARALLEL_DIRS = Headers Basic Lex Parse AST Sema CodeGen Analysis Rewrite \
+	Frontend Driver
 
 include $(LEVEL)/Makefile.common
 
diff --git a/tools/Makefile b/tools/Makefile
index 0fee3f8..25a43cd 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -8,6 +8,6 @@
 ##===----------------------------------------------------------------------===##
 
 LEVEL := ../../..
-DIRS := ccc
+DIRS := ccc driver
 
 include $(LEVEL)/Makefile.common
diff --git a/tools/driver/Makefile b/tools/driver/Makefile
new file mode 100644
index 0000000..88b9309
--- /dev/null
+++ b/tools/driver/Makefile
@@ -0,0 +1,21 @@
+##===- tools/driver/Makefile -------------------------------*- Makefile -*-===##
+# 
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+# 
+##===----------------------------------------------------------------------===##
+LEVEL = ../../../..
+
+TOOLNAME = clang-driver
+CPPFLAGS += -I$(PROJ_SRC_DIR)/../../include
+CXXFLAGS = -fno-rtti
+
+LINK_COMPONENTS := system
+USEDLIBS = clangDriver.a
+
+# This tool has no plugins, optimize startup time.
+TOOL_NO_EXPORTS = 1
+
+include $(LEVEL)/Makefile.common
diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp
new file mode 100644
index 0000000..7c01e9b
--- /dev/null
+++ b/tools/driver/driver.cpp
@@ -0,0 +1,29 @@
+//===-- driver.cpp - Clang GCC-Compatible Driver --------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This is the entry point to the clang driver; it is a thin
+// wrapper for functionality in the Driver clang library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Driver.h"
+#include "llvm/ADT/OwningPtr.h"
+#include "llvm/System/Signals.h"
+using namespace clang;
+
+int main(int argc, const char **argv) {
+  llvm::sys::PrintStackTraceOnErrorSignal();
+
+  llvm::OwningPtr<Driver> TheDriver(new Driver());
+
+  llvm::OwningPtr<Compilation> C(TheDriver->BuildCompilation(argc, argv));
+
+  return C->Execute();
+}
