Skip to content

Commit 7159f6a

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 e60daaa commit 7159f6a

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
@@ -301,8 +301,14 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "")
301301
endif()
302302
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
303303
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
304+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
305+
if(EXISTS ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
306+
set(SWIFT_BUILD_SOURCEKIT_default TRUE)
307+
else()
308+
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
309+
endif()
304310
else()
305-
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
311+
set(SWIFT_BUILD_SOURCEKIT_default FALSE)
306312
endif()
307313
option(SWIFT_BUILD_SOURCEKIT
308314
"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
520+
COMMAND /usr/bin/make
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)