Reorganize llvmc code.

Move the code from 'llvmc/driver' into a new CompilerDriver library, and change
the build system accordingly. Makes it easier for projects using LLVM to build
their own llvmc-based drivers.

Tested with objdir != srcdir.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65821 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvmc/driver/Error.h b/include/llvm/CompilerDriver/Error.h
similarity index 100%
rename from tools/llvmc/driver/Error.h
rename to include/llvm/CompilerDriver/Error.h
diff --git a/tools/llvmc/driver/Action.cpp b/lib/CompilerDriver/Action.cpp
similarity index 100%
rename from tools/llvmc/driver/Action.cpp
rename to lib/CompilerDriver/Action.cpp
diff --git a/tools/llvmc/driver/CMakeLists.txt b/lib/CompilerDriver/CMakeLists.txt
similarity index 100%
rename from tools/llvmc/driver/CMakeLists.txt
rename to lib/CompilerDriver/CMakeLists.txt
diff --git a/tools/llvmc/driver/CompilationGraph.cpp b/lib/CompilerDriver/CompilationGraph.cpp
similarity index 99%
rename from tools/llvmc/driver/CompilationGraph.cpp
rename to lib/CompilerDriver/CompilationGraph.cpp
index 238ef6f..b8a66e1 100644
--- a/tools/llvmc/driver/CompilationGraph.cpp
+++ b/lib/CompilerDriver/CompilationGraph.cpp
@@ -11,8 +11,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "Error.h"
 #include "llvm/CompilerDriver/CompilationGraph.h"
+#include "llvm/CompilerDriver/Error.h"
 
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/CommandLine.h"
diff --git a/lib/CompilerDriver/Makefile b/lib/CompilerDriver/Makefile
new file mode 100644
index 0000000..e5bf3e1
--- /dev/null
+++ b/lib/CompilerDriver/Makefile
@@ -0,0 +1,19 @@
+##===- lib/CompilerDriver/Makefile -------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open
+# Source License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = ../..
+
+# We don't want this library to appear in `llvm-config --libs` output, so its
+# name doesn't start with "LLVM".
+
+LIBRARYNAME = CompilerDriver
+LINK_COMPONENTS = support system
+REQUIRES_EH := 1
+
+include $(LEVEL)/Makefile.common
diff --git a/tools/llvmc/driver/Plugin.cpp b/lib/CompilerDriver/Plugin.cpp
similarity index 100%
rename from tools/llvmc/driver/Plugin.cpp
rename to lib/CompilerDriver/Plugin.cpp
diff --git a/tools/llvmc/driver/Tool.cpp b/lib/CompilerDriver/Tool.cpp
similarity index 100%
rename from tools/llvmc/driver/Tool.cpp
rename to lib/CompilerDriver/Tool.cpp
diff --git a/lib/Makefile b/lib/Makefile
index 4ad0763..8dd67d9 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -9,7 +9,7 @@
 LEVEL = ..
 
 PARALLEL_DIRS = VMCore AsmParser Bitcode Archive Analysis Transforms CodeGen \
-                Target ExecutionEngine Debugger Linker
+                Target ExecutionEngine Debugger Linker CompilerDriver
 
 include $(LEVEL)/Makefile.common
 
diff --git a/tools/llvmc/CMakeLists.txt b/tools/llvmc/CMakeLists.txt
index f820419..bebaaeb 100644
--- a/tools/llvmc/CMakeLists.txt
+++ b/tools/llvmc/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_subdirectory(driver)
+# add_subdirectory(driver)
 
 # TODO: support plugins and user-configured builds.
 # See ./doc/LLVMC-Reference.rst "Customizing LLVMC: the compilation graph"
diff --git a/tools/llvmc/Makefile b/tools/llvmc/Makefile
index 4354c38..6096176 100644
--- a/tools/llvmc/Makefile
+++ b/tools/llvmc/Makefile
@@ -9,11 +9,12 @@
 
 LEVEL = ../..
 
-BUILTIN_PLUGINS = Base Clang
-DRIVER_NAME = llvmc
-DIRS = plugins driver
+# The current plan is to make the user copy the skeleton project and change only
+# this file (and plugins/UserPlugin, of course).
 
-export BUILTIN_PLUGINS
-export DRIVER_NAME
+export LLVMC_BASED_DRIVER_NAME = llvmc
+export LLVMC_BUILTIN_PLUGINS = Base Clang
+
+DIRS = plugins driver
 
 include $(LEVEL)/Makefile.common
