Skip to content

Commit 5c75a5c

Browse files
committed
build: port to new Swift support
This ports the foundation build to use the new builtin Swift support in CMake. It allows for a significant cleanup of the build rules.
1 parent 329d35b commit 5c75a5c

File tree

8 files changed

+487
-812
lines changed

8 files changed

+487
-812
lines changed

CMakeLists.txt

Lines changed: 27 additions & 570 deletions
Large diffs are not rendered by default.

CoreFoundation/CMakeLists.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11

22
cmake_minimum_required(VERSION 3.4.3)
3-
list(APPEND CMAKE_MODULE_PATH
4-
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
3+
4+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
5+
6+
if(POLICY CMP0074)
7+
cmake_policy(SET CMP0074 NEW)
8+
endif()
59

610
project(CoreFoundation
711
VERSION
@@ -422,6 +426,9 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
422426
PRIVATE
423427
${LIBXML2_INCLUDE_DIR})
424428
find_package(CURL REQUIRED)
429+
target_include_directories(CoreFoundation
430+
PRIVATE
431+
${CURL_INCLUDE_DIRS})
425432
target_include_directories(CFURLSessionInterface
426433
PRIVATE
427434
${CURL_INCLUDE_DIRS})
@@ -586,7 +593,7 @@ endif()
586593

587594
install(TARGETS
588595
CoreFoundation
589-
CFURLSessionInterface
596+
CFURLSessionInterface
590597
DESTINATION
591598
"${CMAKE_INSTALL_FULL_LIBDIR}")
592599
install(DIRECTORY

Foundation/CMakeLists.txt

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

0 commit comments

Comments
 (0)