Skip to content

Commit 6ab8389

Browse files
authored
Merge pull request #19674 from compnerd/shared-blocks-are-back
SourceKit: use shared BlocksRuntime
2 parents b08a3b7 + 3469797 commit 6ab8389

File tree

2 files changed

+49
-66
lines changed

2 files changed

+49
-66
lines changed

tools/SourceKit/CMakeLists.txt

Lines changed: 46 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -97,82 +97,74 @@ include_directories(BEFORE
9797

9898
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
9999
set(SOURCEKIT_DEFAULT_TARGET_SDK "LINUX")
100+
set(SOURCEKIT_NEED_EXPLICIT_LIBDISPATCH TRUE)
101+
100102
if(SWIFT_BUILD_SOURCEKIT)
101-
if(SWIFT_BUILD_STDLIB)
102-
set(SOURCEKIT_LIBDISPATCH_ENABLE_SWIFT YES)
103-
else()
104-
set(SOURCEKIT_LIBDISPATCH_ENABLE_SWIFT NO)
105-
endif()
106103

107104
include(ExternalProject)
108105
ExternalProject_Add(libdispatch
109106
SOURCE_DIR
110107
"${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}"
111-
BINARY_DIR
112-
"${SWIFT_PATH_TO_LIBDISPATCH_BUILD}"
113108
CMAKE_ARGS
114-
-DCMAKE_BUILD_TYPE=${LIBDISPATCH_CMAKE_BUILD_TYPE}
115-
-DCMAKE_C_COMPILER=${PATH_TO_CLANG_BUILD}/bin/clang
116-
-DCMAKE_CXX_COMPILER=${PATH_TO_CLANG_BUILD}/bin/clang++
109+
-DCMAKE_AR=${CMAKE_AR}
110+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
111+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
112+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
113+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
114+
-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
117115
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
118-
-DCMAKE_SWIFT_COMPILER=$<TARGET_FILE:swift>c
119116
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
120-
-DENABLE_SWIFT=${SOURCEKIT_LIBDISPATCH_ENABLE_SWIFT}
117+
-DCMAKE_LINKER=${CMAKE_LINKER}
118+
-DCMAKE_RANLIB=${CMAKE_RANLIB}
119+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
120+
-DENABLE_SWIFT=NO
121+
-DENABLE_TESTING=NO
122+
INSTALL_COMMAND
123+
# NOTE(compnerd) provide a custom install command to
124+
# ensure that we strip out the DESTDIR environment
125+
# from the sub-build
126+
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install
121127
BUILD_BYPRODUCTS
122-
${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
123-
${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/${CMAKE_STATIC_LIBRARY_PREFIX}BlocksRuntime${CMAKE_STATIC_LIBRARY_SUFFIX}
124-
STEP_TARGETS
125-
configure
128+
<INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
129+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
130+
<INSTALL_DIR>/lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
131+
<INSTALL_DIR>/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
126132
BUILD_ALWAYS
127133
1)
128134

135+
ExternalProject_Get_Property(libdispatch install_dir)
136+
129137
# CMake does not like the addition of INTERFACE_INCLUDE_DIRECTORIES without
130138
# the directory existing. Just create the location which will be populated
131139
# during the installation.
132-
ExternalProject_Get_Property(libdispatch install_dir)
133140
file(MAKE_DIRECTORY ${install_dir}/include)
134141

135-
# TODO(compnerd) this should be taken care of by the
136-
# INTERFACE_INCLUDE_DIRECTORIES below
142+
add_library(dispatch SHARED IMPORTED)
143+
set_target_properties(dispatch
144+
PROPERTIES
145+
IMPORTED_LOCATION
146+
${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
147+
IMPORTED_IMPLIB
148+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}dispatch${CMAKE_IMPORT_LIBRARY_SUFFIX}
149+
INTERFACE_INCLUDE_DIRECTORIES
150+
${install_dir}/include)
151+
152+
add_library(BlocksRuntime SHARED IMPORTED)
153+
set_target_properties(BlocksRuntime
154+
PROPERTIES
155+
IMPORTED_LOCATION
156+
${install_dir}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
157+
IMPORTED_IMPLIB
158+
${install_dir}/lib/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
159+
INTERFACE_INCLUDE_DIRECTORIES
160+
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
161+
162+
# FIXME(compnerd) this should be taken care of by the
163+
# INTERFACE_INCLUDE_DIRECTORIES above
137164
include_directories(AFTER
138165
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime
139166
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE})
140-
141-
if(SWIFT_BUILD_STDLIB)
142-
add_dependencies(libdispatch
143-
swift
144-
copy_shim_headers
145-
swiftCore-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}
146-
swiftSwiftOnoneSupport-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}
147-
swiftCore-swiftmodule-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}
148-
swiftSwiftOnoneSupport-swiftmodule-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH})
149-
endif()
150167
endif()
151-
152-
ExternalProject_Get_Property(libdispatch install_dir)
153-
add_library(dispatch SHARED IMPORTED)
154-
set_target_properties(dispatch
155-
PROPERTIES
156-
IMPORTED_LOCATION
157-
${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/src/${CMAKE_SHARED_LIBRARY_PREFIX}dispatch${CMAKE_SHARED_LIBRARY_SUFFIX}
158-
INTERFACE_INCLUDE_DIRECTORIES
159-
${install_dir}/include)
160-
if(SWIFT_BUILD_STDLIB)
161-
set_target_properties(dispatch
162-
PROPERTIES
163-
IMPORTED_LINK_INTERFACE_LIBRARIES
164-
swiftCore-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH})
165-
endif()
166-
167-
add_library(BlocksRuntime STATIC IMPORTED)
168-
set_target_properties(BlocksRuntime
169-
PROPERTIES
170-
IMPORTED_LOCATION
171-
${SWIFT_PATH_TO_LIBDISPATCH_BUILD}/${CMAKE_STATIC_LIBRARY_PREFIX}BlocksRuntime${CMAKE_STATIC_LIBRARY_SUFFIX}
172-
INTERFACE_INCLUDE_DIRECTORIES
173-
${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
174-
175-
set(SOURCEKIT_NEED_EXPLICIT_LIBDISPATCH TRUE)
176168
endif()
177169

178170
add_subdirectory(include)

tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,10 @@ function(add_sourcekit_default_compiler_flags target)
6666
ANALYZE_CODE_COVERAGE "${analyze_code_coverage}"
6767
RESULT_VAR_NAME link_flags)
6868

69-
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
70-
# TODO(compnerd) this should really use target_compile_options but the use
71-
# of keyword and non-keyword flags prevents this
69+
# TODO(compnerd) this should really use target_compile_options but the use
70+
# of keyword and non-keyword flags prevents this
71+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
7272
list(APPEND c_compile_flags "-fblocks")
73-
# TODO(compnerd) this should really use target_link_libraries but the use of
74-
# explicit_llvm_config using target_link_libraries without keywords on
75-
# executables causes conflicts here
76-
list(APPEND link_flags "-L${SWIFT_PATH_TO_LIBDISPATCH_BUILD}")
77-
list(APPEND link_flags "-lBlocksRuntime")
78-
# NOTE(compnerd) since we do not use target_link_libraries, we do not get
79-
# the implicit dependency tracking. Add an explicit dependency until we can
80-
# use target_link_libraries.
81-
add_dependencies(${target} BlocksRuntime)
8273
endif()
8374

8475
# Convert variables to space-separated strings.

0 commit comments

Comments
 (0)