diff --git a/tools/llvmc/Makefile.llvmc b/tools/llvmc/Makefile.llvmc
new file mode 100644
index 0000000..79ec642
--- /dev/null
+++ b/tools/llvmc/Makefile.llvmc
@@ -0,0 +1,49 @@
+##===- tools/llvmc/Makefile.llvmc --------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open
+# Source License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+# TODO: This must be eventually merged into Makefile.rules.
+
+ifdef LLVMC_PLUGIN
+
+# We are included from plugins/PluginName/Makefile...
+
+LEVEL = ../../../..
+
+LIBRARYNAME := $(patsubst %,plugin_llvmc_%,$(LLVMC_PLUGIN))
+REQUIRES_EH := 1
+
+# Build a dynamic library if the user runs `make` from plugins/PluginName
+ifndef LLVMC_BUILTIN_PLUGIN
+LOADABLE_MODULE = 1
+endif
+
+# TableGen stuff...
+ifneq ($(BUILT_SOURCES),)
+BUILD_AUTOGENERATED_INC=1
+endif
+
+include $(LEVEL)/Makefile.common
+
+ifdef BUILD_AUTOGENERATED_INC
+
+TOOLS_SOURCE := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td))
+
+TD_COMMON :=$(strip $(wildcard \
+		$(LLVM_SRC_ROOT)/include/llvm/CompilerDriver/*.td))
+
+$(ObjDir)/AutoGenerated.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir \
+				$(TBLGEN) $(TD_COMMON)
+	$(Echo) "Building LLVMC configuration library with tblgen"
+	$(Verb) $(TableGen) -gen-llvmc -o $(call SYSPATH, $@) $<
+
+AutoGenerated.inc : $(ObjDir)/AutoGenerated.inc.tmp
+	$(Verb) $(CMP) -s $@ $< || $(CP) $< $@
+endif # BUILD_AUTOGENERATED_INC
+
+endif # LLVMC_PLUGIN
diff --git a/tools/llvmc/driver/llvmc.cpp b/tools/llvmc/driver/Main.cpp
similarity index 96%
rename from tools/llvmc/driver/llvmc.cpp
rename to tools/llvmc/driver/Main.cpp
index 059e840..16b91a8 100644
--- a/tools/llvmc/driver/llvmc.cpp
+++ b/tools/llvmc/driver/Main.cpp
@@ -1,4 +1,4 @@
-//===--- llvmc.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
+//===--- Main.cpp - The LLVM Compiler Driver -------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -14,9 +14,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "Error.h"
-
 #include "llvm/CompilerDriver/CompilationGraph.h"
+#include "llvm/CompilerDriver/Error.h"
 #include "llvm/CompilerDriver/Plugin.h"
 
 #include "llvm/System/Path.h"
diff --git a/tools/llvmc/driver/Makefile b/tools/llvmc/driver/Makefile
index 107f0de..0e32726 100644
--- a/tools/llvmc/driver/Makefile
+++ b/tools/llvmc/driver/Makefile
@@ -8,12 +8,15 @@
 ##===----------------------------------------------------------------------===##
 
 LEVEL = ../../..
-TOOLNAME = $(DRIVER_NAME)
+
+TOOLNAME = $(LLVMC_BASED_DRIVER_NAME)
+USEDLIBS = CompilerDriver
+
+ifneq ($(LLVMC_BUILTIN_PLUGINS),)
+USEDLIBS += $(patsubst %,plugin_llvmc_%,$(LLVMC_BUILTIN_PLUGINS))
+endif
+
 LINK_COMPONENTS = support system
 REQUIRES_EH := 1
 
-ifneq ($(BUILTIN_PLUGINS),)
-USEDLIBS = $(patsubst %,plugin_llvmc_%,$(BUILTIN_PLUGINS))
-endif
-
 include $(LEVEL)/Makefile.common
diff --git a/tools/llvmc/plugins/Base/Makefile b/tools/llvmc/plugins/Base/Makefile
index 5ca6048..eb6ed01 100644
--- a/tools/llvmc/plugins/Base/Makefile
+++ b/tools/llvmc/plugins/Base/Makefile
@@ -7,7 +7,9 @@
 #
 ##===----------------------------------------------------------------------===##
 
+LEVEL = ../..
+
 LLVMC_PLUGIN = Base
 BUILT_SOURCES = AutoGenerated.inc
 
-include ../Makefile
+include $(LEVEL)/Makefile.llvmc
diff --git a/tools/llvmc/plugins/Clang/Makefile b/tools/llvmc/plugins/Clang/Makefile
index 3206013..a1b011e 100644
--- a/tools/llvmc/plugins/Clang/Makefile
+++ b/tools/llvmc/plugins/Clang/Makefile
@@ -7,7 +7,9 @@
 #
 ##===----------------------------------------------------------------------===##
 
+LEVEL = ../..
+
 LLVMC_PLUGIN = Clang
 BUILT_SOURCES = AutoGenerated.inc
 
-include ../Makefile
+include $(LEVEL)/Makefile.llvmc
diff --git a/tools/llvmc/plugins/Hello/Makefile b/tools/llvmc/plugins/Hello/Makefile
index 181dd0c..8e9fa6f 100644
--- a/tools/llvmc/plugins/Hello/Makefile
+++ b/tools/llvmc/plugins/Hello/Makefile
@@ -7,6 +7,8 @@
 #
 ##===----------------------------------------------------------------------===##
 
+LEVEL = ../..
+
 LLVMC_PLUGIN = Hello
 
-include ../Makefile
+include $(LEVEL)/Makefile.llvmc
diff --git a/tools/llvmc/plugins/Makefile b/tools/llvmc/plugins/Makefile
index 734323f..37dac6f 100644
--- a/tools/llvmc/plugins/Makefile
+++ b/tools/llvmc/plugins/Makefile
@@ -1,4 +1,4 @@
-##===- tools/llvmc/plugins/Makefile.plugins ----------------*- Makefile -*-===##
+##===- tools/llvmc/plugins/Makefile ------------------------*- Makefile -*-===##
 #
 #                     The LLVM Compiler Infrastructure
 #
@@ -7,49 +7,12 @@
 #
 ##===----------------------------------------------------------------------===##
 
-ifndef LLVMC_PLUGIN
-
 LEVEL = ../../..
-DIRS = $(BUILTIN_PLUGINS)
 
-# TOFIX: Should we also build DSO versions of plugins?
-export BUILTIN_LLVMC_PLUGIN=1
-
-include $(LEVEL)/Makefile.common
-
-else # LLVMC_PLUGIN
-
-LEVEL = ../../../..
-
-LIBRARYNAME := $(patsubst %,plugin_llvmc_%,$(LLVMC_PLUGIN))
-REQUIRES_EH = 1
-
-ifndef BUILTIN_LLVMC_PLUGIN
-LOADABLE_MODULE = 1
+ifneq ($(LLVMC_BUILTIN_PLUGINS),)
+DIRS = $(LLVMC_BUILTIN_PLUGINS)
 endif
 
-ifneq ($(BUILT_SOURCES),)
-BUILD_AUTOGENERATED_INC=1
-endif
+export LLVMC_BUILTIN_PLUGIN=1
 
 include $(LEVEL)/Makefile.common
-
-# TOFIX: This probably should go into Makefile.rules
-
-ifdef BUILD_AUTOGENERATED_INC
-
-TOOLS_SOURCE := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td))
-
-TD_COMMON :=$(strip $(wildcard \
-		$(LLVM_SRC_ROOT)/include/llvm/CompilerDriver/*.td))
-
-$(ObjDir)/AutoGenerated.inc.tmp: $(TOOLS_SOURCE) $(ObjDir)/.dir \
-				$(TBLGEN) $(TD_COMMON)
-	$(Echo) "Building LLVMC configuration library with tblgen"
-	$(Verb) $(TableGen) -gen-llvmc -o $(call SYSPATH, $@) $<
-
-AutoGenerated.inc : $(ObjDir)/AutoGenerated.inc.tmp
-	$(Verb) $(CMP) -s $@ $< || $(CP) $< $@
-endif # BUILD_AUTOGENERATED_INC
-
-endif # LLVMC_PLUGIN
diff --git a/tools/llvmc/plugins/Simple/Makefile b/tools/llvmc/plugins/Simple/Makefile
index 1cd5af7..c38cda5 100644
--- a/tools/llvmc/plugins/Simple/Makefile
+++ b/tools/llvmc/plugins/Simple/Makefile
@@ -7,7 +7,9 @@
 #
 ##===----------------------------------------------------------------------===##
 
+LEVEL = ../..
+
 LLVMC_PLUGIN = Simple
 BUILT_SOURCES = AutoGenerated.inc
 
-include ../Makefile
+include $(LEVEL)/Makefile.llvmc