Skip to content

Commit 3f144c7

Browse files
authored
Merge pull request #1720 from compnerd/cmake-build
CMake based build
2 parents 5dcd88c + 941b171 commit 3f144c7

File tree

6 files changed

+329
-31
lines changed

6 files changed

+329
-31
lines changed

CMakeLists.txt

Lines changed: 59 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,17 @@ set(swift_optimization_flags)
4747
if(CMAKE_BUILD_TYPE MATCHES Release)
4848
set(swift_optimization_flags -O)
4949
endif()
50+
if(ENABLE_TESTING)
51+
set(swift_enable_testing -enable-testing)
52+
endif()
5053

5154
set(deployment_enable_libdispatch)
5255
set(libdispatch_cflags)
5356
set(libdispatch_ldflags)
5457
if(FOUNDATION_ENABLE_LIBDISPATCH)
5558
set(deployment_enable_libdispatch -DDEPLOYMENT_ENABLE_LIBDISPATCH)
5659
set(libdispatch_cflags -I;${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE};-I;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src/swift;-Xcc;-fblocks)
57-
set(libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch)
60+
set(libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD};-L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch)
5861
endif()
5962

6063
add_swift_library(Foundation
@@ -90,6 +93,7 @@ add_swift_library(Foundation
9093
Foundation/ExtraStringAPIs.swift
9194
Foundation/FileHandle.swift
9295
Foundation/FileManager.swift
96+
Foundation/FileManager_XDG.swift
9397
Foundation/Formatter.swift
9498
Foundation/FoundationErrors.swift
9599
Foundation/Host.swift
@@ -196,16 +200,14 @@ add_swift_library(Foundation
196200
Foundation/URLProtocol.swift
197201
Foundation/URLRequest.swift
198202
Foundation/URLResponse.swift
199-
# NOTE: must precede HTTPMessage.swift
203+
Foundation/URLSession/BodySource.swift
204+
Foundation/URLSession/Configuration.swift
200205
Foundation/URLSession/Message.swift
201206
Foundation/URLSession/http/HTTPMessage.swift
202207
Foundation/URLSession/http/HTTPURLProtocol.swift
203208
Foundation/URLSession/libcurl/EasyHandle.swift
204209
Foundation/URLSession/libcurl/libcurlHelpers.swift
205210
Foundation/URLSession/libcurl/MultiHandle.swift
206-
Foundation/URLSession/BodySource.swift
207-
Foundation/URLSession/Configuration.swift
208-
# Foundation/URLSession/Message.swift
209211
Foundation/URLSession/NativeProtocol.swift
210212
Foundation/URLSession/TaskRegistry.swift
211213
Foundation/URLSession/TransferState.swift
@@ -239,6 +241,7 @@ add_swift_library(Foundation
239241
${deployment_enable_libdispatch}
240242
-Fsystem;${install_dir}/System/Library/Frameworks
241243
${libdispatch_cflags}
244+
${swift_enable_testing}
242245
${swift_optimization_flags})
243246
add_dependencies(Foundation CoreFoundation)
244247

@@ -249,29 +252,48 @@ add_swift_executable(plutil
249252
${deployment_enable_libdispatch}
250253
LINK_FLAGS
251254
-L${CMAKE_CURRENT_BINARY_DIR}
255+
${libdispatch_ldflags}
252256
-lFoundation
253257
SWIFT_FLAGS
254258
-DDEPLOYMENT_RUNTIME_SWIFT
255259
${deployment_enable_libdispatch}
256260
-Fsystem;${install_dir}/System/Library/Frameworks
257261
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
258262
${libdispatch_cflags}
263+
${swift_enable_testing}
259264
${swift_optimization_flags})
260265
add_dependencies(plutil Foundation CoreFoundation)
261266

262267
if(ENABLE_TESTING)
268+
add_swift_executable(xdgTestHelper
269+
CFLAGS
270+
${deployment_enable_libdispatch}
271+
LINK_FLAGS
272+
${libdispatch_ldflags}
273+
-L${CMAKE_CURRENT_BINARY_DIR}
274+
-lFoundation
275+
SOURCES
276+
TestFoundation/xdgTestHelper/main.swift
277+
SWIFT_FLAGS
278+
-Fsystem;${install_dir}/System/Library/Frameworks
279+
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
280+
${libdispatch_cflags})
281+
add_dependencies(xdgTestHelper Foundation CoreFoundation)
282+
263283
add_swift_executable(TestFoundation
264284
SOURCES
265285
TestFoundation/main.swift
266286
TestFoundation/HTTPServer.swift
267287
Foundation/ProgressFraction.swift
288+
TestFoundation/Utilities.swift
268289
# Test Cases
269290
TestFoundation/TestAffineTransform.swift
270291
TestFoundation/TestBundle.swift
271292
TestFoundation/TestByteCountFormatter.swift
272293
TestFoundation/TestCalendar.swift
273294
TestFoundation/TestCharacterSet.swift
274295
TestFoundation/TestCodable.swift
296+
TestFoundation/TestDateComponents.swift
275297
TestFoundation/TestDateFormatter.swift
276298
TestFoundation/TestDate.swift
277299
TestFoundation/TestDecimal.swift
@@ -336,6 +358,7 @@ if(ENABLE_TESTING)
336358
TestFoundation/TestUnitConverter.swift
337359
TestFoundation/TestUnit.swift
338360
TestFoundation/TestURLCredential.swift
361+
TestFoundation/TestURLProtectionSpace.swift
339362
TestFoundation/TestURLProtocol.swift
340363
TestFoundation/TestURLRequest.swift
341364
TestFoundation/TestURLResponse.swift
@@ -352,6 +375,7 @@ if(ENABLE_TESTING)
352375
-L${CMAKE_CURRENT_BINARY_DIR}
353376
-lFoundation
354377
-L${FOUNDATION_PATH_TO_XCTEST_BUILD}
378+
-lXCTest
355379
RESOURCES
356380
${CMAKE_SOURCE_DIR}/TestFoundation/Resources/Info.plist
357381
${CMAKE_SOURCE_DIR}/TestFoundation/Resources/NSURLTestData.plist
@@ -375,29 +399,25 @@ if(ENABLE_TESTING)
375399
${CMAKE_SOURCE_DIR}/TestFoundation/Resources/NSKeyedUnarchiver-URLTest.plist
376400
${CMAKE_SOURCE_DIR}/TestFoundation/Resources/NSKeyedUnarchiver-UUIDTest.plist
377401
${CMAKE_SOURCE_DIR}/TestFoundation/Resources/NSKeyedUnarchiver-OrderedSetTest.plist
402+
${CMAKE_SOURCE_DIR}/TestFoundation/Resources/TestFileWithZeros.txt
378403
SWIFT_FLAGS
379404
${deployment_enable_libdispatch}
380405
-Fsystem;${install_dir}/System/Library/Frameworks
381406
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
382407
-I;${FOUNDATION_PATH_TO_XCTEST_BUILD}/swift
383408
${libdispatch_cflags}
384409
${swift_optimization_flags})
385-
add_dependencies(TestFoundation Foundation CoreFoundation)
386-
387-
add_swift_executable(xdgTestHelper
388-
SOURCES
389-
TestFoundation/xdgTestHelper/main.swift
390-
CFLAGS
391-
${deployment_enable_libdispatch}
392-
LINK_FLAGS
393-
-L${CMAKE_CURRENT_BINARY_DIR}
394-
-lFoundation
395-
SWIFT_FLAGS
396-
-Fsystem;${install_dir}/System/Library/Frameworks
397-
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
398-
${libdispatch_cflags})
399-
add_dependencies(xdgTestHelper Foundation CoreFoundation)
410+
add_dependencies(TestFoundation Foundation CoreFoundation xdgTestHelper)
400411

412+
add_custom_command(TARGET TestFoundation
413+
POST_BUILD
414+
BYPRODUCTS
415+
${CMAKE_CURRENT_BINARY_DIR}/TestFoundation/xdgTestHelper${CMAKE_EXECUTABLE_SUFFIX}
416+
COMMAND
417+
${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/xdgTestHelper${CMAKE_EXECUTABLE_SUFFIX} ${CMAKE_CURRENT_BINARY_DIR}/TestFoundation
418+
DEPENDS
419+
TestFoundation
420+
xdgTestHelper)
401421
add_test(NAME
402422
TestFoundation
403423
COMMAND
@@ -407,25 +427,39 @@ if(ENABLE_TESTING)
407427
set_tests_properties(TestFoundation
408428
PROPERTIES
409429
ENVIRONMENT
410-
LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:${FOUNDATION_PATH_TO_XCTEST_BUILD}:${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src)
430+
LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:${FOUNDATION_PATH_TO_XCTEST_BUILD}:${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}:${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src
431+
DEPENDS
432+
${CMAKE_CURRENT_BINARY_DIR}/TestFoundation/xdgTestHelper${CMAKE_EXECUTABLE_SUFFIX})
411433
endif()
412434

413-
get_swift_host_arch(SWIFT_HOST_ARCH)
435+
string(TOLOWER ${CMAKE_SYSTEM_NAME} swift_os)
436+
get_swift_host_arch(swift_arch)
414437

438+
# TODO(compnerd) honour lib vs lib64
415439
install(FILES
416440
${CMAKE_CURRENT_BINARY_DIR}/swift/Foundation.swiftdoc
417441
${CMAKE_CURRENT_BINARY_DIR}/swift/Foundation.swiftmodule
418442
DESTINATION
419-
${CMAKE_INSTALL_FULL_LIBDIR}/swift/${CMAKE_SYSTEM_NAME}/${SWIFT_HOST_ARCH})
443+
lib/swift/${swift_os}/${swift_arch})
420444
install(FILES
421445
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
422446
DESTINATION
423-
${CMAKE_INSTALL_FULL_LIBDIR})
447+
lib/swift/${swift_os})
448+
# TODO(compnerd) install as a Framework as that is how swift actually is built
449+
install(DIRECTORY
450+
${install_dir}/System/Library/Frameworks/CoreFoundation.framework/Headers/
451+
DESTINATION
452+
lib/swift/CoreFoundation
453+
FILES_MATCHING PATTERN "*.h")
454+
install(FILES
455+
CoreFoundation/Base.subproj/module.map
456+
DESTINATION
457+
lib/swift/CoreFoundation)
424458
if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
425459
install(FILES
426460
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
427461
DESTINATION
428-
${CMAKE_INSTALL_FULL_LIBDIR}/swift/${CMAKE_SYSTEM_NAME}/${SWIFT_HOST_ARCH})
462+
lib/swift/${swift_os}/${swift_arch})
429463
endif()
430464
install(FILES
431465
${CMAKE_CURRENT_BINARY_DIR}/plutil
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module CoreFoundation [extern_c] [system] {
2+
umbrella header "CoreFoundation.h"
3+
explicit module CFPlugInCOM { header "CFPlugInCOM.h" }
4+
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
module CoreFoundation [extern_c] [system] {
1+
framework module CoreFoundation [extern_c] [system] {
22
umbrella header "CoreFoundation.h"
33
explicit module CFPlugInCOM { header "CFPlugInCOM.h" }
4+
5+
export *
6+
module * {
7+
export *
8+
}
49
}

CoreFoundation/CMakeLists.txt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ add_framework(CoreFoundation
198198
Base.subproj/CFSystemDirectories.c
199199
Base.subproj/CFUtilities.c
200200
Base.subproj/CFUUID.c
201+
Base.subproj/CFWindowsUtilities.c
201202
# Collections
202203
Collections.subproj/CFArray.c
203204
Collections.subproj/CFBag.c
@@ -223,15 +224,15 @@ add_framework(CoreFoundation
223224
NumberDate.subproj/CFDate.c
224225
NumberDate.subproj/CFNumber.c
225226
NumberDate.subproj/CFTimeZone.c
226-
# Parsring
227+
# Parsing
227228
Parsing.subproj/CFBinaryPList.c
228229
Parsing.subproj/CFOldStylePList.c
229230
Parsing.subproj/CFPropertyList.c
230231
Parsing.subproj/CFXMLInputStream.c
232+
Parsing.subproj/CFXMLInterface.c
231233
Parsing.subproj/CFXMLNode.c
232234
Parsing.subproj/CFXMLParser.c
233235
Parsing.subproj/CFXMLTree.c
234-
Parsing.subproj/CFXMLInterface.c
235236
# PlugIn
236237
PlugIn.subproj/CFBundle_Binary.c
237238
PlugIn.subproj/CFBundle.c
@@ -244,6 +245,7 @@ add_framework(CoreFoundation
244245
PlugIn.subproj/CFBundle_ResourceFork.c
245246
PlugIn.subproj/CFBundle_Resources.c
246247
PlugIn.subproj/CFBundle_Strings.c
248+
PlugIn.subproj/CFBundle_Tables.c
247249
PlugIn.subproj/CFPlugIn.c
248250
PlugIn.subproj/CFPlugIn_Factory.c
249251
PlugIn.subproj/CFPlugIn_Instance.c
@@ -254,7 +256,9 @@ add_framework(CoreFoundation
254256
Preferences.subproj/CFXMLPreferencesDomain.c
255257
# RunLoop
256258
# TODO(compnerd) make this empty on non-Mach targets
259+
# RunLoop.subproj/CFMachPort.c
257260
# RunLoop.subproj/CFMachPort_Lifetime.c
261+
# RunLoop.subproj/CFMessagePort.c
258262
RunLoop.subproj/CFRunLoop.c
259263
RunLoop.subproj/CFSocket.c
260264
# Stream
@@ -285,8 +289,8 @@ add_framework(CoreFoundation
285289
StringEncodings.subproj/CFUnicodeDecomposition.c
286290
StringEncodings.subproj/CFUnicodePrecomposition.c
287291
# URL
288-
URL.subproj/CFURL.c
289292
URL.subproj/CFURLAccess.c
293+
URL.subproj/CFURL.c
290294
URL.subproj/CFURLComponents.c
291295
URL.subproj/CFURLComponents_URIParser.c
292296
URL.subproj/CFURLSessionInterface.c)

Tools/plutil/main.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ extension Dictionary {
202202
if let key = $0.0 as? String {
203203
key.display(indent + 1, type: .key)
204204
} else {
205-
fatalError("plists should have strings as keys but got a \(type(of: $0.0))")
205+
fatalError("plists should have strings as keys but got a \(Swift.type(of: $0.0))")
206206
}
207207
print(" => ", terminator: "")
208208
displayPlist($0.1, indent: indent + 1, type: .value)
@@ -302,7 +302,7 @@ func displayPlist(_ plist: Any, indent: Int = 0, type: DisplayType = .primary) {
302302
case let val as NSData:
303303
val.display(indent, type: type)
304304
default:
305-
fatalError("unhandled type \(type(of: plist))")
305+
fatalError("unhandled type \(Swift.type(of: plist))")
306306
}
307307
}
308308

0 commit comments

Comments
 (0)