Skip to content

Commit de1fba8

Browse files
committed
build: migrate swift to CMake 3.15.1
This migrates Foundation to CMake 3.15.1 and uses the new export targets from libdispatch to enable simpler builds with better dependency tracking.
1 parent dcfebec commit de1fba8

File tree

10 files changed

+504
-947
lines changed

10 files changed

+504
-947
lines changed

CMakeLists.txt

Lines changed: 8 additions & 663 deletions
Large diffs are not rendered by default.

CoreFoundation/CMakeLists.txt

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ endif()
2121
set(CMAKE_POSITION_INDEPENDENT_CODE YES)
2222

2323
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
24-
set(THREADS_PREFER_PTHREAD_FLAG ON)
24+
set(THREADS_PREFER_PTHREAD_FLAG OFF)
2525
find_package(Threads)
2626

2727
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
@@ -33,8 +33,6 @@ endif()
3333
include(GNUInstallDirs)
3434
include(CoreFoundationAddFramework)
3535

36-
option(CF_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source")
37-
option(CF_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build")
3836
option(CF_DEPLOYMENT_SWIFT "Build for swift" NO)
3937

4038
if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
@@ -383,14 +381,14 @@ target_include_directories(CoreFoundation
383381
PRIVATE
384382
${PROJECT_SOURCE_DIR}
385383
${ICU_INCLUDE_DIR})
386-
target_link_libraries(CoreFoundation
387-
PRIVATE
388-
Threads::Threads
389-
${CMAKE_DL_LIBS})
384+
target_link_libraries(CoreFoundation PRIVATE
385+
Threads::Threads
386+
${CMAKE_DL_LIBS}
387+
BlocksRuntime
388+
dispatch)
390389
if(CMAKE_SYSTEM_NAME STREQUAL Android)
391-
target_link_libraries(CoreFoundation
392-
PRIVATE
393-
log)
390+
target_link_libraries(CoreFoundation PRIVATE
391+
log)
394392
endif()
395393

396394
add_framework(CFURLSessionInterface
@@ -411,12 +409,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows)
411409
PRIVATE
412410
CURL_STATICLIB)
413411
endif()
414-
target_include_directories(CFURLSessionInterface
415-
PRIVATE
416-
${CURL_INCLUDE_DIRS})
417-
target_link_libraries(CFURLSessionInterface
418-
PRIVATE
419-
${CURL_LIBRARIES})
412+
target_include_directories(CFURLSessionInterface PRIVATE
413+
${CURL_INCLUDE_DIRS})
414+
target_link_libraries(CFURLSessionInterface PRIVATE
415+
${CURL_LIBRARIES})
420416

421417
add_framework(CFXMLInterface
422418
${FRAMEWORK_LIBRARY_TYPE}
@@ -431,12 +427,10 @@ add_framework(CFXMLInterface
431427
SOURCES
432428
Parsing.subproj/CFXMLInterface.c)
433429
add_dependencies(CFXMLInterface CoreFoundation)
434-
target_include_directories(CFXMLInterface
435-
PRIVATE
436-
${LIBXML2_INCLUDE_DIR})
437-
target_link_libraries(CFXMLInterface
438-
PRIVATE
439-
${LIBXML2_LIBRARIES})
430+
target_include_directories(CFXMLInterface PRIVATE
431+
${LIBXML2_INCLUDE_DIR})
432+
target_link_libraries(CFXMLInterface PRIVATE
433+
${LIBXML2_LIBRARIES})
440434

441435
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
442436
add_library(CoreFoundationResources OBJECT
@@ -456,30 +450,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows)
456450
add_dependencies(CoreFoundation CoreFoundationWindowsTimeZonesPLists)
457451
endif()
458452

459-
target_include_directories(CoreFoundation
460-
PRIVATE
461-
${CF_PATH_TO_LIBDISPATCH_SOURCE}
462-
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
463-
target_include_directories(CFURLSessionInterface
464-
PRIVATE
465-
${CF_PATH_TO_LIBDISPATCH_SOURCE}
466-
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
467-
target_include_directories(CFXMLInterface
468-
PRIVATE
469-
${CF_PATH_TO_LIBDISPATCH_SOURCE}
470-
${CF_PATH_TO_LIBDISPATCH_BUILD}/tests)
471-
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
472-
target_include_directories(CoreFoundation
473-
SYSTEM PRIVATE
474-
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
475-
target_include_directories(CFURLSessionInterface
476-
SYSTEM PRIVATE
477-
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
478-
target_include_directories(CFXMLInterface
479-
SYSTEM PRIVATE
480-
${CF_PATH_TO_LIBDISPATCH_SOURCE}/src/BlocksRuntime)
481-
endif()
482-
483453
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
484454
target_link_libraries(CoreFoundation
485455
PRIVATE

Foundation/CMakeLists.txt

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
2+
add_library(Foundation
3+
AffineTransform.swift
4+
Array.swift
5+
Boxing.swift
6+
Bridging.swift
7+
Bundle.swift
8+
ByteCountFormatter.swift
9+
Calendar.swift
10+
CGFloat.swift
11+
CharacterSet.swift
12+
Codable.swift
13+
Collections+DataProtocol.swift
14+
ContiguousBytes.swift
15+
Data.swift
16+
DataProtocol.swift
17+
Date.swift
18+
DateComponents.swift
19+
DateComponentsFormatter.swift
20+
DateFormatter.swift
21+
DateInterval.swift
22+
DateIntervalFormatter.swift
23+
Decimal.swift
24+
Dictionary.swift
25+
DispatchData+DataProtocol.swift
26+
EnergyFormatter.swift
27+
ExtraStringAPIs.swift
28+
FileHandle.swift
29+
FileManager.swift
30+
FileManager+POSIX.swift
31+
FileManager+Win32.swift
32+
FileManager_XDG.swift
33+
Formatter.swift
34+
FoundationErrors.swift
35+
Host.swift
36+
IndexPath.swift
37+
IndexSet.swift
38+
ISO8601DateFormatter.swift
39+
JSONEncoder.swift
40+
JSONSerialization.swift
41+
LengthFormatter.swift
42+
Locale.swift
43+
MassFormatter.swift
44+
Measurement.swift
45+
MeasurementFormatter.swift
46+
Notification.swift
47+
NotificationQueue.swift
48+
NSArray.swift
49+
NSAttributedString.swift
50+
NSCache.swift
51+
NSCalendar.swift
52+
NSCFArray.swift
53+
NSCFBoolean.swift
54+
NSCFCharacterSet.swift
55+
NSCFDictionary.swift
56+
NSCFSet.swift
57+
NSCFString.swift
58+
NSCharacterSet.swift
59+
NSCoder.swift
60+
NSComparisonPredicate.swift
61+
NSCompoundPredicate.swift
62+
NSConcreteValue.swift
63+
NSData+DataProtocol.swift
64+
NSData.swift
65+
NSDate.swift
66+
NSDecimalNumber.swift
67+
NSDictionary.swift
68+
NSEnumerator.swift
69+
NSError.swift
70+
NSExpression.swift
71+
NSGeometry.swift
72+
NSIndexPath.swift
73+
NSIndexSet.swift
74+
NSKeyedArchiver.swift
75+
NSKeyedArchiverHelpers.swift
76+
NSKeyedCoderOldStyleArray.swift
77+
NSKeyedUnarchiver.swift
78+
NSLocale.swift
79+
NSLock.swift
80+
NSLog.swift
81+
NSMeasurement.swift
82+
NSNotification.swift
83+
NSNull.swift
84+
NSNumber.swift
85+
NSObjCRuntime.swift
86+
NSObject.swift
87+
NSOrderedSet.swift
88+
NSPathUtilities.swift
89+
NSPersonNameComponents.swift
90+
NSPlatform.swift
91+
NSPredicate.swift
92+
NSRange.swift
93+
NSRegularExpression.swift
94+
NSSet.swift
95+
NSSortDescriptor.swift
96+
NSSpecialValue.swift
97+
NSString.swift
98+
NSStringAPI.swift
99+
NSSwiftRuntime.swift
100+
NSTextCheckingResult.swift
101+
NSTimeZone.swift
102+
NSURL.swift
103+
NSURLError.swift
104+
NSUUID.swift
105+
NSValue.swift
106+
NumberFormatter.swift
107+
Operation.swift
108+
PersonNameComponents.swift
109+
PersonNameComponentsFormatter.swift
110+
Pointers+DataProtocol.swift
111+
Port.swift
112+
PortMessage.swift
113+
Process.swift
114+
ProcessInfo.swift
115+
Progress.swift
116+
ProgressFraction.swift
117+
PropertyListEncoder.swift
118+
PropertyListSerialization.swift
119+
ReferenceConvertible.swift
120+
RunLoop.swift
121+
Scanner.swift
122+
ScannerAPI.swift
123+
Set.swift
124+
Stream.swift
125+
String.swift
126+
StringEncodings.swift
127+
Thread.swift
128+
Timer.swift
129+
TimeZone.swift
130+
Unit.swift
131+
URL.swift
132+
URLComponents.swift
133+
UserDefaults.swift
134+
UUID.swift)
135+
target_compile_definitions(Foundation PRIVATE
136+
DEPLOYMENT_RUNTIME_SWIFT)
137+
target_compile_options(Foundation PUBLIC
138+
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
139+
target_compile_options(Foundation PRIVATE
140+
"SHELL:-Xcc -I${ICU_INCLUDE_DIR}")
141+
if(ENABLE_TESTING)
142+
target_compile_options(Foundation PRIVATE
143+
-enable-testing)
144+
endif()
145+
target_link_libraries(Foundation PRIVATE
146+
${ICU_UC_LIBRARY}
147+
${ICU_I18N_LIBRARY}
148+
CoreFoundation
149+
uuid)
150+
target_link_libraries(Foundation PUBLIC
151+
swiftDispatch)
152+
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
153+
target_link_libraries(Foundation PRIVATE
154+
CoreFoundationResources)
155+
target_link_libraries(Foundation PRIVATE
156+
Ole32
157+
Shell32
158+
pathcch)
159+
endif()
160+
set_target_properties(Foundation PROPERTIES
161+
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
162+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)
163+
164+
165+
add_library(FoundationNetworking
166+
Boxing.swift
167+
NSURLRequest.swift
168+
HTTPCookie.swift
169+
HTTPCookieStorage.swift
170+
URLAuthenticationChallenge.swift
171+
URLCache.swift
172+
URLCredential.swift
173+
URLCredentialStorage.swift
174+
URLProtectionSpace.swift
175+
URLProtocol.swift
176+
URLRequest.swift
177+
URLResponse.swift
178+
URLSession/BodySource.swift
179+
URLSession/Configuration.swift
180+
URLSession/http/HTTPMessage.swift
181+
URLSession/http/HTTPURLProtocol.swift
182+
URLSession/libcurl/EasyHandle.swift
183+
URLSession/libcurl/libcurlHelpers.swift
184+
URLSession/libcurl/MultiHandle.swift
185+
URLSession/Message.swift
186+
URLSession/NativeProtocol.swift
187+
URLSession/NetworkingSpecific.swift
188+
URLSession/ftp/FTPURLProtocol.swift
189+
URLSession/TaskRegistry.swift
190+
URLSession/TransferState.swift
191+
URLSession/URLSession.swift
192+
URLSession/URLSessionConfiguration.swift
193+
URLSession/URLSessionDelegate.swift
194+
URLSession/URLSessionTask.swift)
195+
target_compile_definitions(FoundationNetworking PRIVATE
196+
DEPLOYMENT_RUNTIME_SWIFT
197+
NS_BUILDING_FOUNDATION_NETWORKING)
198+
target_compile_options(FoundationNetworking PUBLIC
199+
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
200+
if(ENABLE_TESTING)
201+
target_compile_options(FoundationNetworking PRIVATE
202+
-enable-testing)
203+
endif()
204+
target_link_libraries(FoundationNetworking PRIVATE
205+
${CURL_LIBRARIES}
206+
${ZLIB_LIBRARIES}
207+
Foundation
208+
CFURLSessionInterface)
209+
set_target_properties(FoundationNetworking PROPERTIES
210+
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
211+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)
212+
213+
214+
add_library(FoundationXML
215+
XMLDocument.swift
216+
XMLDTD.swift
217+
XMLDTDNode.swift
218+
XMLElement.swift
219+
XMLNode.swift
220+
XMLParser.swift)
221+
target_compile_definitions(FoundationXML PRIVATE
222+
DEPLOYMENT_RUNTIME_SWIFT)
223+
target_compile_options(FoundationXML PUBLIC
224+
"SHELL:-Xcc -F${CMAKE_BINARY_DIR}")
225+
if(ENABLE_TESTING)
226+
target_compile_options(FoundationXML PRIVATE
227+
-enable-testing)
228+
endif()
229+
target_link_libraries(FoundationXML PRIVATE
230+
${LIBXML2_LIBRARIES}
231+
Foundation
232+
CFXMLInterface)
233+
set_target_properties(FoundationXML PROPERTIES
234+
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
235+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)
236+
237+
get_swift_host_arch(swift_arch)
238+
install(TARGETS Foundation FoundationNetworking FoundationXML
239+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
240+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
241+
RUNTIME DESTINATION bin)
242+
install(FILES
243+
${CMAKE_BINARY_DIR}/swift/Foundation.swiftdoc
244+
${CMAKE_BINARY_DIR}/swift/Foundation.swiftmodule
245+
${CMAKE_BINARY_DIR}/swift/FoundationNetworking.swiftdoc
246+
${CMAKE_BINARY_DIR}/swift/FoundationNetworking.swiftmodule
247+
${CMAKE_BINARY_DIR}/swift/FoundationXML.swiftdoc
248+
${CMAKE_BINARY_DIR}/swift/FoundationXML.swiftmodule
249+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch})

0 commit comments

Comments
 (0)