Skip to content

Commit f7836ae

Browse files
committed
Enable sourcekitd to be built by default on Linux
The Linux build has a dependency on the libdispatch library, which is needed by the various native libraries for sourcekitd. On macOS, the dependency for libdispatch is satisfied directly through the base OS, but on Linux no such dependency exists. Modify this so that if the SourceKit library is built, and the libdispatch library is already present, then we shell out to make the libdispatch binary project when the SourceKit is built. Issue: SR-1676
1 parent 5e395bc commit f7836ae

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,14 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "")
302302
endif()
303303
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
304304
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
305+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
306+
if(EXISTS ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
307+
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
308+
else()
309+
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
310+
endif()
305311
else()
306-
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
312+
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
307313
endif()
308314
option(SWIFT_BUILD_SOURCEKIT
309315
"Build SourceKit"

tools/SourceKit/CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,10 @@ macro(add_sourcekit_library name)
200200
endif()
201201
endif()
202202

203+
if(SWIFT_BUILD_SOURCEKIT AND "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
204+
add_dependencies(${name} needs-libdispatch)
205+
endif()
206+
203207
if("${SOURCEKITLIB_INSTALL_IN_COMPONENT}" STREQUAL "")
204208
if(SOURCEKITLIB_SHARED)
205209
set(SOURCEKITLIB_INSTALL_IN_COMPONENT tools)
@@ -508,6 +512,24 @@ include_directories(BEFORE
508512
)
509513

510514
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
515+
if(SWIFT_BUILD_SOURCEKIT)
516+
add_custom_command(
517+
OUTPUT "${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/.libs/libdispatch.so"
518+
COMMAND /bin/sh ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/autogen.sh
519+
COMMAND /bin/sh ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/configure "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}"
520+
COMMAND /usr/bin/make "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}"
521+
COMMAND /bin/mkdir -p ${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/.libs/
522+
COMMAND /bin/cp ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/.libs/libdispatch.so ${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/.libs/libdispatch.so
523+
COMMAND /usr/bin/make distclean
524+
WORKING_DIRECTORY ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}
525+
COMMENT "Generating libdispatch.so"
526+
USES_TERMINAL
527+
)
528+
add_custom_target(needs-libdispatch
529+
DEPENDS "${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/.libs/libdispatch.so"
530+
)
531+
endif()
532+
511533
include_directories(AFTER ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
512534

513535
add_library(dispatch SHARED IMPORTED)

0 commit comments

Comments
 (0)