Skip to content

Commit be47984

Browse files
committed
build: honour BUILD_SHARED_LIBS
This is needed for proper shared linkage to the BlocksRuntime (e.g. when building SourceKit). We now build BlocksRuntime shared or static as requested.
1 parent 6162a1d commit be47984

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

CMakeLists.txt

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,12 @@ if(ENABLE_SWIFT)
7474

7575
set(INSTALL_TARGET_DIR "${INSTALL_LIBDIR}/swift/${SWIFT_OS}" CACHE PATH "Path where the libraries will be installed")
7676
set(INSTALL_DISPATCH_HEADERS_DIR "${INSTALL_LIBDIR}/swift/dispatch" CACHE PATH "Path where the headers will be installed for libdispatch")
77-
set(INSTALL_BLOCK_HEADERS_DIR "${INSTALL_LIBDIR}/swift/Block" CACHE PATH "Path where the headers will be installed for the blocks runtime")
7877
set(INSTALL_OS_HEADERS_DIR "${INSTALL_LIBDIR}/swift/os" CACHE PATH "Path where the os/ headers will be installed")
7978
endif()
8079

8180
if(NOT ENABLE_SWIFT)
8281
set(INSTALL_TARGET_DIR "${INSTALL_LIBDIR}" CACHE PATH "Path where the libraries will be installed")
8382
set(INSTALL_DISPATCH_HEADERS_DIR "include/dispatch" CACHE PATH "Path where the headers will be installed")
84-
set(INSTALL_BLOCK_HEADERS_DIR "include" CACHE PATH "Path where the headers will be installed for the blocks runtime")
8583
set(INSTALL_OS_HEADERS_DIR "include/os" CACHE PATH "Path where the headers will be installed")
8684
endif()
8785

@@ -132,35 +130,43 @@ endif()
132130

133131
option(INSTALL_PRIVATE_HEADERS "installs private headers in the same location as the public ones" OFF)
134132

135-
find_package(BlocksRuntime QUIET)
136-
if(NOT BlocksRuntime_FOUND)
133+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
137134
set(BlocksRuntime_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/src/BlocksRuntime)
138135

139136
add_library(BlocksRuntime
140-
STATIC
141-
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/data.c
142-
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
137+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/data.c
138+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
143139
set_target_properties(BlocksRuntime
144140
PROPERTIES
145141
POSITION_INDEPENDENT_CODE TRUE)
146142
if(HAVE_OBJC AND CMAKE_DL_LIBS)
147-
set_target_properties(BlocksRuntime
148-
PROPERTIES
149-
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
143+
target_link_libraries(BlocksRuntime
144+
PUBLIC
145+
${CMAKE_DL_LIBS})
150146
endif()
151147

152148
add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime)
153149

150+
if(ENABLE_SWIFT)
151+
set(LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR ${SWIFT_LIBDIR}/swift/Block)
152+
else()
153+
set(LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR ${CMAKE_INSTALL_INCLUDEDIR})
154+
endif()
155+
154156
install(FILES
155157
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/Block.h
156158
DESTINATION
157-
"${INSTALL_BLOCK_HEADERS_DIR}")
159+
${LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR})
158160
if(INSTALL_PRIVATE_HEADERS)
159161
install(FILES
160162
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/Block_private.h
161163
DESTINATION
162-
"${INSTALL_BLOCK_HEADERS_DIR}")
164+
${LIBDISPATCH_BLOCKSRUNTIME_HEADER_DIR})
163165
endif()
166+
install(TARGETS
167+
BlocksRuntime
168+
DESTINATION
169+
${INSTALL_TARGET_DIR})
164170
endif()
165171

166172
check_symbol_exists(__GNU_LIBRARY__ "features.h" _GNU_SOURCE)

dispatch/generic/module.modulemap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ module Dispatch {
22
requires blocks
33
export *
44
link "dispatch"
5+
link "BlocksRuntime"
56
}
67

78
module DispatchIntrospection [system] [extern_c] {

0 commit comments

Comments
 (0)