diff --git a/clang/cmake/modules/AddClang.cmake b/clang/cmake/modules/AddClang.cmake --- a/clang/cmake/modules/AddClang.cmake +++ b/clang/cmake/modules/AddClang.cmake @@ -173,11 +173,25 @@ llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE) endmacro() +# Link with a Clang component library, or clang-cpp if CLANG_LINK_CLANG_DYLIB +# is set. If target is a static library, PUBLIC and PRIVATE dependencies are +# treated as INTERFACE dependencies, so this can replace LINK_LIBS. function(clang_target_link_libraries target type) + get_target_property(TARGET_TYPE ${target} TYPE) + if(${TARGET_TYPE} EQUAL "STATIC_LIBRARY") + set(type INTERFACE) + endif() if (CLANG_LINK_CLANG_DYLIB) target_link_libraries(${target} ${type} clang-cpp) else() target_link_libraries(${target} ${type} ${ARGN}) endif() + if (TARGET "${target}_static") + if (CLANG_LINK_CLANG_DYLIB) + target_link_libraries("${target}_static" INTERFACE clang-cpp) + else() + target_link_libraries("${target}_static" INTERFACE ${ARGN}) + endif() + endif() endfunction() diff --git a/clang/tools/c-index-test/CMakeLists.txt b/clang/tools/c-index-test/CMakeLists.txt --- a/clang/tools/c-index-test/CMakeLists.txt +++ b/clang/tools/c-index-test/CMakeLists.txt @@ -25,6 +25,9 @@ target_link_libraries(c-index-test PRIVATE libclang + ) + clang_target_link_libraries(c-index-test + PRIVATE clangAST clangBasic clangCodeGen diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -34,7 +34,7 @@ ../../include/clang-c/Index.h ) -set(LIBS +set(CLANG_LIB_DEPS clangAST clangBasic clangDriver @@ -44,11 +44,10 @@ clangSema clangSerialization clangTooling - LLVMSupport ) if (CLANG_ENABLE_ARCMT) - list(APPEND LIBS clangARCMigrate) + list(APPEND CLANG_LIB_DEPS clangARCMigrate) endif () if (TARGET clangTidyPlugin) @@ -113,6 +112,11 @@ Support ) +clang_target_link_libraries(libclang + PRIVATE + ${CLANG_LIB_DEPS} + ) + if(ENABLE_SHARED) if(WIN32) set_target_properties(libclang