Skip to content

Commit d4a52b8

Browse files
committed
[sourcekit] Avoid duplicating implementation of InProc and XPC service when possible
When installing both InProc and XPC versions of sourcekitd, dynamically link the XPC service to the InProc version. This lets us install both frameworks without wasting the disk space from having another copy of the swift frontend statically linked.
1 parent 6701a33 commit d4a52b8

File tree

6 files changed

+94
-8
lines changed

6 files changed

+94
-8
lines changed

tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -363,11 +363,10 @@ macro(add_sourcekit_xpc_service name framework_target)
363363

364364
add_dependencies(${framework_target} ${name})
365365

366-
# This is necessary to avoid having an rpath with an absolute build directory.
367-
# Without this, such an rpath is added during build time and preserved at install time.
366+
# Add rpath for sourcekitdInProc
368367
set_target_properties(${name} PROPERTIES
369368
BUILD_WITH_INSTALL_RPATH On
370-
INSTALL_RPATH "@loader_path/../lib"
369+
INSTALL_RPATH "@loader_path/../../../../../../.."
371370
INSTALL_NAME_DIR "@rpath")
372371

373372
if (SOURCEKIT_DEPLOYMENT_OS MATCHES "^macosx")

tools/SourceKit/tools/sourcekitd/bin/InProc/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
set(EXPORTED_SYMBOL_FILE "${SOURCEKITD_SOURCE_DIR}/bin/sourcekitd.exports")
1+
set(EXPORTED_SYMBOL_FILE "${CMAKE_CURRENT_SOURCE_DIR}/sourcekitdInProc.exports")
22

33
option(SOURCEKITD_BUILD_STATIC_INPROC
44
"Build sourcekitdInProc as a static library (in addition to a shared one)" OFF)
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
sourcekitd_cancel_request
2+
sourcekitd_initialize
3+
sourcekitd_request_array_create
4+
sourcekitd_request_array_set_int64
5+
sourcekitd_request_array_set_string
6+
sourcekitd_request_array_set_stringbuf
7+
sourcekitd_request_array_set_uid
8+
sourcekitd_request_array_set_value
9+
sourcekitd_request_create_from_yaml
10+
sourcekitd_request_description_copy
11+
sourcekitd_request_description_dump
12+
sourcekitd_request_dictionary_create
13+
sourcekitd_request_dictionary_set_int64
14+
sourcekitd_request_dictionary_set_string
15+
sourcekitd_request_dictionary_set_stringbuf
16+
sourcekitd_request_dictionary_set_uid
17+
sourcekitd_request_dictionary_set_value
18+
sourcekitd_request_int64_create
19+
sourcekitd_request_retain
20+
sourcekitd_request_release
21+
sourcekitd_request_string_create
22+
sourcekitd_request_uid_create
23+
sourcekitd_response_description_copy
24+
sourcekitd_response_description_dump
25+
sourcekitd_response_description_dump_filedesc
26+
sourcekitd_response_dispose
27+
sourcekitd_response_error_get_description
28+
sourcekitd_response_error_get_kind
29+
sourcekitd_response_get_value
30+
sourcekitd_response_is_error
31+
sourcekitd_send_request
32+
sourcekitd_send_request_sync
33+
sourcekitd_set_interrupted_connection_handler
34+
sourcekitd_set_notification_handler
35+
sourcekitd_set_uid_handler
36+
sourcekitd_set_uid_handlers
37+
sourcekitd_shutdown
38+
sourcekitd_uid_get_from_buf
39+
sourcekitd_uid_get_from_cstr
40+
sourcekitd_uid_get_length
41+
sourcekitd_uid_get_string_ptr
42+
sourcekitd_variant_array_apply
43+
sourcekitd_variant_array_apply_f
44+
sourcekitd_variant_array_get_bool
45+
sourcekitd_variant_array_get_count
46+
sourcekitd_variant_array_get_int64
47+
sourcekitd_variant_array_get_string
48+
sourcekitd_variant_array_get_uid
49+
sourcekitd_variant_array_get_value
50+
sourcekitd_variant_bool_get_value
51+
sourcekitd_variant_description_copy
52+
sourcekitd_variant_description_dump
53+
sourcekitd_variant_description_dump_filedesc
54+
sourcekitd_variant_dictionary_apply
55+
sourcekitd_variant_dictionary_apply_f
56+
sourcekitd_variant_dictionary_get_bool
57+
sourcekitd_variant_dictionary_get_int64
58+
sourcekitd_variant_dictionary_get_string
59+
sourcekitd_variant_dictionary_get_value
60+
sourcekitd_variant_dictionary_get_uid
61+
sourcekitd_variant_get_type
62+
sourcekitd_variant_json_description_copy
63+
sourcekitd_variant_string_get_length
64+
sourcekitd_variant_string_get_ptr
65+
sourcekitd_variant_data_get_size
66+
sourcekitd_variant_data_get_ptr
67+
sourcekitd_variant_int64_get_value
68+
sourcekitd_variant_uid_get_value
69+
_ZN10sourcekitd13enableLoggingEN4llvm9StringRefE
70+
_ZN10sourcekitd13handleRequestEPvNSt3__18functionIFvS0_EEE
71+
_ZN10sourcekitd17initializeServiceEN4llvm9StringRefES1_NSt3__18functionIFvPvEEE
72+
_ZN10sourcekitd24createErrorRequestFailedEN4llvm9StringRefE
73+
_ZN9SourceKit6Logger12LoggingLevelE
74+
_ZN9SourceKit6LoggerD1Ev
75+
_ZN9SourceKit6UIdent6setTagEPv
76+
_ZN9SourceKit6UIdentC1EN4llvm9StringRefE
77+
_ZN9SourceKit9WorkQueue4Impl12dispatchSyncEPvRKNS0_12DispatchDataE
78+
_ZN9SourceKit9WorkQueue4Impl15dispatchBarrierEPvRKNS0_12DispatchDataE
79+
_ZN9SourceKit9WorkQueue4Impl6createENS0_9DequeuingENS0_8PriorityEN4llvm9StringRefE
80+
_ZN9SourceKit9WorkQueue4Impl7releaseEPv
81+
_ZNK9SourceKit6UIdent5c_strEv
82+
_ZNK9SourceKit6UIdent6getTagEv

