@@ -9,6 +9,8 @@ project(Foundation
9
9
C )
10
10
enable_testing ()
11
11
12
+ option (BUILD_SHARED_LIBS "build shared libraries" ON )
13
+
12
14
option (FOUNDATION_ENABLE_LIBDISPATCH "Enable GCD Support" YES )
13
15
option (FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source" "" )
14
16
option (FOUNDATION_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build" "" )
@@ -17,33 +19,67 @@ option(FOUNDATION_PATH_TO_XCTEST_BUILD "Path to XCTest build" "")
17
19
find_package (CURL REQUIRED )
18
20
find_package (ICU COMPONENTS uc i18n REQUIRED )
19
21
find_package (LibXml2 REQUIRED )
20
- find_package (UUID REQUIRED )
21
22
22
23
include (SwiftSupport )
23
24
include (GNUInstallDirs )
24
25
include (ExternalProject )
25
26
27
+ string (TOLOWER ${CMAKE_SYSTEM_NAME} swift_os )
28
+ get_swift_host_arch (swift_arch )
29
+
26
30
ExternalProject_Add (CoreFoundation
27
31
SOURCE_DIR
28
32
${CMAKE_CURRENT_SOURCE_DIR} /CoreFoundation
29
33
CMAKE_COMMAND
30
34
${CMAKE_COMMAND}
31
35
CMAKE_ARGS
32
36
-DBUILD_SHARED_LIBS=NO
33
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
34
37
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
38
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
39
+ # NOTE(compnerd) ensure that we build it as a DLL as we
40
+ # wish to re-export the symbols from Foundation
41
+ -DCMAKE_C_FLAGS=-D_USRDLL
35
42
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
36
43
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
37
44
-DCMAKE_INSTALL_LIBDIR=usr/lib
45
+ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
46
+ -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
47
+ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
38
48
-DCF_DEPLOYMENT_SWIFT=YES
39
49
-DCF_ENABLE_LIBDISPATCH=${FOUNDATION_ENABLE_LIBDISPATCH}
40
50
-DCF_PATH_TO_LIBDISPATCH_SOURCE=${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE}
41
51
-DCF_PATH_TO_LIBDISPATCH_BUILD=${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}
52
+ -DICU_LIBRARY=${ICU_LIBRARY}
42
53
-DICU_INCLUDE_DIR=${ICU_INCLUDE_DIR}
54
+ -DCURL_LIBRARY=${CURL_LIBRARY}
55
+ -DCURL_INCLUDE_DIR=${CURL_INCLUDE_DIR}
56
+ -DLIBXML2_LIBRARY=${LIBXML2_LIBRARY}
57
+ -DLIBXML2_INCLUDE_DIR=${LIBXML2_INCLUDE_DIR}
43
58
INSTALL_COMMAND
44
59
${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install )
45
60
ExternalProject_Get_Property (CoreFoundation install_dir )
46
61
62
+ add_library (uuid
63
+ STATIC
64
+ uuid/uuid.h
65
+ uuid/uuid.c )
66
+ set_target_properties (uuid
67
+ PROPERTIES
68
+ POSITION_INDEPENDENT_CODE YES )
69
+ # Add an include directory for the CoreFoundation framework headers to satisfy
70
+ # the dependency on TargetConditionals.h
71
+ target_compile_options (uuid
72
+ PUBLIC
73
+ -I${install_dir}/System/Library/Frameworks/CoreFoundation.framework/Headers )
74
+ if (CMAKE_SYSTEM_NAME STREQUAL Windows )
75
+ target_compile_definitions (uuid
76
+ PRIVATE
77
+ _CRT_NONSTDC_NO_WARNINGS
78
+ _CRT_SECURE_NO_DEPRECATE
79
+ _CRT_SECURE_NO_WARNINGS )
80
+ endif ()
81
+ add_dependencies (uuid CoreFoundation )
82
+
47
83
set (swift_optimization_flags )
48
84
if (CMAKE_BUILD_TYPE MATCHES Release )
49
85
set (swift_optimization_flags -O )
@@ -58,21 +94,31 @@ set(libdispatch_ldflags)
58
94
if (FOUNDATION_ENABLE_LIBDISPATCH )
59
95
set (deployment_enable_libdispatch -DDEPLOYMENT_ENABLE_LIBDISPATCH )
60
96
set (libdispatch_cflags -I;${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE};-I;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src/swift;-Xcc;-fblocks )
61
- set (libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD};-L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch )
97
+ set (libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD};-L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch;-lswiftDispatch )
62
98
if (CMAKE_SYSTEM_NAME STREQUAL Linux OR CMAKE_SYSTEM_NAME STREQUAL Android OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD )
63
99
list (APPEND libdispatch_ldflags -Xlinker;-rpath;-Xlinker;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src )
64
100
endif ()
65
101
endif ()
66
102
103
+ if (CMAKE_SYSTEM_NAME STREQUAL Android OR CMAKE_SYSTEM_NAME STREQUAL Linux )
104
+ set (deployment_target -DDEPLOYMENT_TARGET_LINUX )
105
+ set (Foundation_rpath_flags -Xlinker;-rpath;-Xlinker; "\\\$\$ ORIGIN" )
106
+ elseif (CMAKE_SYSTEM_NAME STREQUAL Darwin )
107
+ set (deployment_target -DDEPLOYMENT_TARGET_MACOSX )
108
+ elseif (CMAKE_SYSTEM_NAME STREQUAL FreeBSD )
109
+ set (deployment_target -DDEPLOYMENT_TARGET_FREEBSD )
110
+ set (Foundation_rpath_flags -Xlinker;-rpath;-Xlinker; "\\\$\$ ORIGIN" )
111
+ elseif (CMAKE_SYSTEM_NAME STREQUAL Windows )
112
+ set (deployment_target -DDEPLOYMENT_TARGET_WINDOWS )
113
+ endif ()
114
+
67
115
add_swift_library (Foundation
68
116
MODULE_NAME
69
117
Foundation
70
118
MODULE_LINK_NAME
71
119
Foundation
72
120
MODULE_PATH
73
121
${CMAKE_CURRENT_BINARY_DIR} /swift/Foundation.swiftmodule
74
- OUTPUT
75
- ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
76
122
SOURCES
77
123
Foundation/AffineTransform.swift
78
124
Foundation/Array.swift
@@ -231,62 +277,89 @@ add_swift_library(Foundation
231
277
TARGET
232
278
${CMAKE_C_COMPILER_TARGET}
233
279
CFLAGS
280
+ ${deployment_target}
234
281
${deployment_enable_libdispatch}
235
282
-F${install_dir}/System/Library/Frameworks
283
+ -D_DLL
236
284
LINK_FLAGS
237
285
-L${install_dir}/usr/lib
238
286
-lCoreFoundation
239
287
${CURL_LIBRARIES}
240
- ${ICU_UC_LIBRARIES } ${ICU_I18N_LIBRARIES }
288
+ ${ICU_UC_LIBRARY } ${ICU_I18N_LIBRARY }
241
289
${LIBXML2_LIBRARIES}
242
290
${libdispatch_ldflags}
243
- ${uuid_LIBRARIES}
244
- -Xlinker;-rpath;-Xlinker; "\\\$\$ ORIGIN"
291
+ -L${CMAKE_CURRENT_BINARY_DIR}
292
+ -luuid
293
+ ${Foundation_rpath_flags}
245
294
SWIFT_FLAGS
246
295
-DDEPLOYMENT_RUNTIME_SWIFT
247
296
${deployment_enable_libdispatch}
248
297
-I;${ICU_INCLUDE_DIR}
249
298
${libdispatch_cflags}
250
299
${swift_enable_testing}
251
- ${swift_optimization_flags} )
252
- add_dependencies (Foundation CoreFoundation )
300
+ ${swift_optimization_flags}
301
+ DEPENDS
302
+ CoreFoundation )
303
+
304
+ if (NOT BUILD_SHARED_LIBS )
305
+ set (Foundation_INTERFACE_LIBRARIES
306
+ -L${install_dir}/usr/lib
307
+ -lCoreFoundation
308
+ -L${CMAKE_CURRENT_BINARY_DIR}
309
+ -luuid
310
+ ${CURL_LIBRARIES}
311
+ ${ICU_UC_LIBRARY}
312
+ ${ICU_I18N_LIBRARY}
313
+ ${LIBXML2_LIBRARIES} )
314
+ endif ()
253
315
254
316
add_swift_executable (plutil
255
317
SOURCES
256
318
Tools/plutil/main.swift
257
319
CFLAGS
320
+ ${deployment_target}
258
321
${deployment_enable_libdispatch}
259
322
-F${install_dir}/System/Library/Frameworks
260
323
LINK_FLAGS
261
- -L${CMAKE_CURRENT_BINARY_DIR}
262
324
${libdispatch_ldflags}
325
+ -L${CMAKE_CURRENT_BINARY_DIR}
263
326
-lFoundation
327
+ ${Foundation_INTERFACE_LIBRARIES}
328
+ -Xlinker;-rpath;-Xlinker; "\\\$\$ ORIGIN/../lib/swift/${swift_os} "
264
329
SWIFT_FLAGS
265
330
-DDEPLOYMENT_RUNTIME_SWIFT
266
331
${deployment_enable_libdispatch}
267
332
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
268
333
-I;${ICU_INCLUDE_DIR}
269
334
${libdispatch_cflags}
270
335
${swift_enable_testing}
271
- ${swift_optimization_flags} )
272
- add_dependencies (plutil Foundation CoreFoundation )
336
+ ${swift_optimization_flags}
337
+ DEPENDS
338
+ uuid
339
+ Foundation
340
+ CoreFoundation )
273
341
274
342
if (ENABLE_TESTING )
275
343
add_swift_executable (xdgTestHelper
276
344
CFLAGS
345
+ ${deployment_target}
277
346
${deployment_enable_libdispatch}
278
347
-F${install_dir}/System/Library/Frameworks
279
348
LINK_FLAGS
280
349
${libdispatch_ldflags}
281
350
-L${CMAKE_CURRENT_BINARY_DIR}
282
351
-lFoundation
352
+ ${Foundation_INTERFACE_LIBRARIES}
283
353
SOURCES
284
354
TestFoundation/xdgTestHelper/main.swift
285
355
SWIFT_FLAGS
286
356
-I;${CMAKE_CURRENT_BINARY_DIR}/swift
287
357
-I;${ICU_INCLUDE_DIR}
288
- ${libdispatch_cflags} )
289
- add_dependencies (xdgTestHelper Foundation CoreFoundation )
358
+ ${libdispatch_cflags}
359
+ DEPENDS
360
+ uuid
361
+ Foundation
362
+ CoreFoundation )
290
363
291
364
add_swift_executable (TestFoundation
292
365
SOURCES
@@ -375,6 +448,7 @@ if(ENABLE_TESTING)
375
448
TestFoundation/TestURL.swift
376
449
TestFoundation/TestUserDefaults.swift
377
450
TestFoundation/TestUtils.swift
451
+ TestFoundation/TestUUID.swift
378
452
TestFoundation/TestXMLDocument.swift
379
453
TestFoundation/TestXMLParser.swift
380
454
CFLAGS
@@ -384,6 +458,7 @@ if(ENABLE_TESTING)
384
458
${libdispatch_ldflags}
385
459
-L${CMAKE_CURRENT_BINARY_DIR}
386
460
-lFoundation
461
+ ${Foundation_INTERFACE_LIBRARIES}
387
462
-L${FOUNDATION_PATH_TO_XCTEST_BUILD}
388
463
-lXCTest
389
464
RESOURCES
@@ -416,8 +491,11 @@ if(ENABLE_TESTING)
416
491
-I;${FOUNDATION_PATH_TO_XCTEST_BUILD}/swift
417
492
-I;${ICU_INCLUDE_DIR}
418
493
${libdispatch_cflags}
419
- ${swift_optimization_flags} )
420
- add_dependencies (TestFoundation Foundation CoreFoundation xdgTestHelper )
494
+ ${swift_optimization_flags}
495
+ DEPENDS
496
+ Foundation
497
+ CoreFoundation
498
+ xdgTestHelper )
421
499
422
500
add_custom_command (TARGET TestFoundation
423
501
POST_BUILD
@@ -442,19 +520,23 @@ if(ENABLE_TESTING)
442
520
${CMAKE_CURRENT_BINARY_DIR} /TestFoundation/xdgTestHelper${CMAKE_EXECUTABLE_SUFFIX} )
443
521
endif ()
444
522
445
- string (TOLOWER ${CMAKE_SYSTEM_NAME} swift_os )
446
- get_swift_host_arch (swift_arch )
447
-
448
523
# TODO(compnerd) honour lib vs lib64
449
524
install (FILES
450
525
${CMAKE_CURRENT_BINARY_DIR} /swift/Foundation.swiftdoc
451
526
${CMAKE_CURRENT_BINARY_DIR} /swift/Foundation.swiftmodule
452
527
DESTINATION
453
528
lib/swift/${swift_os}/${swift_arch} )
454
- install (FILES
455
- ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
456
- DESTINATION
457
- lib/swift/${swift_os} )
529
+ if (BUILD_SHARED_LIBS )
530
+ install (FILES
531
+ ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
532
+ DESTINATION
533
+ lib/swift/${swift_os} )
534
+ else ()
535
+ install (FILES
536
+ ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_STATIC_LIBRARY_PREFIX}Foundation${CMAKE_STATIC_LIBRARY_SUFFIX}
537
+ DESTINATION
538
+ lib/swift_static/${swift_os} )
539
+ endif ()
458
540
# TODO(compnerd) install as a Framework as that is how swift actually is built
459
541
install (DIRECTORY
460
542
${install_dir} /System/Library/Frameworks/CoreFoundation.framework/Headers/
@@ -465,13 +547,7 @@ install(FILES
465
547
CoreFoundation/Base.subproj/module.map
466
548
DESTINATION
467
549
lib/swift/CoreFoundation )
468
- if (NOT CMAKE_SYSTEM_NAME STREQUAL Darwin )
469
- install (FILES
470
- ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX}Foundation${CMAKE_SHARED_LIBRARY_SUFFIX}
471
- DESTINATION
472
- lib/swift/${swift_os}/${swift_arch} )
473
- endif ()
474
- install (FILES
550
+ install (PROGRAMS
475
551
${CMAKE_CURRENT_BINARY_DIR} /plutil
476
552
DESTINATION
477
553
${CMAKE_INSTALL_FULL_BINDIR} )
0 commit comments