# Building libclang-cpp.so fails if LLVM_ENABLE_PIC=Off
if (NOT LLVM_ENABLE_PIC)
  return()
endif()

get_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS)

foreach (lib ${clang_libs})
  list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
  # Use the static library for its dependencies. The objects that constitute the
  # static library will appear on the link line before the library, so it'll
  # just be ignored, but the dependencies of the library will still be linked
  # correctly.
  #
  # We could propagate the dependencies manually using the library's
  # INTERFACE_LINK_LIBRARIES property, but that will contain $<LINK_ONLY:...>
  # generator expressions if a static library has a private dependency, so we
  # can't use a $<TARGET_PROPERTY:...> generator expression to get the property
  # (since it wouldn't evaluate any generator expressions inside the property).
  # We could use get_property and do string manipulation to manually evaluate
  # the $<LINK_ONLY:...>, but that would miss any dependencies added after we
  # evaluate the get_property. We could also use the LINK_LIBRARIES property
  # instead, which should be free of any generator expressions, but that's
  # technically incorrect (it'd most likely work fine in practice, but still).
  #
  # Another alternative would be to use --whole-archive or equivalent instead of
  # using the object library at all. However, CMake reorders static libraries on
  # the link line so that a library appears after all its dependents, which can
  # reorder static libraries out of their --whole-archive --no-whole-archive
  # sandwich. It's really hard to avoid that reordering while still propagating
  # dependencies, which defeats the whole point.
  #
  # The ideal solution here is to bump our minimum CMake requirement to 3.12,
  # which adds support for dependencies on object libraries. Until then, linking
  # both the object and the static libraries seems like the least bad solution.
  #
  # TODO: Rework this when we bump our minimum CMake version to 3.12 or newer.
  list(APPEND _DEPS ${lib})
endforeach ()

if (CLANG_LINK_CLANG_DYLIB)
  set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN)
endif()

add_clang_library(clang-cpp
                  SHARED
                  ${INSTALL_WITH_TOOLCHAIN}
                  clang-shlib.cpp
                  ${_OBJECTS}
                  LINK_LIBS
                  ${_DEPS})

# Building libclang-cpp.so fails if LLVM_ENABLE_PIC=Off
if (NOT LLVM_ENABLE_PIC)
  return()
endif()

get_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS)

foreach (lib ${clang_libs})
  list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
  list(APPEND _DEPS $<TARGET_PROPERTY:${lib},INTERFACE_LINK_LIBRARIES>)
  list(APPEND _DEPS $<TARGET_PROPERTY:${lib},LINK_LIBRARIES>)
endforeach ()

if (CLANG_LINK_CLANG_DYLIB)
  set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN)
endif()

add_clang_library(clang-cpp
                  SHARED
                  ${INSTALL_WITH_TOOLCHAIN}
                  clang-shlib.cpp
                  ${_OBJECTS}
                  LINK_LIBS
                  ${_DEPS})

Revert [clang-shlib] Fix clang-shlib for PRIVATE dependencies
Revert [clang-shlib] Fix clang-shlib for PRIVATE dependencies

This reverts r365825 (git commit 3173c60f96c3ccfc17d403a192ae58e720153c23)

This is breaking BUILD_SHARED_LIBS=ON builds. Reverting while I rethink it.

git-svn-id: ffe668792ed300d6c2daa1f6eba2e0aa28d7ec6c@365922 91177308-0d34-0410-b5e6-96231b3b80d8
