cmake: Add CLANG_LINK_CLANG_DYLIB option
authorTom Stellard <tstellar@redhat.com>
Wed, 3 Jul 2019 22:45:55 +0000 (22:45 +0000)
committerTom Stellard <tstellar@redhat.com>
Wed, 3 Jul 2019 22:45:55 +0000 (22:45 +0000)
Summary:
Setting CLANG_LINK_CLANG_DYLIB=ON causes clang tools to link against
libclang_shared.so instead of the individual component libraries.

Reviewers: mgorny, beanz, smeenai, phosek, sylvestre.ledru

Subscribers: arphaman, cfe-commits, llvm-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D63503

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@365092 91177308-0d34-0410-b5e6-96231b3b80d8

39 files changed:
CMakeLists.txt
cmake/modules/AddClang.cmake
examples/AnnotateFunctions/CMakeLists.txt
examples/PrintFunctionNames/CMakeLists.txt
examples/clang-interpreter/CMakeLists.txt
lib/Analysis/plugins/CheckerDependencyHandling/CMakeLists.txt
lib/Analysis/plugins/CheckerOptionHandling/CMakeLists.txt
lib/Analysis/plugins/SampleAnalyzer/CMakeLists.txt
tools/arcmt-test/CMakeLists.txt
tools/clang-check/CMakeLists.txt
tools/clang-diff/CMakeLists.txt
tools/clang-extdef-mapping/CMakeLists.txt
tools/clang-format/CMakeLists.txt
tools/clang-import-test/CMakeLists.txt
tools/clang-offload-bundler/CMakeLists.txt
tools/clang-refactor/CMakeLists.txt
tools/clang-rename/CMakeLists.txt
tools/clang-scan-deps/CMakeLists.txt
tools/diagtool/CMakeLists.txt
tools/driver/CMakeLists.txt
unittests/AST/CMakeLists.txt
unittests/ASTMatchers/CMakeLists.txt
unittests/ASTMatchers/Dynamic/CMakeLists.txt
unittests/Analysis/CMakeLists.txt
unittests/Basic/CMakeLists.txt
unittests/CodeGen/CMakeLists.txt
unittests/CrossTU/CMakeLists.txt
unittests/Driver/CMakeLists.txt
unittests/Format/CMakeLists.txt
unittests/Frontend/CMakeLists.txt
unittests/Index/CMakeLists.txt
unittests/Lex/CMakeLists.txt
unittests/Rename/CMakeLists.txt
unittests/Rewrite/CMakeLists.txt
unittests/Sema/CMakeLists.txt
unittests/Serialization/CMakeLists.txt
unittests/StaticAnalyzer/CMakeLists.txt
unittests/Tooling/CMakeLists.txt
unittests/Tooling/Syntax/CMakeLists.txt

index 3a5f9349678638e6a33a8f868671952bd5a1c3e9..2a076682376a58be4e702ee34796a8520bdc26d2 100644 (file)
@@ -323,6 +323,14 @@ set(CLANG_VENDOR_UTI "org.llvm.clang" CACHE STRING
 set(CLANG_PYTHON_BINDINGS_VERSIONS "" CACHE STRING
     "Python versions to install libclang python bindings for")
 
+set(CLANG_LINK_CLANG_DYLIB ${LLVM_LINK_LLVM_DYLIB} CACHE BOOL
+    "Link tools against libclang_shared.so")
+
+if (NOT LLVM_LINK_LLVM_DYLIB AND CLANG_LINK_CLANG_DYLIB)
+  message(FATAL_ERROR "Cannot set CLANG_LINK_CLANG_DYLIB=ON when "
+                      "LLVM_LINK_LLVM_DYLIB=OFF")
+endif()
+
 # The libdir suffix must exactly match whatever LLVM's configuration used.
 set(CLANG_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}")
 
index 0c9cd6676033647d182e9a008e067776fe555b04..33f14246545c2bfd353a12b397c9d5b0de7e3943 100644 (file)
@@ -172,3 +172,12 @@ macro(add_clang_symlink name dest)
   # Always generate install targets
   llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE)
 endmacro()