tools/SourceKit/tools/sourcekitd/bin/XPC/Client/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ set(public_headers
22
${SOURCEKITD_SOURCE_DIR}/include/sourcekitd/sourcekitd.h
33
)
44

5-
set(EXPORTED_SYMBOL_FILE "${SOURCEKITD_SOURCE_DIR}/bin/sourcekitd.exports")
5+
set(EXPORTED_SYMBOL_FILE "${CMAKE_CURRENT_SOURCE_DIR}/sourcekitd.exports")
66

77
# FIXME: If you delete sourcekitd.framework, the soft links inside it need
88
# a CMake reconfigure in order for them to be created.

tools/SourceKit/tools/sourcekitd/bin/XPC/Service/CMakeLists.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@ if (BUILD_SOURCEKIT_XPC_SERVICE)
33
XPCService.cpp
44
LLVM_LINK_COMPONENTS support coverage
55
)
6-
target_link_libraries(SourceKitService PRIVATE
7-
SourceKitSwiftLang
8-
sourcekitdAPI)
6+
swift_is_installing_component(sourcekit-inproc SOURCEKIT_INSTALLING_INPROC)
7+
if(SOURCEKIT_INSTALLING_INPROC)
8+
target_link_libraries(SourceKitService PUBLIC sourcekitdInProc)
9+
else()
10+
target_link_libraries(SourceKitService PRIVATE
11+
SourceKitSwiftLang
12+
sourcekitdAPI)
13+
endif()
914
endif()
1015

1116
if (NOT SOURCEKIT_DEPLOYMENT_OS MATCHES "^macosx")

0 commit comments

Comments
 (0)