[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.
llvm-svn: 202241
This commit is contained in:
NAKAMURA Takumi 2014-02-26 06:53:16 +00:00
parent 9df497e568
commit 955d27a4ce
6 changed files with 20 additions and 7 deletions

View File

@ -326,7 +326,7 @@ macro(add_clang_library name)
llvm_add_library(${name} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
if(TARGET ${name})
target_link_libraries( ${name} ${LLVM_COMMON_LIBS} )
target_link_libraries(${name} ${cmake_2_8_12_INTERFACE} ${LLVM_COMMON_LIBS})
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libclang")
install(TARGETS ${name}

View File

@ -11,7 +11,7 @@ add_lld_library(lldCore
SymbolTable.cpp
)
target_link_libraries(lldCore
target_link_libraries(lldCore ${cmake_2_8_12_INTERFACE}
lldNative
lldYAML
)

View File

@ -15,7 +15,7 @@ add_lld_library(lldReaderWriter
FileArchive.cpp
)
target_link_libraries(lldReaderWriter
target_link_libraries(lldReaderWriter ${cmake_2_8_12_INTERFACE}
lldCore
lldPasses
)

View File

@ -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)

View File

@ -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)

View File

@ -142,5 +142,5 @@ if( NOT MSVC )
endif()
endif( MINGW )
endif( NOT MSVC )
target_link_libraries(LLVMSupport ${system_libs})
target_link_libraries(LLVMSupport ${cmake_2_8_12_INTERFACE} ${system_libs})
set_property(TARGET LLVMSupport PROPERTY LLVM_SYSTEM_LIBS "${system_libs}")