set(EXPORTED_SYMBOL_FILE "${SOURCEKITD_SOURCE_DIR}/bin/sourcekitd.exports")

option(SOURCEKITD_BUILD_STATIC_INPROC
  "Build sourcekitdInProc as a static library (in addition to a shared one)" OFF)

set(sourcekitdInProc_args
  sourcekitdInProc.cpp
  LINK_LIBS SourceKitSwiftLang sourcekitdAPI
  LLVM_COMPONENT_DEPENDS support coverage
)

if (SOURCEKIT_INSTALLING_INPROC)
  if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
    add_sourcekit_framework(sourcekitdInProc
      ${SOURCEKITD_SOURCE_DIR}/include/sourcekitd/sourcekitd.h
      ${sourcekitdInProc_args}
      MODULEMAP module.modulemap
      INSTALL_IN_COMPONENT sourcekit-inproc
    )
    set_property(TARGET sourcekitdInProc APPEND_STRING PROPERTY LINK_FLAGS " -fapplication-extension")
  else()
    add_sourcekit_library(sourcekitdInProc
      ${sourcekitdInProc_args}
      HEADERS
        ${SOURCEKITD_SOURCE_DIR}/include/sourcekitd/sourcekitd.h
      INSTALL_IN_COMPONENT sourcekit-inproc
      SHARED
    )
  endif()
else()
  add_sourcekit_library(sourcekitdInProc
    ${sourcekitdInProc_args}
    HEADERS
      ${SOURCEKITD_SOURCE_DIR}/include/sourcekitd/sourcekitd.h
    INSTALL_IN_COMPONENT sourcekit-inproc
    SHARED
  )
endif()

# While it is possible to build this as a static library,
# to get the runtime paths correct, it must be linked into a binary
# that is in the same directory as the swift library directory.
if (SOURCEKITD_BUILD_STATIC_INPROC)
  add_sourcekit_library(sourcekitdInProc_Static
    HEADERS
      ${SOURCEKITD_SOURCE_DIR}/include/sourcekitd/sourcekitd.h
    ${sourcekitdInProc_args}
  )
endif()

if (SOURCEKIT_BUILT_STANDALONE)
  # Create the symlinks necessary to find the swift runtime.
  add_custom_command(TARGET sourcekitdInProc PRE_BUILD
    COMMAND ln "-fhs" "${PATH_TO_SWIFT_BUILD}/lib/swift" "${SOURCEKIT_BINARY_DIR}/lib")
endif()

if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
  if(SWIFT_COMPILER_VERSION)
    set_property(TARGET sourcekitdInProc APPEND_STRING PROPERTY
                 LINK_FLAGS " -Wl,-current_version -Wl,${SWIFT_COMPILER_VERSION}")
  endif()
endif()

