From 5a7f34958ca6f2fa8a52e9921cf521cbb92ae070 Mon Sep 17 00:00:00 2001
From: "Michael J. Spencer" <bigcheesegs@gmail.com>
Date: Fri, 10 Sep 2010 21:13:16 +0000
Subject: [PATCH] CMake: Update to use standard CMake dependency tracking
 facilities instead of whatever we were using before...

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113631 91177308-0d34-0410-b5e6-96231b3b80d8
---
 CMakeLists.txt                             |  8 +++-
 examples/PrintFunctionNames/CMakeLists.txt | 11 +++++-
 examples/clang-interpreter/CMakeLists.txt  | 46 +++++++++-------------
 examples/wpa/CMakeLists.txt                | 18 ++++-----
 lib/AST/CMakeLists.txt                     | 17 ++++++--
 lib/Analysis/CMakeLists.txt                | 17 ++++++--
 lib/Basic/CMakeLists.txt                   | 31 +++++++++------
 lib/Checker/CMakeLists.txt                 | 18 +++++++--
 lib/CodeGen/CMakeLists.txt                 | 18 +++++++--
 lib/Driver/CMakeLists.txt                  | 17 ++++++--
 lib/Frontend/CMakeLists.txt                | 27 +++++++------
 lib/FrontendTool/CMakeLists.txt            | 11 ++++--
 lib/Index/CMakeLists.txt                   | 36 +++++++++--------
 lib/Lex/CMakeLists.txt                     | 10 +++--
 lib/Parse/CMakeLists.txt                   | 17 ++++++--
 lib/Rewrite/CMakeLists.txt                 | 12 ++++--
 lib/Sema/CMakeLists.txt                    | 16 ++++++--
 lib/Serialization/CMakeLists.txt           |  9 +++--
 tools/c-index-test/CMakeLists.txt          | 12 ++----
 tools/driver/CMakeLists.txt                | 32 +++++++--------
 tools/libclang/CMakeLists.txt              | 39 +++++++++---------
 21 files changed, 255 insertions(+), 167 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1ba2a622d4e..fdc7755de87 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 5ea75db42e0..cea15bf934c 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 73f28bb7a2e..c00874322ed 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 13e4298c1f2..b7d85cbbfdc 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 f56e6c41b09..9d2ee4fe721 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 a2cfcfc4fa1..f05bbedf0df 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 87bf834c275..d0ee682dc8a 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 e69808e48e6..e4c9a809cc1 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 1767a7d47be..7414e36ab3f 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 9d41b55981b..9558c911b02 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 ca8fbcf5f90..6d7d7280014 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 09d9e3419dc..3790ba734b3 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 bbe9b567acf..7ad106e5d22 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 0476384eff3..3c236441492 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 5b75a668a4c..a84cf51f7ba 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 853a9c0b122..0f2c6f219b5 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 c220e90c129..d3a52613b6c 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 a3782180b32..f1bf1f90a1a 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 0cda6c4a31b..149b70ae43a 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 ec6e9c6e802..8529700a8a9 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 9a2a2a63cfd..fc7f41aeaa9 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
-- 
GitLab