# Building shared libraries requires PIC objects.
if(LLVM_ENABLE_PIC)

  set(LLVM_LINK_COMPONENTS
    AllTargetsAsmParsers
    AllTargetsCodeGens
    AllTargetsDescs
    AllTargetsDisassemblers
    AllTargetsInfos
    BitReader
    Core
    CodeGen
    LTO
    MC
    MCDisassembler
    Support
    Target
    TargetParser
    )

  set(SOURCES
    LTODisassembler.cpp
    lto.cpp
    )

  set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/lto.exports)

  if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
      set(LTO_LIBRARY_TYPE MODULE)
      set(LTO_LIBRARY_NAME libLTO)
    else()
      set(LTO_LIBRARY_TYPE SHARED)
      set(LTO_LIBRARY_NAME LTO)
  endif()

  add_llvm_library(${LTO_LIBRARY_NAME} ${LTO_LIBRARY_TYPE} INSTALL_WITH_TOOLCHAIN
      ${SOURCES} DEPENDS intrinsics_gen)

  install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/lto.h
    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/llvm-c"
    COMPONENT LTO)

  if (APPLE)
    set(LTO_VERSION ${LLVM_VERSION_MAJOR})
    if(LLVM_LTO_VERSION_OFFSET)
      math(EXPR LTO_VERSION "${LLVM_VERSION_MAJOR} + ${LLVM_LTO_VERSION_OFFSET}")
    endif()
    if(LLVM_VERSIONED_DYLIB_NAME_ON_DARWIN)
      set_target_properties(LTO PROPERTIES
        SOVERSION ${LTO_VERSION}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}
        VERSION ${LTO_VERSION}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX})
      if(LLVM_UNVERSIONED_LIBLTO_ON_DARWIN)
        set_property(TARGET LTO PROPERTY SOVERSION)
        set_property(TARGET LTO PROPERTY VERSION)
      endif()
    endif()
    llvm_set_macho_current_version(LTO ${LTO_VERSION})
    if(LLVM_USE_SANITIZER)
      execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=lib
                      OUTPUT_VARIABLE clang_lib_dir)
      string(STRIP ${clang_lib_dir} clang_lib_dir)
      if (clang_lib_dir MATCHES ".*xctoolchain.*")
        message(WARNING "Sanitized libLTO (with LLVM_USE_SANITIZER) is unsupported on Darwin when compiling "
                        "with a system sanitizer library. Please use just-built sanitizers.")
      endif()
    endif()
  endif()

endif()
