@@ -74,14 +74,12 @@ if(ENABLE_SWIFT)
74
74
75
75
set (INSTALL_TARGET_DIR "${INSTALL_LIBDIR} /swift/${SWIFT_OS} " CACHE PATH "Path where the libraries will be installed" )
76
76
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" )
78
77
set (INSTALL_OS_HEADERS_DIR "${INSTALL_LIBDIR} /swift/os" CACHE PATH "Path where the os/ headers will be installed" )
79
78
endif ()
80
79
81
80
if (NOT ENABLE_SWIFT )
82
81
set (INSTALL_TARGET_DIR "${INSTALL_LIBDIR} " CACHE PATH "Path where the libraries will be installed" )
83
82
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" )
85
83
set (INSTALL_OS_HEADERS_DIR "include/os" CACHE PATH "Path where the headers will be installed" )
86
84
endif ()
87
85
@@ -132,34 +130,82 @@ endif()
132
130
133
131
option (INSTALL_PRIVATE_HEADERS "installs private headers in the same location as the public ones" OFF )
134
132
135
- find_package (BlocksRuntime QUIET )
136
- if (NOT BlocksRuntime_FOUND )
133
+ if (NOT CMAKE_SYSTEM_NAME STREQUAL Darwin )
137
134
set (BlocksRuntime_INCLUDE_DIR ${PROJECT_SOURCE_DIR} /src/BlocksRuntime )
138
135
139
- add_library (BlocksRuntime
140
- STATIC
141
- ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/data.c
142
- ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/runtime.c )
143
- set_target_properties (BlocksRuntime
136
+ include (ExternalProject )
137
+ ExternalProject_Add (SharedBlocksRuntime
138
+ SOURCE_DIR
139
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime
140
+ CMAKE_ARGS
141
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
142
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
143
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
144
+ -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
145
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
146
+ -DBUILD_SHARED_LIBS=YES
147
+ BUILD_BYPRODUCTS
148
+ <BINARY_DIR>/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
149
+ <BINARY_DIR>/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
150
+ BUILD_ALWAYS
151
+ 1 )
152
+ ExternalProject_Add (StaticBlocksRuntime
153
+ SOURCE_DIR
154
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime
155
+ CMAKE_ARGS
156
+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
157
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
158
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
159
+ -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
160
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
161
+ -DBUILD_SHARED_LIBS=NO
162
+ BUILD_BYPRODUCTS
163
+ <BINARY_DIR>/${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
164
+ <BINARY_DIR>/${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX}
165
+ BUILD_ALWAYS
166
+ 1 )
167
+
168
+ ExternalProject_Get_Property (SharedBlocksRuntime binary_dir )
169
+ add_library (BlocksRuntime::BlocksRuntime SHARED IMPORTED )
170
+ set_target_properties (BlocksRuntime::BlocksRuntime
144
171
PROPERTIES
145
- POSITION_INDEPENDENT_CODE TRUE )
146
- if (HAVE_OBJC AND CMAKE_DL_LIBS )
147
- set_target_properties (BlocksRuntime
148
- PROPERTIES
149
- INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} )
150
- endif ()
151
-
152
- add_library (BlocksRuntime::BlocksRuntime ALIAS BlocksRuntime )
172
+ INTERFACE_INCLUDE_DIRECTORIES
173
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime
174
+ IMPORTED_LOCATION
175
+ ${binary_dir} /${CMAKE_SHARED_LIBRARY_PREFIX}BlocksRuntime${CMAKE_SHARED_LIBRARY_SUFFIX}
176
+ IMPORTED_IMPLIB
177
+ ${binary_dir} /${CMAKE_IMPORT_LIBRARY_PREFIX}BlocksRuntime${CMAKE_IMPORT_LIBRARY_SUFFIX} )
153
178
154
- install (FILES
155
- ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block.h
156
- DESTINATION
157
- "${INSTALL_BLOCK_HEADERS_DIR} " )
158
- if (INSTALL_PRIVATE_HEADERS )
179
+ if (ENABLE_SWIFT )
180
+ install (FILES
181
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block.h
182
+ DESTINATION
183
+ ${SWIFT_LIBDIR} /swift/Block )
184
+ if (INSTALL_PRIVATE_HEADERS )
185
+ install (FILES
186
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block_private.h
187
+ DESTINATION
188
+ ${SWIFT_LIBDIR} /swift/Block )
189
+ endif ()
190
+ install (TARGETS
191
+ BlocksRuntime::BlocksRuntime
192
+ DESTINATION
193
+ ${SWIFT_LIBDIR} /swift/${SWIFT_OS}/${SWIFT_HOST_ARCH} )
194
+ else ()
159
195
install (FILES
160
- ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block_private.h
196
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block.h
197
+ DESTINATION
198
+ ${CMAKE_INSTALL_INCLUDEDIR} )
199
+ if (INSTALL_PRIVATE_HEADERS )
200
+ install (FILES
201
+ ${PROJECT_SOURCE_DIR} /src/BlocksRuntime/Block_private.h
202
+ DESTINATION
203
+ ${CMAKE_INSTALL_INCLUDEDIR} )
204
+ endif ()
205
+ install (TARGETS
206
+ BlocksRuntime::BlocksRuntime
161
207
DESTINATION
162
- " ${INSTALL_BLOCK_HEADERS_DIR} " )
208
+ ${CMAKE_INSTALL_LIBDIR} )
163
209
endif ()
164
210
endif ()
165
211
0 commit comments