diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1ba2a622d4e1c1ff929c3d62069de6f124f33425..fdc7755de87f6b83e414251510f88747b77cacbc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,7 +24,7 @@ if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
 endif()
 
 # Compute the Clang version from the LLVM version.
-string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION 
+string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
   ${PACKAGE_VERSION})
 message(STATUS "Clang version: ${CLANG_VERSION}")
 
@@ -63,7 +63,7 @@ macro(add_clang_library name)
     set(srcs ${srcs} ${headers})
     string( REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
     list( GET split_path -1 dir)
-    file( GLOB_RECURSE headers 
+    file( GLOB_RECURSE headers
       ../../include/clang${dir}/*.h
       ../../include/clang${dir}/*.td
       ../../include/clang${dir}/*.def)
@@ -92,6 +92,9 @@ macro(add_clang_library name)
   if( llvm_system_libs )
     target_link_libraries(${name} ${llvm_system_libs})
   endif( llvm_system_libs )
+  if (LLVM_COMMON_LIBS)
+    target_link_libraries(${name} ${LLVM_COMMON_LIBS})
+  endif()
   add_dependencies(${name} ClangDiagnosticCommon)
   if(MSVC)
     get_target_property(cflag ${name} COMPILE_FLAGS)
@@ -102,6 +105,7 @@ macro(add_clang_library name)
     set_target_properties(${name} PROPERTIES COMPILE_FLAGS ${cflag})
   endif(MSVC)
   install(TARGETS ${name}
+    EXPORT LLVM
     LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
     ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
 endmacro(add_clang_library)
diff --git a/examples/PrintFunctionNames/CMakeLists.txt b/examples/PrintFunctionNames/CMakeLists.txt
index 5ea75db42e02cd3766721bada9a6c40afceadeab..cea15bf934c717b56d44559798d19712b3ee0d81 100644
--- a/examples/PrintFunctionNames/CMakeLists.txt
+++ b/examples/PrintFunctionNames/CMakeLists.txt
@@ -2,7 +2,16 @@ set(MODULE TRUE)
 
 set(LLVM_NO_RTTI 1)
 
-add_clang_library(PrintFunctionNames PrintFunctionNames.cpp)
+add_clang_library(PrintFunctionNames
+  PrintFunctionNames.cpp
+  )
+
+target_link_libraries(PrintFunctionNames
+  clangAST
+  clangFrontend
+  clangBasic
+  )
+
 
 set_target_properties(PrintFunctionNames
   PROPERTIES
diff --git a/examples/clang-interpreter/CMakeLists.txt b/examples/clang-interpreter/CMakeLists.txt
index 73f28bb7a2e7c7a3617ea5b5336848a30c1ba717..c00874322ed33cf1960e6f66efe822d31aa554ca 100644
--- a/examples/clang-interpreter/CMakeLists.txt
+++ b/examples/clang-interpreter/CMakeLists.txt
@@ -1,34 +1,24 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS
-    clangFrontend
-    clangSerialization
-    clangDriver
-    clangCodeGen
-    clangSema
-    clangChecker
-    clangIndex
-    clangAnalysis
-    clangRewrite
-    clangAST
-    clangParse
-    clangLex
-    clangBasic
-    )
-
-set(LLVM_LINK_COMPONENTS
-    jit
-    interpreter
-    nativecodegen
-    asmparser
-    bitreader
-    bitwriter
-    codegen
-    ipo
-    selectiondag
-  )
-
 add_clang_executable(clang-interpreter
   main.cpp
   )
+
+add_llvm_link_components(clang-interpreter jit interpreter nativecodegen)
+target_link_libraries(clang-interpreter
+  clangFrontend
+  clangSerialization
+  clangDriver
+  clangCodeGen
+  clangSema
+  clangChecker
+  clangIndex
+  clangAnalysis
+  clangRewrite
+  clangAST
+  clangParse
+  clangLex
+  clangBasic
+  )
+
 add_dependencies(clang-interpreter clang-headers)
diff --git a/examples/wpa/CMakeLists.txt b/examples/wpa/CMakeLists.txt
index 13e4298c1f2ec6f5fa5a701809e3727071260f37..b7d85cbbfdc9975b56466727fb82dbcd50ff400c 100644
--- a/examples/wpa/CMakeLists.txt
+++ b/examples/wpa/CMakeLists.txt
@@ -1,6 +1,10 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS
+add_clang_executable(clang-wpa
+  clang-wpa.cpp
+  )
+
+target_link_libraries(clang-wpa
   clangIndex
   clangFrontend
   clangDriver
@@ -12,15 +16,9 @@ set(LLVM_USED_LIBS
   clangAST
   clangParse
   clangLex
-  clangBasic)
-
-set( LLVM_LINK_COMPONENTS
-  bitreader
-  mc
-  core
+  clangBasic
   )
 
-add_clang_executable(clang-wpa
-  clang-wpa.cpp
+add_dependencies(clang-wpa
+  clang-headers
   )
-add_dependencies(clang-wpa clang-headers)
diff --git a/lib/AST/CMakeLists.txt b/lib/AST/CMakeLists.txt
index f56e6c41b0980566231514cdc322ff5c7fe10293..9d2ee4fe7214afd8f3a03bfa23cb31d4fd998476 100644
--- a/lib/AST/CMakeLists.txt
+++ b/lib/AST/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic)
-
 add_clang_library(clangAST
   APValue.cpp
   ASTConsumer.cpp
@@ -44,5 +42,16 @@ add_clang_library(clangAST
   TypePrinter.cpp
   )
 
-add_dependencies(clangAST ClangARMNeon ClangAttrClasses ClangAttrList 
-                 ClangAttrImpl ClangDiagnosticAST ClangDeclNodes ClangStmtNodes)
+target_link_libraries(clangAST
+  clangBasic
+  )
+
+add_dependencies(clangAST
+  ClangARMNeon
+  ClangAttrClasses
+  ClangAttrList
+  ClangAttrImpl
+  ClangDiagnosticAST
+  ClangDeclNodes
+  ClangStmtNodes
+  )
diff --git a/lib/Analysis/CMakeLists.txt b/lib/Analysis/CMakeLists.txt
index a2cfcfc4fa12483c90a3fc9c4ea7020b127d480c..f05bbedf0dfe5fe67a7875372d3d502d59cb2a58 100644
--- a/lib/Analysis/CMakeLists.txt
+++ b/lib/Analysis/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangAST clangIndex)
-
 add_clang_library(clangAnalysis
   AnalysisContext.cpp
   CFG.cpp
@@ -15,5 +13,16 @@ add_clang_library(clangAnalysis
   UninitializedValues.cpp
   )
 
-add_dependencies(clangAnalysis ClangAttrClasses ClangAttrList
-                 ClangDiagnosticAnalysis ClangDeclNodes ClangStmtNodes)
+target_link_libraries(clangAnalysis
+  clangBasic
+  clangAST
+  clangIndex
+  )
+
+add_dependencies(clangAnalysis
+  ClangAttrClasses
+  ClangAttrList
+  ClangDiagnosticAnalysis
+  ClangDeclNodes
+  ClangStmtNodes
+  )
diff --git a/lib/Basic/CMakeLists.txt b/lib/Basic/CMakeLists.txt
index 87bf834c27520190d7603a6c802ecbed228bc184..d0ee682dc8abcb3c2cdbe274f7e1bc238a121b3d 100644
--- a/lib/Basic/CMakeLists.txt
+++ b/lib/Basic/CMakeLists.txt
@@ -14,6 +14,10 @@ add_clang_library(clangBasic
   Version.cpp
   )
 
+target_link_libraries(clangBasic
+  LLVMMC
+  )
+
 # Determine Subversion revision.
 # FIXME: This only gets updated when CMake is run, so this revision number
 # may be out-of-date!
@@ -24,16 +28,17 @@ if (Subversion_FOUND AND EXISTS "${CLANG_SOURCE_DIR}/.svn")
     PROPERTIES COMPILE_DEFINITIONS "SVN_REVISION=\"${CLANG_WC_REVISION}\"")
 endif()
 
-add_dependencies(clangBasic 
-                 ClangARMNeon
-                 ClangAttrList
-                 ClangDiagnosticAnalysis
-                 ClangDiagnosticAST
-                 ClangDiagnosticCommon
-                 ClangDiagnosticDriver
-                 ClangDiagnosticFrontend
-                 ClangDiagnosticGroups
-                 ClangDiagnosticLex
-                 ClangDiagnosticParse
-                 ClangDiagnosticSema)
-                 
+add_dependencies(clangBasic
+  ClangARMNeon
+  ClangAttrList
+  ClangDiagnosticAnalysis
+  ClangDiagnosticAST
+  ClangDiagnosticCommon
+  ClangDiagnosticDriver
+  ClangDiagnosticFrontend
+  ClangDiagnosticGroups
+  ClangDiagnosticLex
+  ClangDiagnosticParse
+  ClangDiagnosticSema
+  )
+
diff --git a/lib/Checker/CMakeLists.txt b/lib/Checker/CMakeLists.txt
index e69808e48e60a4603f35242a15b26d688c9505cb..e4c9a809cc1bb83847531db1f285de3db0656ce5 100644
--- a/lib/Checker/CMakeLists.txt
+++ b/lib/Checker/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangLex clangAST clangFrontend clangRewrite)
-
 add_clang_library(clangChecker
   AdjustedReturnValueChecker.cpp
   AggExprVisitor.cpp
@@ -84,5 +82,17 @@ add_clang_library(clangChecker
   ValueManager.cpp
   )
 
-add_dependencies(clangChecker ClangAttrClasses ClangAttrList ClangDeclNodes
-                 ClangStmtNodes)
+target_link_libraries(clangChecker
+  clangBasic
+  clangLex
+  clangAST
+  clangFrontend
+  clangRewrite
+  )
+
+add_dependencies(clangChecker
+  ClangAttrClasses
+  ClangAttrList
+  ClangDeclNodes
+  ClangStmtNodes
+  )
diff --git a/lib/CodeGen/CMakeLists.txt b/lib/CodeGen/CMakeLists.txt
index 1767a7d47bea9c41fd6cf1dcd89a0c8637f2b3b6..7414e36ab3f51f9c2db417dceeca5decf3612279 100644
--- a/lib/CodeGen/CMakeLists.txt
+++ b/lib/CodeGen/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangAST clangFrontend)
-
 add_clang_library(clangCodeGen
   BackendUtil.cpp
   CGBlocks.cpp
@@ -39,5 +37,17 @@ add_clang_library(clangCodeGen
   TargetInfo.cpp
   )
 
-add_dependencies(clangCodeGen ClangAttrClasses ClangAttrList ClangDeclNodes
-                 ClangStmtNodes)
+target_link_libraries(clangCodeGen
+  LLVMCore
+  LLVMAsmParser
+  LLVMBitReader
+  LLVMBitWriter
+  LLVMipo
+  )
+
+add_dependencies(clangCodeGen
+  ClangAttrClasses
+  ClangAttrList
+  ClangDeclNodes
+  ClangStmtNodes
+  )
diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt
index 9d41b55981b586ac174b0e509afa077a1661757a..9558c911b021f3192b5a433611643e6291cf6b1b 100644
--- a/lib/Driver/CMakeLists.txt
+++ b/lib/Driver/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangAST clangParse)
-
 add_clang_library(clangDriver
   Action.cpp
   Arg.cpp
@@ -23,5 +21,16 @@ add_clang_library(clangDriver
   Types.cpp
   )
 
-add_dependencies(clangDriver ClangAttrList ClangDiagnosticDriver
-                 ClangDriverOptions ClangCC1Options ClangCC1AsOptions)
+target_link_libraries(clangDriver
+  clangBasic
+  clangAST
+  clangParse
+  )
+
+add_dependencies(clangDriver
+  ClangAttrList
+  ClangDiagnosticDriver
+  ClangDriverOptions
+  ClangCC1Options
+  ClangCC1AsOptions
+  )
diff --git a/lib/Frontend/CMakeLists.txt b/lib/Frontend/CMakeLists.txt
index ca8fbcf5f90d9060b4c8d20431c984137f25ac97..6d7d72800147724f77ae351c2d71d17dc103ee20 100644
--- a/lib/Frontend/CMakeLists.txt
+++ b/lib/Frontend/CMakeLists.txt
@@ -1,14 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set( LLVM_USED_LIBS
-  clangDriver
-  clangParse
-  clangSema
-  clangAST
-  clangLex
-  clangBasic
-  )
-
 add_clang_library(clangFrontend
   ASTConsumers.cpp
   ASTMerge.cpp
@@ -36,6 +27,17 @@ add_clang_library(clangFrontend
   Warnings.cpp
   )
 
+target_link_libraries(clangFrontend
+  LLVMCore
+
+  clangDriver
+  clangParse
+  clangSema
+  clangAST
+  clangLex
+  clangBasic
+  )
+
 IF(MSVC)
   get_target_property(NON_ANSI_COMPILE_FLAGS clangFrontend COMPILE_FLAGS)
   string(REPLACE /Za
@@ -44,12 +46,13 @@ IF(MSVC)
   set_target_properties(clangFrontend PROPERTIES COMPILE_FLAGS ${NON_ANSI_COMPILE_FLAGS})
 ENDIF(MSVC)
 
-add_dependencies(clangFrontend 
+add_dependencies(clangFrontend
   ClangAttrClasses
   ClangAttrList
   ClangCC1Options
-  ClangDiagnosticFrontend 
+  ClangDiagnosticFrontend
   ClangDiagnosticLex
   ClangDiagnosticSema
   ClangDeclNodes
-  ClangStmtNodes)
+  ClangStmtNodes
+  )
diff --git a/lib/FrontendTool/CMakeLists.txt b/lib/FrontendTool/CMakeLists.txt
index 09d9e3419dc27f3639efa9a1098177c834cdd5ac..3790ba734b3791d9f9d7288eaf4018c85a6a0009 100644
--- a/lib/FrontendTool/CMakeLists.txt
+++ b/lib/FrontendTool/CMakeLists.txt
@@ -1,8 +1,13 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangDriver clangFrontend clangRewrite clangCodeGen 
-    clangChecker)
-
 add_clang_library(clangFrontendTool
   ExecuteCompilerInvocation.cpp
   )
+
+target_link_libraries(clangFrontendTool
+  clangDriver
+  clangFrontend
+  clangRewrite
+  clangCodeGen
+  clangChecker
+  )
diff --git a/lib/Index/CMakeLists.txt b/lib/Index/CMakeLists.txt
index bbe9b567acf97d05b8bc372ad7d64f3b3a009beb..7ad106e5d22dd08132629404baec3cde6524be78 100644
--- a/lib/Index/CMakeLists.txt
+++ b/lib/Index/CMakeLists.txt
@@ -1,8 +1,20 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangLex clangAST)
+add_clang_library(clangIndex
+  ASTLocation.cpp
+  Analyzer.cpp
+  CallGraph.cpp
+  DeclReferenceMap.cpp
+  Entity.cpp
+  GlobalSelector.cpp
+  Handlers.cpp
+  IndexProvider.cpp
+  Indexer.cpp
+  Program.cpp
+  SelectorMap.cpp
+  )
 
-set( LLVM_USED_LIBS
+target_link_libraries(clangIndex
   clangSerialization
   clangFrontend
   clangParse
@@ -16,19 +28,9 @@ set( LLVM_USED_LIBS
   clangBasic
   )
 
-add_clang_library(clangIndex
-  ASTLocation.cpp
-  Analyzer.cpp
-  CallGraph.cpp
-  DeclReferenceMap.cpp
-  Entity.cpp
-  GlobalSelector.cpp
-  Handlers.cpp
-  IndexProvider.cpp
-  Indexer.cpp
-  Program.cpp
-  SelectorMap.cpp
+add_dependencies(clangIndex
+  ClangAttrClasses
+  ClangAttrList
+  ClangDeclNodes
+  ClangStmtNodes
   )
-
-add_dependencies(clangIndex ClangAttrClasses ClangAttrList
-                 ClangDeclNodes ClangStmtNodes)
diff --git a/lib/Lex/CMakeLists.txt b/lib/Lex/CMakeLists.txt
index 0476384eff3d8e387df9d796177d864778c8b280..3c236441492cf3853e71c4c47322b4f42aa99468 100644
--- a/lib/Lex/CMakeLists.txt
+++ b/lib/Lex/CMakeLists.txt
@@ -2,8 +2,6 @@ set(LLVM_NO_RTTI 1)
 
 # TODO: Add -maltivec when ARCH is PowerPC.
 
-set(LLVM_USED_LIBS clangBasic)
-
 add_clang_library(clangLex
   HeaderMap.cpp
   HeaderSearch.cpp
@@ -26,4 +24,10 @@ add_clang_library(clangLex
   TokenLexer.cpp
   )
 
-add_dependencies(clangLex ClangDiagnosticLex)
+target_link_libraries(clangLex
+  clangBasic
+  )
+
+add_dependencies(clangLex
+  ClangDiagnosticLex
+  )
diff --git a/lib/Parse/CMakeLists.txt b/lib/Parse/CMakeLists.txt
index 5b75a668a4c5b0defc2cfd0cbd3b9621a4a0cff0..a84cf51f7ba563a028e3ffb0cb0e6fcd68bef2ef 100644
--- a/lib/Parse/CMakeLists.txt
+++ b/lib/Parse/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangAST clangLex clangSema)
-
 add_clang_library(clangParse
   ParseAST.cpp
   ParseCXXInlineMethods.cpp
@@ -18,4 +16,17 @@ add_clang_library(clangParse
   Parser.cpp
   )
 
-add_dependencies(clangParse ClangAttrClasses ClangAttrList ClangDeclNodes ClangDiagnosticParse ClangStmtNodes)
+target_link_libraries(clangParse
+  clangBasic
+  clangAST
+  clangLex
+  clangSema
+  )
+
+add_dependencies(clangParse
+  ClangAttrClasses
+  ClangAttrList
+  ClangDeclNodes
+  ClangDiagnosticParse
+  ClangStmtNodes
+  )
diff --git a/lib/Rewrite/CMakeLists.txt b/lib/Rewrite/CMakeLists.txt
index 853a9c0b1229e98922fdc49d819dc34c6a2c5747..0f2c6f219b571e8c4ca21dc201923d32c24195b3 100644
--- a/lib/Rewrite/CMakeLists.txt
+++ b/lib/Rewrite/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangAST clangParse clangFrontend)
-
 add_clang_library(clangRewrite
   DeltaTree.cpp
   FixItRewriter.cpp
@@ -16,8 +14,16 @@ add_clang_library(clangRewrite
   TokenRewriter.cpp
   )
 
+target_link_libraries(clangRewrite
+  clangBasic
+  clangAST
+  clangParse
+  clangFrontend
+  )
+
 add_dependencies(clangRewrite
   ClangAttrClasses
   ClangAttrList
   ClangDeclNodes
-  ClangStmtNodes)
+  ClangStmtNodes
+  )
diff --git a/lib/Sema/CMakeLists.txt b/lib/Sema/CMakeLists.txt
index c220e90c1292108bdb69393909fb0f35f4cde513..d3a52613b6c582d3f973059b21717037f74425e3 100644
--- a/lib/Sema/CMakeLists.txt
+++ b/lib/Sema/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangBasic clangAST clangLex clangAnalysis)
-
 add_clang_library(clangSema
   AnalysisBasedWarnings.cpp
   AttributeList.cpp
@@ -37,5 +35,15 @@ add_clang_library(clangSema
   TargetAttributesSema.cpp
   )
 
-add_dependencies(clangSema ClangARMNeon ClangAttrClasses ClangAttrList 
-                 ClangDiagnosticSema ClangDeclNodes ClangStmtNodes)
+target_link_libraries(clangSema
+  clangAnalysis
+  )
+
+add_dependencies(clangSema
+  ClangARMNeon
+  ClangAttrClasses
+  ClangAttrList
+  ClangDiagnosticSema
+  ClangDeclNodes
+  ClangStmtNodes
+  )
diff --git a/lib/Serialization/CMakeLists.txt b/lib/Serialization/CMakeLists.txt
index a3782180b324f7657a03c28e71d90f6230783ec0..f1bf1f90a1a93b07b7c82dc41c750966bad767f1 100644
--- a/lib/Serialization/CMakeLists.txt
+++ b/lib/Serialization/CMakeLists.txt
@@ -1,7 +1,5 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS clangFrontend)
-
 add_clang_library(clangSerialization
   GeneratePCH.cpp
   ASTCommon.cpp
@@ -13,6 +11,10 @@ add_clang_library(clangSerialization
   ASTWriterStmt.cpp
   )
 
+target_link_libraries(clangSerialization
+  clangFrontend
+  )
+
 add_dependencies(clangSerialization
   ClangAttrClasses
   ClangAttrList
@@ -22,4 +24,5 @@ add_dependencies(clangSerialization
   ClangDiagnosticLex
   ClangDiagnosticSema
   ClangDeclNodes
-  ClangStmtNodes)
+  ClangStmtNodes
+  )
diff --git a/tools/c-index-test/CMakeLists.txt b/tools/c-index-test/CMakeLists.txt
index 0cda6c4a31b8ac426cd0ee0c5e86bcb2023c81b2..149b70ae43a1b5abe3d09f0b5f1de185ea7a0196 100644
--- a/tools/c-index-test/CMakeLists.txt
+++ b/tools/c-index-test/CMakeLists.txt
@@ -1,17 +1,13 @@
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS libclang)
-
-set( LLVM_LINK_COMPONENTS
-  bitreader
-  mc
-  core
-  )
-
 add_clang_executable(c-index-test
   c-index-test.c
   )
 
+target_link_libraries(c-index-test
+  libclang
+  )
+
 set_target_properties(c-index-test
   PROPERTIES
   LINKER_LANGUAGE CXX)
diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt
index ec6e9c6e8026c0879bb5226722759d8eddc0d536..8529700a8a92810d85666024807245c75c40a7f6 100644
--- a/tools/driver/CMakeLists.txt
+++ b/tools/driver/CMakeLists.txt
@@ -1,6 +1,20 @@
 set(LLVM_NO_RTTI 1)
 
-set( LLVM_USED_LIBS
+add_clang_executable(clang
+  driver.cpp
+  cc1_main.cpp
+  cc1as_main.cpp
+  )
+
+add_llvm_link_components(clang all)
+target_link_libraries(clang
+  LLVMAsmParser
+  LLVMBitReader
+  LLVMBitWriter
+  LLVMCodeGen
+  LLVMipo
+  LLVMSelectionDAG
+
   clangFrontendTool
   clangFrontend
   clangDriver
@@ -17,22 +31,6 @@ set( LLVM_USED_LIBS
   clangBasic
   )
 
-set( LLVM_LINK_COMPONENTS
-  ${LLVM_TARGETS_TO_BUILD}
-  asmparser
-  bitreader
-  bitwriter
-  codegen
-  ipo
-  selectiondag
-  )
-
-add_clang_executable(clang
-  driver.cpp
-  cc1_main.cpp
-  cc1as_main.cpp
-  )
-
 if(UNIX)
   set(CLANGXX_LINK_OR_COPY create_symlink)
   set(CLANGXX_DESTDIR $ENV{DESTDIR}/)
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt
index 9a2a2a63cfdaf1b178db4db95aa727df21e5cf81..fc7f41aeaa98f5f7f438be26a9fe0147682e8405 100644
--- a/tools/libclang/CMakeLists.txt
+++ b/tools/libclang/CMakeLists.txt
@@ -2,22 +2,6 @@ set(SHARED_LIBRARY TRUE)
 
 set(LLVM_NO_RTTI 1)
 
-set(LLVM_USED_LIBS
-  clangFrontend
-  clangDriver
-  clangSerialization
-  clangIndex
-  clangSema
-  clangAST
-  clangLex
-  clangBasic)
-
-set( LLVM_LINK_COMPONENTS
-  bitreader
-  mc
-  core
-  )
-
 add_clang_library(libclang
   CIndex.cpp
   CIndexCXX.cpp
@@ -29,19 +13,34 @@ add_clang_library(libclang
   CXCursor.cpp
   CXType.cpp
   ../../include/clang-c/Index.h
-)
+  )
+
+target_link_libraries(libclang
+  LLVMBitReader
+  LLVMMC
+  LLVMCore
+
+  clangFrontend
+  clangDriver
+  clangSerialization
+  clangIndex
+  clangSema
+  clangAST
+  clangLex
+  clangBasic
+  )
 
 if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
   # dylib versioning information
   # FIXME: Is there a more CMake-ish way to handle this?
-  set(LIBCLANG_VERSION 1 
+  set(LIBCLANG_VERSION 1
       CACHE STRING "Version number of the libclang library")
   set(LIBCLANG_SUBVERSION 0
       CACHE STRING "Minor version number of the libclang library")
-  set(LIBCLANG_LINK_FLAGS 
+  set(LIBCLANG_LINK_FLAGS
       "-Wl,-current_version -Wl,${LIBCLANG_VERSION}.${LIBCLANG_SUBVERSION} -Wl,-compatibility_version -Wl,1")
 
-  set(LIBCLANG_LINK_FLAGS 
+  set(LIBCLANG_LINK_FLAGS
       "${LIBCLANG_LINK_FLAGS} -Wl,-dead_strip -Wl,-seg1addr -Wl,0xE0000000")
 
   set_target_properties(libclang