Skip to content

Commit f49eafb

Browse files
compnerdrokhinip
authored andcommitted
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. Signed-off-by: Kim Topley <[email protected]>
1 parent 68c3553 commit f49eafb

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

CMakeLists.txt

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ endif()
8787

8888
option(ENABLE_DTRACE "enable dtrace support" "")
8989

90+
# NOTE(abdulras) this is the CMake supported way to control whether we generate
91+
# shared or static libraries. This impacts the behaviour of `add_library` in
92+
# what type of library it generates.
9093
option(BUILD_SHARED_LIBS "build shared libraries" ON)
9194

9295
option(ENABLE_TESTING "build libdispatch tests" ON)
@@ -131,21 +134,22 @@ endif()
131134

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

134-
find_package(BlocksRuntime QUIET)
135-
if(NOT BlocksRuntime_FOUND)
137+
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
136138
set(BlocksRuntime_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/src/BlocksRuntime)
137139

140+
# NOTE(compnerd) use the `BUILD_SHARED_LIBS` variable to determine what type
141+
# of library to build. If it is true, we will generate shared libraries,
142+
# otherwise we will generate static libraries.
138143
add_library(BlocksRuntime
139-
STATIC
140-
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/data.c
141-
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
144+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/data.c
145+
${PROJECT_SOURCE_DIR}/src/BlocksRuntime/runtime.c)
142146
set_target_properties(BlocksRuntime
143147
PROPERTIES
144148
POSITION_INDEPENDENT_CODE TRUE)
145149
if(HAVE_OBJC AND CMAKE_DL_LIBS)
146-
set_target_properties(BlocksRuntime
147-
PROPERTIES
148-
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
150+
target_link_libraries(BlocksRuntime
151+
PUBLIC
152+
${CMAKE_DL_LIBS})
149153
endif()
150154

151155
add_library(BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime)
@@ -160,6 +164,10 @@ if(NOT BlocksRuntime_FOUND)
160164
DESTINATION
161165
"${INSTALL_BLOCK_HEADERS_DIR}")
162166
endif()
167+
install(TARGETS
168+
BlocksRuntime
169+
DESTINATION
170+
${INSTALL_TARGET_DIR})
163171
endif()
164172

165173
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)