diff --git a/bolt/lib/Core/CMakeLists.txt b/bolt/lib/Core/CMakeLists.txt
--- a/bolt/lib/Core/CMakeLists.txt
+++ b/bolt/lib/Core/CMakeLists.txt
@@ -1,5 +1,4 @@
 set(LLVM_LINK_COMPONENTS
-  BOLTUtils
   DebugInfoDWARF
   Demangle
   MC
@@ -26,3 +25,8 @@
   LINK_LIBS
   ${LLVM_PTHREAD_LIB}
   )
+
+target_link_libraries(LLVMBOLTCore
+  PRIVATE
+  LLVMBOLTUtils
+  )
diff --git a/bolt/lib/Passes/CMakeLists.txt b/bolt/lib/Passes/CMakeLists.txt
--- a/bolt/lib/Passes/CMakeLists.txt
+++ b/bolt/lib/Passes/CMakeLists.txt
@@ -51,8 +51,12 @@
 
   LINK_COMPONENTS
   AsmPrinter
-  BOLTCore
-  BOLTUtils
   MC
   Support
   )
+
+target_link_libraries(LLVMBOLTPasses
+  PRIVATE
+  LLVMBOLTCore
+  LLVMBOLTUtils
+  )
diff --git a/bolt/lib/Profile/CMakeLists.txt b/bolt/lib/Profile/CMakeLists.txt
--- a/bolt/lib/Profile/CMakeLists.txt
+++ b/bolt/lib/Profile/CMakeLists.txt
@@ -8,8 +8,12 @@
   YAMLProfileWriter.cpp
 
   LINK_COMPONENTS
-  BOLTCore
-  BOLTPasses
-  BOLTUtils
   Support
   )
+
+target_link_libraries(LLVMBOLTProfile
+  PRIVATE
+  LLVMBOLTCore
+  LLVMBOLTPasses
+  LLVMBOLTUtils
+  )
diff --git a/bolt/lib/Rewrite/CMakeLists.txt b/bolt/lib/Rewrite/CMakeLists.txt
--- a/bolt/lib/Rewrite/CMakeLists.txt
+++ b/bolt/lib/Rewrite/CMakeLists.txt
@@ -1,9 +1,4 @@
 set(LLVM_LINK_COMPONENTS
-  BOLTCore
-  BOLTPasses
-  BOLTProfile
-  BOLTRuntimeLibs
-  BOLTUtils
   DebugInfoDWARF
   DWP
   ExecutionEngine
@@ -12,13 +7,21 @@
   Support
   )
 
+set(TARGET_LINK_LIBRARIES
+  LLVMBOLTCore
+  LLVMBOLTPasses
+  LLVMBOLTProfile
+  LLVMBOLTRuntimeLibs
+  LLVMBOLTUtils
+  )
+
 if ("AArch64" IN_LIST LLVM_TARGETS_TO_BUILD)
-  list(APPEND LLVM_LINK_COMPONENTS BOLTTargetAArch64)
+  list(APPEND TARGET_LINK_LIBRARIES LLVMBOLTTargetAArch64)
   set(BOLT_AArch64 On)
 endif()
 
 if ("X86" IN_LIST LLVM_TARGETS_TO_BUILD)
-  list(APPEND LLVM_LINK_COMPONENTS BOLTTargetX86)
+  list(APPEND TARGET_LINK_LIBRARIES LLVMBOLTTargetX86)
   set(BOLT_X64 On)
 endif()
 
@@ -34,6 +37,11 @@
   ${LLVM_PTHREAD_LIB}
   )
 
+target_link_libraries(LLVMBOLTRewrite
+  PRIVATE
+  ${TARGET_LINK_LIBRARIES}
+  )
+
 if (DEFINED BOLT_AArch64)
   target_compile_definitions(LLVMBOLTRewrite PRIVATE AARCH64_AVAILABLE)
 endif()
diff --git a/bolt/lib/RuntimeLibs/CMakeLists.txt b/bolt/lib/RuntimeLibs/CMakeLists.txt
--- a/bolt/lib/RuntimeLibs/CMakeLists.txt
+++ b/bolt/lib/RuntimeLibs/CMakeLists.txt
@@ -1,7 +1,4 @@
 set(LLVM_LINK_COMPONENTS
-  BOLTCore
-  BOLTPasses
-  BOLTUtils
   BinaryFormat
   MC
   Object
@@ -14,3 +11,10 @@
   HugifyRuntimeLibrary.cpp
   InstrumentationRuntimeLibrary.cpp
   )
+
+target_link_libraries(LLVMBOLTRuntimeLibs
+  PRIVATE
+  LLVMBOLTCore
+  LLVMBOLTPasses
+  LLVMBOLTUtils
+  )
diff --git a/bolt/tools/driver/CMakeLists.txt b/bolt/tools/driver/CMakeLists.txt
--- a/bolt/tools/driver/CMakeLists.txt
+++ b/bolt/tools/driver/CMakeLists.txt
@@ -1,8 +1,5 @@
 set(LLVM_LINK_COMPONENTS
   ${LLVM_TARGETS_TO_BUILD}
-  BOLTProfile
-  BOLTRewrite
-  BOLTUtils
   MC
   Object
   Support
@@ -21,6 +18,13 @@
   ${BOLT_DRIVER_DEPS}
   )
 
+target_link_libraries(llvm-bolt
+  PRIVATE
+  LLVMBOLTProfile
+  LLVMBOLTRewrite
+  LLVMBOLTUtils
+  )
+
 add_llvm_tool_symlink(perf2bolt llvm-bolt)
 add_llvm_tool_symlink(llvm-boltdiff llvm-bolt)
 
diff --git a/bolt/tools/heatmap/CMakeLists.txt b/bolt/tools/heatmap/CMakeLists.txt
--- a/bolt/tools/heatmap/CMakeLists.txt
+++ b/bolt/tools/heatmap/CMakeLists.txt
@@ -1,8 +1,5 @@
 set(LLVM_LINK_COMPONENTS
   ${LLVM_TARGETS_TO_BUILD}
-  BOLTProfile
-  BOLTRewrite
-  BOLTUtils
   MC
   Object
   Support
@@ -12,4 +9,11 @@
   heatmap.cpp
   )
 
+target_link_libraries(llvm-bolt-heatmap
+  PRIVATE
+  LLVMBOLTProfile
+  LLVMBOLTRewrite
+  LLVMBOLTUtils
+  )
+
 set_target_properties(llvm-bolt-heatmap PROPERTIES FOLDER "BOLT")
diff --git a/bolt/unittests/Core/CMakeLists.txt b/bolt/unittests/Core/CMakeLists.txt
--- a/bolt/unittests/Core/CMakeLists.txt
+++ b/bolt/unittests/Core/CMakeLists.txt
@@ -1,6 +1,4 @@
 set(LLVM_LINK_COMPONENTS
-  BOLTCore
-  BOLTRewrite
   DebugInfoDWARF
   Object
   MC
@@ -12,6 +10,12 @@
   MCPlusBuilder.cpp
   )
 
+target_link_libraries(CoreTests
+  PRIVATE
+  LLVMBOLTCore
+  LLVMBOLTRewrite
+  )
+
 if ("AArch64" IN_LIST LLVM_TARGETS_TO_BUILD)
   include_directories(
     ${LLVM_MAIN_SRC_DIR}/lib/Target/AArch64