From 07f95b3218e6590ac3476200147f8ce3ffafed93 Mon Sep 17 00:00:00 2001 From: NAKAMURA Takumi Date: Wed, 26 Feb 2014 06:53:16 +0000 Subject: [CMake] Use target_link_libraries(INTERFACE|PRIVATE) on CMake-2.8.12 to increase opportunity for parallel build. target_link_libraries(INTERFACE) doesn't bring inter-target dependencies in add_library, although final targets have dependencies to whole dependent libraries. It makes most libraries can be built in parallel. target_link_libraries(PRIVATE) is used to shaared library. Each dependent library is linked to the target.so, and its user will not see its grandchildren. For example, - libclang.so has sufficient libclang*.a(s). - c-index-test requires just only libclang.so. FIXME: lld is tweaked minimally. Adding INTERFACE in each library would be better thing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202241 91177308-0d34-0410-b5e6-96231b3b80d8 --- cmake/modules/AddLLVM.cmake | 9 +++++++-- cmake/modules/LLVM-Config.cmake | 10 +++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'cmake/modules') diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index bce3b2dd76..543ba93e55 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -289,7 +289,12 @@ function(llvm_add_library name) endif() endif() - target_link_libraries(${name} ${ARG_LINK_LIBS}) + if(ARG_STATIC) + target_link_libraries(${name} ${cmake_2_8_12_INTERFACE} ${ARG_LINK_LIBS}) + else() + # MODULE|SHARED + target_link_libraries(${name} ${cmake_2_8_12_PRIVATE} ${ARG_LINK_LIBS}) + endif() llvm_config(${name} ${ARG_LINK_COMPONENTS} ${LLVM_LINK_COMPONENTS}) @@ -330,7 +335,7 @@ macro(add_llvm_library name) # name, but using get_property(... SET) doesn't suffice to determine if a # property has been set to an empty value. get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name}) - target_link_libraries(${name} ${lib_deps}) + target_link_libraries(${name} ${cmake_2_8_12_INTERFACE} ${lib_deps}) endmacro(add_llvm_library name) macro(add_llvm_loadable_module name) diff --git a/cmake/modules/LLVM-Config.cmake b/cmake/modules/LLVM-Config.cmake index 451fc56c6b..2783af807a 100644 --- a/cmake/modules/LLVM-Config.cmake +++ b/cmake/modules/LLVM-Config.cmake @@ -39,7 +39,15 @@ function(explicit_llvm_config executable) set( link_components ${ARGN} ) llvm_map_components_to_libnames(LIBRARIES ${link_components}) - target_link_libraries(${executable} ${LIBRARIES}) + get_target_property(t ${executable} TYPE) + if("${t}" STREQUAL "STATIC_LIBRARY") + target_link_libraries(${executable} ${cmake_2_8_12_INTERFACE} ${LIBRARIES}) + elseif("${t}" STREQUAL "SHARED_LIBRARY" OR "${t}" STREQUAL "MODULE_LIBRARY") + target_link_libraries(${executable} ${cmake_2_8_12_PRIVATE} ${LIBRARIES}) + else() + # Use plain form for legacy user. + target_link_libraries(${executable} ${LIBRARIES}) + endif() endfunction(explicit_llvm_config) -- cgit v1.2.3