1e5dd7070Spatrick# Building libclang-cpp.so fails if LLVM_ENABLE_PIC=Off 2e5dd7070Spatrickif (NOT LLVM_ENABLE_PIC) 3e5dd7070Spatrick return() 4e5dd7070Spatrickendif() 5e5dd7070Spatrick 6e5dd7070Spatrickget_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS) 7e5dd7070Spatrick 8e5dd7070Spatrickforeach (lib ${clang_libs}) 9e5dd7070Spatrick if(XCODE) 10e5dd7070Spatrick # Xcode doesn't support object libraries, so we have to trick it into 11e5dd7070Spatrick # linking the static libraries instead. 12e5dd7070Spatrick list(APPEND _DEPS "-force_load" ${lib}) 13e5dd7070Spatrick else() 14e5dd7070Spatrick list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>) 15e5dd7070Spatrick endif() 16ec727ea7Spatrick if (BUILD_SHARED_LIBS) 17ec727ea7Spatrick # If we are building static libraries, then we don't need to add the static 1812c85518Srobert # libraries as a dependency, because we are already linking against the 19ec727ea7Spatrick # individual object files. 20e5dd7070Spatrick list(APPEND _DEPS $<TARGET_PROPERTY:${lib},INTERFACE_LINK_LIBRARIES>) 21ec727ea7Spatrick endif() 22e5dd7070Spatrick 23e5dd7070Spatrick # clang libraries are redundant since we are linking all the individual 24e5dd7070Spatrick # object files into libclang-cpp.so, so filter them out from _DEPS. 25e5dd7070Spatrick # This avoids problems with LLVM global data when building with 26e5dd7070Spatrick # BUILD_SHARED_LIBS=ON 27e5dd7070Spatrick # FIXME: We could use list(FILTER) with cmake >= 3.6 28e5dd7070Spatrick # FIXME: With cmake >= 3.15 we could use the generator expression 29e5dd7070Spatrick # $<FILTER:list,INCLUDE|EXCLUDE,regex> 30e5dd7070Spatrick get_target_property(interface ${lib} LINK_LIBRARIES) 31e5dd7070Spatrick if (interface) 32e5dd7070Spatrick foreach(lib ${interface}) 33e5dd7070Spatrick if (NOT ${lib} MATCHES "^clang") 34e5dd7070Spatrick list(APPEND _DEPS ${lib}) 35e5dd7070Spatrick endif() 36e5dd7070Spatrick endforeach() 37e5dd7070Spatrick endif() 38e5dd7070Spatrickendforeach () 39e5dd7070Spatrick 40e5dd7070Spatrickif (CLANG_LINK_CLANG_DYLIB) 41e5dd7070Spatrick set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN) 42e5dd7070Spatrickendif() 43e5dd7070Spatrick 44e5dd7070Spatrickadd_clang_library(clang-cpp 45e5dd7070Spatrick SHARED 46e5dd7070Spatrick ${INSTALL_WITH_TOOLCHAIN} 47e5dd7070Spatrick clang-shlib.cpp 48e5dd7070Spatrick ${_OBJECTS} 49e5dd7070Spatrick LINK_LIBS 50e5dd7070Spatrick ${_DEPS}) 51a9ac8606Spatrick# Optimize function calls for default visibility definitions to avoid PLT and 52a9ac8606Spatrick# reduce dynamic relocations. 53*7a9b00ceSrobertif (NOT APPLE AND NOT MINGW AND ${OPENBSD_LD_IS_LLD}) 54a9ac8606Spatrick target_link_options(clang-cpp PRIVATE LINKER:-Bsymbolic-functions) 55a9ac8606Spatrickendif() 56