+
+function(clang_target_link_libraries target type)
+  if (CLANG_LINK_CLANG_DYLIB)
+    target_link_libraries(${target} ${type} clang_shared)
+  else()
+    target_link_libraries(${target} ${type} ${ARGN})
+  endif()
+
+endfunction()
index 44b6317e72afcb5507cdb234b7f9484750ea6cd7..e9850b64f08d7cc0e35321e1a92ce6b98ad69f20 100644 (file)
@@ -1,11 +1,13 @@
 add_llvm_library(AnnotateFunctions MODULE AnnotateFunctions.cpp PLUGIN_TOOL clang)
 
 if(LLVM_ENABLE_PLUGINS AND (WIN32 OR CYGWIN))
-  target_link_libraries(AnnotateFunctions PRIVATE
+  set(LLVM_LINK_COMPONENTS
+    Support
+  )
+  clang_target_link_libraries(AnnotateFunctions PRIVATE
     clangAST
     clangBasic
     clangFrontend
     clangLex
-    LLVMSupport
     )
 endif()
index 68c6f76dff0544677679888a5b446b1c7eb586d6..63b0c015732c30092dbc49b90d6c837d05352af6 100644 (file)
@@ -12,10 +12,12 @@ endif()
 add_llvm_library(PrintFunctionNames MODULE PrintFunctionNames.cpp PLUGIN_TOOL clang)
 
 if(LLVM_ENABLE_PLUGINS AND (WIN32 OR CYGWIN))
-  target_link_libraries(PrintFunctionNames PRIVATE
+  set(LLVM_LINK_COMPONENTS
+    Support
+  )
+  clang_target_link_libraries(PrintFunctionNames PRIVATE
     clangAST
     clangBasic
     clangFrontend
-    LLVMSupport
     )
 endif()
index ae2c0876c85b20572998866f7d83f35812ac9e46..11056aa379ae8b2264d1698f5a2290c0939cb295 100644 (file)
@@ -19,7 +19,7 @@ add_dependencies(clang-interpreter
   clang-resource-headers
   )
 
-target_link_libraries(clang-interpreter
+clang_target_link_libraries(clang-interpreter
   PRIVATE
   clangBasic
   clangCodeGen
index 0a8ff48755f1791ac02c1559a8aa579a70d3a578..dde2cca133be715bbbf2882cdd225dc760a685f3 100644 (file)
@@ -1,10 +1,13 @@
+set(LLVM_LINK_COMPONENTS
+  Support
+  )
+
 set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CheckerDependencyHandlingAnalyzerPlugin.exports)
 add_llvm_library(CheckerDependencyHandlingAnalyzerPlugin MODULE CheckerDependencyHandling.cpp PLUGIN_TOOL clang)
 
-target_link_libraries(CheckerDependencyHandlingAnalyzerPlugin PRIVATE
+clang_target_link_libraries(CheckerDependencyHandlingAnalyzerPlugin PRIVATE
   clangAnalysis
   clangAST
   clangStaticAnalyzerCore
   clangStaticAnalyzerFrontend
-  LLVMSupport
   )
index 6e289933c2dd4ddbd0c59ed77217eeafae6b439e..744164782d9157b209d2181c88fe38df4fc4d1ee 100644 (file)
@@ -1,10 +1,13 @@
+set(LLVM_LINK_COMPONENTS
+  Support
+  )
+
 set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CheckerOptionHandlingAnalyzerPlugin.exports)
 add_llvm_library(CheckerOptionHandlingAnalyzerPlugin MODULE CheckerOptionHandling.cpp PLUGIN_TOOL clang)
 
-target_link_libraries(CheckerOptionHandlingAnalyzerPlugin PRIVATE
+clang_target_link_libraries(CheckerOptionHandlingAnalyzerPlugin PRIVATE
   clangAnalysis
   clangAST
   clangStaticAnalyzerCore
   clangStaticAnalyzerFrontend
-  LLVMSupport
   )
index 639a97f25311243ee44b15f5dcd26410cb5078fa..0db1780ca7c98d63031282c599a5bfd0abca7f1f 100644 (file)
@@ -1,10 +1,13 @@
+set(LLVM_LINK_COMPONENTS
+  Support
+  )
+
 set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/SampleAnalyzerPlugin.exports)
 add_llvm_library(SampleAnalyzerPlugin MODULE MainCallChecker.cpp PLUGIN_TOOL clang)
 
-target_link_libraries(SampleAnalyzerPlugin PRIVATE
+clang_target_link_libraries(SampleAnalyzerPlugin PRIVATE
   clangAnalysis
   clangAST
   clangStaticAnalyzerCore
   clangStaticAnalyzerFrontend
-  LLVMSupport
   )
index c4c1463241b489eddc2cbeab978e9eab736ae708..d3e6580e16efaf7fe69fcad0f4a0726e7e3a6b90 100644 (file)
@@ -6,7 +6,7 @@ add_clang_executable(arcmt-test
   arcmt-test.cpp
   )
 
-target_link_libraries(arcmt-test
+clang_target_link_libraries(arcmt-test
   PRIVATE
   clangARCMigrate
   clangBasic
index b837b0a0a5d9dbdc8cc8cd0d7b8038a734f4f0f6..4576d78bcfb4d819e86e40d2da545e59e233d37a 100644 (file)
@@ -8,7 +8,7 @@ add_clang_executable(clang-check
   ClangCheck.cpp
   )
 
-target_link_libraries(clang-check
+clang_target_link_libraries(clang-check
   PRIVATE
   clangAST
   clangBasic
index ab9a5bbbe916458dcfbc7061ce87f88bd83fb988..41f61fe968f3f6bb4800a26594482a06013b0ff7 100644 (file)
@@ -6,7 +6,7 @@ add_clang_executable(clang-diff
   ClangDiff.cpp
   )
 
-target_link_libraries(clang-diff
+clang_target_link_libraries(clang-diff
   PRIVATE
   clangBasic
   clangFrontend
index 6c81689a831adb5b25578c2c435621faea0749e1..4798bdb71ad06d3159eea52348e7e55458a93208 100644 (file)
@@ -7,7 +7,7 @@ add_clang_executable(clang-extdef-mapping
   ClangExtDefMapGen.cpp
   )
 
-target_link_libraries(clang-extdef-mapping
+clang_target_link_libraries(clang-extdef-mapping
   PRIVATE
   clangAST
   clangBasic
index a295e8cd0b2ac01de7ff67db1c17535c4a115164..35ecdb11253ce043b440296c861a93aa6fbb28cc 100644 (file)
@@ -11,7 +11,7 @@ set(CLANG_FORMAT_LIB_DEPS
   clangToolingCore
   )
 
-target_link_libraries(clang-format
+clang_target_link_libraries(clang-format
   PRIVATE
   ${CLANG_FORMAT_LIB_DEPS}
   )
index ee1bdab64a5da48bdad41609375253d8a3171149..39a5c41c1512d3cb34b5b5ba7f806403f116bafe 100644 (file)
@@ -24,7 +24,7 @@ set(CLANG_IMPORT_TEST_LIB_DEPS
   clangSerialization
   )
 
-target_link_libraries(clang-import-test
+clang_target_link_libraries(clang-import-test
   PRIVATE
   ${CLANG_IMPORT_TEST_LIB_DEPS}
   )
index 8718015be76a274f7bb4d9b5b5e9d6a09852ae1a..465bef040a6c7dd1db34f8ec7bde48dc5cf5b179 100644 (file)
@@ -17,7 +17,7 @@ set(CLANG_OFFLOAD_BUNDLER_LIB_DEPS
   
 add_dependencies(clang clang-offload-bundler)
 
-target_link_libraries(clang-offload-bundler
+clang_target_link_libraries(clang-offload-bundler
   PRIVATE
   ${CLANG_OFFLOAD_BUNDLER_LIB_DEPS}
   )
index 5340d7e9b20370d7cad67a906634245e8d54df1e..a21d84d5385b4ac5a09958d72e7671202a417a52 100644 (file)
@@ -8,7 +8,7 @@ add_clang_tool(clang-refactor
   TestSupport.cpp
   )
 
-target_link_libraries(clang-refactor
+clang_target_link_libraries(clang-refactor
   PRIVATE
   clangAST
   clangBasic
index 1abf7ed4e82b4dfe37c720701c9078044916d39a..cda8e29ec5b180f64fb275e6c6823dd12518292b 100644 (file)
@@ -7,7 +7,7 @@ add_clang_tool(clang-rename
   ClangRename.cpp
   )
 
-target_link_libraries(clang-rename
+clang_target_link_libraries(clang-rename
   PRIVATE
   clangBasic
   clangFrontend
index 5cb4e6ff3201b6442a2d9c5d1e3b7e140a596e3c..6aa914f3b256066da4d00128b35ac79bc7b409ff 100644 (file)
@@ -21,7 +21,7 @@ set(CLANG_SCAN_DEPS_LIB_DEPS
   clangDependencyScanning
   )
 
-target_link_libraries(clang-scan-deps
+clang_target_link_libraries(clang-scan-deps
   PRIVATE
   ${CLANG_SCAN_DEPS_LIB_DEPS}
   )
index 80d787b12fdd2f208ce49210b7057a6b07004b5f..a95444be40ee56fd2eaa39199d6acdf267824a10 100644 (file)
@@ -12,7 +12,7 @@ add_clang_executable(diagtool
   TreeView.cpp
 )
 
-target_link_libraries(diagtool
+clang_target_link_libraries(diagtool
   PRIVATE
   clangBasic
   clangFrontend
index 30ab163a6cc9d6166701320d567fa538dcbce256..590d708d837cb80f343889aafc1e04220bea4c0f 100644 (file)
@@ -39,7 +39,7 @@ add_clang_tool(clang
   ${tablegen_deps}
   )
 
-target_link_libraries(clang
+clang_target_link_libraries(clang
   PRIVATE
   clangBasic
   clangCodeGen
index 2151dc4cd8bd817fd6e3bd2625150736d7a8546d..333aded9ad4eb3d6d0c266854b653eed0e97cf58 100644 (file)
@@ -31,7 +31,7 @@ add_clang_unittest(ASTTests
   StructuralEquivalenceTest.cpp
   )
 
-target_link_libraries(ASTTests
+clang_target_link_libraries(ASTTests
   PRIVATE
   clangAST
   clangASTMatchers
index 4e44c795f894ebeb763f3859c2f5d673554e2644..09c4290fa1d216209a7308deda0716d4bd2e904e 100644 (file)
@@ -18,7 +18,7 @@ add_clang_unittest(ASTMatchersTests
   ASTMatchersTraversalTest.cpp
   )
 
-target_link_libraries(ASTMatchersTests
+clang_target_link_libraries(ASTMatchersTests
   PRIVATE
   clangAST
   clangASTMatchers
index 07742caef658f8ed207831f0b25213dec45c5e28..c40964dfaf0bf2dc72653aeda0a92044c91ab0d5 100644 (file)
@@ -8,7 +8,7 @@ add_clang_unittest(DynamicASTMatchersTests
   RegistryTest.cpp
   )
 
-target_link_libraries(DynamicASTMatchersTests
+clang_target_link_libraries(DynamicASTMatchersTests
   PRIVATE
   clangAST
   clangASTMatchers
index c760ae2d82b7e83ee3fdc8150f0ca26d53351024..5575c910dad533c3fa9e2e67f9d0d4ad76b45e0a 100644 (file)
@@ -8,7 +8,7 @@ add_clang_unittest(ClangAnalysisTests
   ExprMutationAnalyzerTest.cpp
   )
 
-target_link_libraries(ClangAnalysisTests
+clang_target_link_libraries(ClangAnalysisTests
   PRIVATE
   clangAnalysis
   clangAST
index d883c362e288d22b930167faa2b0767e9dfd6b5c..a54e9397ad174bd87525c61a96e2b89aa0bfc084 100644 (file)
@@ -10,7 +10,7 @@ add_clang_unittest(BasicTests
   SourceManagerTest.cpp
   )
 
-target_link_libraries(BasicTests
+clang_target_link_libraries(BasicTests
   PRIVATE
   clangAST
   clangBasic
index e4e7588a93275446a3ba1976d6ba90c94080806b..c4c8a5c197f70b0c504277d91cbf275c6d62db42 100644 (file)
@@ -10,7 +10,7 @@ add_clang_unittest(ClangCodeGenTests
   TBAAMetadataTest.cpp
   )
 
-target_link_libraries(ClangCodeGenTests
+clang_target_link_libraries(ClangCodeGenTests
   PRIVATE
   clangAST
   clangBasic
index 73047b739a4ac68942aad3a825ef4e8223e44424..222b7e83dc38c1960b4d2ed5405644cb465daff0 100644 (file)
@@ -7,7 +7,7 @@ add_clang_unittest(CrossTUTests
   CrossTranslationUnitTest.cpp
   )
 
-target_link_libraries(CrossTUTests
+clang_target_link_libraries(CrossTUTests
   PRIVATE
   clangAST
   clangBasic
index 82dc0ff4bd2ac9425cd4034c6eb7d6ea4dd1d38c..55b8a74830f41246e284ef9bdf08e0c7e76e0f9a 100644 (file)
@@ -11,7 +11,7 @@ add_clang_unittest(ClangDriverTests
   MultilibTest.cpp
   )
 
-target_link_libraries(ClangDriverTests
+clang_target_link_libraries(ClangDriverTests
   PRIVATE
   clangDriver
   clangBasic
index bf02de970526f315fb36cf84bcb0a0c329f7701b..d02734a48b7eb383f0318c3a2cfec3e1ce1576c3 100644 (file)
@@ -22,7 +22,7 @@ add_clang_unittest(FormatTests
   UsingDeclarationsSorterTest.cpp
   )
 
-target_link_libraries(FormatTests
+clang_target_link_libraries(FormatTests
   PRIVATE
   clangBasic
   clangFormat
index c7851bb394eee5023218a71bd519694d853221ca..cde19e91061425815011b32705a0f918fe18d8da 100644 (file)
@@ -12,7 +12,7 @@ add_clang_unittest(FrontendTests
   PCHPreambleTest.cpp
   OutputStreamTest.cpp
   )
-target_link_libraries(FrontendTests
+clang_target_link_libraries(FrontendTests
   PRIVATE
   clangAST
   clangBasic
index 2756fad906a3a25ecdc9694849df1ef09253c6ce..ea940e9d7a9effb980260d3b488d6869a1ecb58e 100644 (file)
@@ -7,7 +7,7 @@ add_clang_unittest(IndexTests
   IndexTests.cpp
   )
 
-target_link_libraries(IndexTests
+clang_target_link_libraries(IndexTests
   PRIVATE
   clangAST
   clangBasic
index dbc8328eda0261c83a155278c93442c9c3fe5fc9..97a4e5e44608c86e9835fe520a1335dff00bfa5e 100644 (file)
@@ -11,7 +11,7 @@ add_clang_unittest(LexTests
   PPConditionalDirectiveRecordTest.cpp
   )
 
-target_link_libraries(LexTests
+clang_target_link_libraries(LexTests
   PRIVATE
   clangAST
   clangBasic
index 4db6049e15120b63551b7efde20a3ade4ac5b5ca..a33d7d8ef7201feb1440e45f6044c2b37ae92687 100644 (file)
@@ -13,7 +13,7 @@ add_clang_unittest(ClangRenameTests
   RenameFunctionTest.cpp
   )
 
-target_link_libraries(ClangRenameTests
+clang_target_link_libraries(ClangRenameTests
   PRIVATE
   clangAST
   clangASTMatchers
index 8edd9ba8f830ed9380a9ea0e462e85507301141d..a4c6e37245c607368fd1253908635e362922e983 100644 (file)
@@ -5,7 +5,7 @@ set(LLVM_LINK_COMPONENTS
 add_clang_unittest(RewriteTests
   RewriteBufferTest.cpp
   )
-target_link_libraries(RewriteTests
+clang_target_link_libraries(RewriteTests
   PRIVATE
   clangRewrite
   )
index 00ffa65864ee66e8e2112414c2af57d13a13a37e..51e8d6c5b430c2cfba7c17e890ebacaac31f5f92 100644 (file)
@@ -7,7 +7,7 @@ add_clang_unittest(SemaTests
   CodeCompleteTest.cpp
   )
 
-target_link_libraries(SemaTests
+clang_target_link_libraries(SemaTests
   PRIVATE
   clangAST
   clangBasic
@@ -16,5 +16,9 @@ target_link_libraries(SemaTests
   clangSema
   clangSerialization
   clangTooling
-  LLVMTestingSupport
   )
+
+target_link_libraries(SemaTests
+  PRIVATE
+  LLVMTestingSupport
+)
index a19ef5faee50886301d2754da476a18a663c6348..f143f28e12326ef11ff8f798958784f5ef578328 100644 (file)
@@ -8,7 +8,7 @@ add_clang_unittest(SerializationTests
   InMemoryModuleCacheTest.cpp
   )
 
-target_link_libraries(SerializationTests
+clang_target_link_libraries(SerializationTests
   PRIVATE
   clangAST
   clangBasic
index 1b8044c9e1fd71022fb60ea32548c6f555608860..ff92bdcb299a7828d31e414b6f9979ba6ec81fc6 100644 (file)
@@ -10,7 +10,7 @@ add_clang_unittest(StaticAnalysisTests
   SymbolReaperTest.cpp
   )
 
-target_link_libraries(StaticAnalysisTests
+clang_target_link_libraries(StaticAnalysisTests
   PRIVATE
   clangBasic
   clangAnalysis
index 9687f52258d0a6a0c60db925c611cf729e4d7c0d..a10bff6d838270af1a495d53fd3b27b828b093c7 100644 (file)
@@ -57,7 +57,7 @@ add_clang_unittest(ToolingTests
   TransformerTest.cpp
   )
 
-target_link_libraries(ToolingTests
+clang_target_link_libraries(ToolingTests
   PRIVATE
   clangAST
   clangASTMatchers
@@ -71,8 +71,11 @@ target_link_libraries(ToolingTests
   clangToolingCore
   clangToolingInclusions
   clangToolingRefactoring
-  LLVMTestingSupport
   )
 
+target_link_libraries(ToolingTests
+  PRIVATE
+  LLVMTestingSupport
+)
 
 add_subdirectory(Syntax)
index fbcca9d04e530f2fe7ae525b1bb34d3a028bc451..9803157dd2db70a2d392105895bee375ac190c9b 100644 (file)
@@ -6,7 +6,7 @@ add_clang_unittest(SyntaxTests
   TokensTest.cpp
 )
 
-target_link_libraries(SyntaxTests
+clang_target_link_libraries(SyntaxTests
   PRIVATE
   clangAST
   clangBasic
@@ -15,5 +15,9 @@ target_link_libraries(SyntaxTests
   clangSerialization
   clangTooling
   clangToolingSyntax
-  LLVMTestingSupport
   )
+
+target_link_libraries(SyntaxTests
+  PRIVATE
+  LLVMTestingSupport
+)