Index: cmake/modules/AddLLVM.cmake =================================================================== --- cmake/modules/AddLLVM.cmake +++ cmake/modules/AddLLVM.cmake @@ -358,7 +358,7 @@ function(llvm_add_library name) cmake_parse_arguments(ARG "MODULE;SHARED;STATIC;OBJECT;DISABLE_LLVM_LINK_LLVM_DYLIB;SONAME" - "OUTPUT_NAME;PLUGIN_TOOL" + "OUTPUT_NAME;PLUGIN_TOOL;DEPENDENCY_LINK_TYPE" "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS;OBJLIBS" ${ARGN}) list(APPEND LLVM_COMMON_DEPENDS ${ARG_DEPENDS}) @@ -536,14 +536,16 @@ get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name}) endif() - if(ARG_STATIC) - set(libtype INTERFACE) - else() - # We can use PRIVATE since SO knows its dependent libs. - set(libtype PRIVATE) + if(NOT ARG_DEPENDENCY_LINK_TYPE) + if(ARG_STATIC) + set(ARG_DEPENDENCY_LINK_TYPE INTERFACE) + else() + # We can use PRIVATE since SO knows its dependent libs. + set(ARG_DEPENDENCY_LINK_TYPE PRIVATE) + endif() endif() - target_link_libraries(${name} ${libtype} + target_link_libraries(${name} ${ARG_DEPENDENCY_LINK_TYPE} ${ARG_LINK_LIBS} ${lib_deps} ${llvm_libs} Index: lib/ExecutionEngine/CMakeLists.txt =================================================================== --- lib/ExecutionEngine/CMakeLists.txt +++ lib/ExecutionEngine/CMakeLists.txt @@ -1,4 +1,9 @@ - +# Execution engine is not neat and contained like other LLVM libraries. To work +# around this if BUILD_SHARED_LIBS is set we need to force the linkage type of +# LLVMExecutionEngine's dependencies to PUBLIC. +if(BUILD_SHARED_LIBS) + set(dependency_hack DEPENDENCY_LINK_TYPE PUBLIC) +endif() add_llvm_library(LLVMExecutionEngine ExecutionEngine.cpp @@ -12,6 +17,7 @@ DEPENDS intrinsics_gen + ${dependency_hack} ) add_subdirectory(Interpreter)