@@ -27,34 +27,14 @@ include(ExternalProject)
27
27
string (TOLOWER ${CMAKE_SYSTEM_NAME} swift_os )
28
28
get_swift_host_arch (swift_arch )
29
29
30
- ExternalProject_Add (CoreFoundation
31
- SOURCE_DIR
32
- ${CMAKE_CURRENT_SOURCE_DIR} /CoreFoundation
33
- CMAKE_COMMAND
34
- ${CMAKE_COMMAND}
35
- CMAKE_ARGS
36
- -DBUILD_SHARED_LIBS=NO
37
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
38
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
39
- -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
40
- -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
41
- -DCMAKE_INSTALL_LIBDIR=usr/lib
42
- -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
43
- -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
44
- -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
45
- -DCF_DEPLOYMENT_SWIFT=YES
46
- -DCF_ENABLE_LIBDISPATCH=${FOUNDATION_ENABLE_LIBDISPATCH}
47
- -DCF_PATH_TO_LIBDISPATCH_SOURCE=${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE}
48
- -DCF_PATH_TO_LIBDISPATCH_BUILD=${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}
49
- -DICU_LIBRARY=${ICU_LIBRARY}
50
- -DICU_INCLUDE_DIR=${ICU_INCLUDE_DIR}
51
- -DCURL_LIBRARY=${CURL_LIBRARY}
52
- -DCURL_INCLUDE_DIR=${CURL_INCLUDE_DIR}
53
- -DLIBXML2_LIBRARY=${LIBXML2_LIBRARY}
54
- -DLIBXML2_INCLUDE_DIR=${LIBXML2_INCLUDE_DIR}
55
- INSTALL_COMMAND
56
- ${CMAKE_COMMAND} -E env --unset=DESTDIR ${CMAKE_COMMAND} --build . --target install )
57
- ExternalProject_Get_Property (CoreFoundation install_dir )
30
+ set (CF_PATH_TO_LIBDISPATCH_SOURCE ${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE} CACHE PATH "Path to libdispatch source" FORCE )
31
+ set (CF_PATH_TO_LIBDISPATCH_BUILD ${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD} CACHE PATH "Path to libdispatch build" FORCE )
32
+ set (CF_DEPLOYMENT_SWIFT YES CACHE BOOL "Build for Swift" FORCE )
33
+
34
+ set (SAVED_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS} )
35
+ set (BUILD_SHARED_LIBS NO )
36
+ add_subdirectory (CoreFoundation )
37
+ set (BUILD_SHARED_LIBS ${SAVED_BUILD_SHARED_LIBS} )
58
38
59
39
add_library (uuid
60
40
STATIC
@@ -67,13 +47,14 @@ set_target_properties(uuid
67
47
# the dependency on TargetConditionals.h
68
48
target_compile_options (uuid
69
49
PUBLIC
70
- -I${install_dir}/System/Library/Frameworks /CoreFoundation.framework/Headers )
50
+ -I${CMAKE_CURRENT_BINARY_DIR} /CoreFoundation.framework/Headers )
71
51
if (CMAKE_SYSTEM_NAME STREQUAL Windows )
72
52
target_compile_definitions (uuid
73
53
PRIVATE
74
54
_CRT_NONSTDC_NO_WARNINGS
75
55
_CRT_SECURE_NO_DEPRECATE
76
56
_CRT_SECURE_NO_WARNINGS )
57
+ target_link_libraries (uuid PRIVATE Bcrypt )
77
58
endif ()
78
59
add_dependencies (uuid CoreFoundation )
79
60
@@ -107,32 +88,24 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
107
88
set (Foundation_RPATH -Xlinker;-rpath;-Xlinker; "\\\$\$ ORIGIN" )
108
89
elseif (CMAKE_SYSTEM_NAME STREQUAL Windows )
109
90
set (deployment_target -DDEPLOYMENT_TARGET_WINDOWS )
110
- # FIXME(compnerd) these are not all CoreFoundation dependencies, some of them
111
- # are Foundation's and others are libcurl's. We should split them up
112
- # accordingly.
113
- set (CoreFoundation_INTERFACE_LIBRARIES
114
- -lAdvAPI32
115
- -lCrypt32
116
- -lDbgHelp
117
- -lShell32
118
- -lOle32
119
- -lRpcRT4
120
- -lSecur32
121
- -lShLwApi
122
- -lUser32
123
- -lWldap32
124
- -lWS2_32
125
- -liphlpapi
126
- -lmincore
127
- -lnormaliz
128
- -lpathcch
129
- -lucrt
130
- -lshell32 )
131
91
# FIXME(SR9138) Silence "locally defined symbol '…' imported in function '…'
132
92
set (WORKAROUND_SR9138 -Xlinker;-ignore:4217 )
133
93
set (WORKAROUND_SR9995 -Xlinker;-nodefaultlib:libcmt )
134
94
endif ()
135
95
96
+ # NOTE(compnerd) this is a horrible hack to work around the fact that we do not
97
+ # have a proper library target for Foundation which can link against the
98
+ # CoreFoundation target. When we gain proper CMake support for Swift, we should
99
+ # be able to remove this and just use
100
+ # `target_link_libraries(Foundation PRIVATE CoreFoundation)`.
101
+ set (CoreFoundation_LIBRARIES $< TARGET_FILE:CoreFoundation> )
102
+ get_target_property (CoreFoundation_LINK_LIBRARIES CoreFoundation LINK_LIBRARIES )
103
+ foreach (library ${CoreFoundation_LINK_LIBRARIES} )
104
+ if (NOT library STREQUAL Threads::Threads )
105
+ list (APPEND CoreFoundation_LIBRARIES -l${library} )
106
+ endif ()
107
+ endforeach ()
108
+
136
109
add_swift_library (Foundation
137
110
MODULE_NAME
138
111
Foundation
@@ -308,21 +281,25 @@ add_swift_library(Foundation
308
281
CFLAGS
309
282
${deployment_target}
310
283
${deployment_enable_libdispatch}
311
- -F${install_dir}/System/Library/Frameworks
284
+ -F${CMAKE_CURRENT_BINARY_DIR}
312
285
-D_DLL
313
286
LINK_FLAGS
314
- -L${install_dir}/usr/lib
315
- -lCoreFoundation
287
+ ${CoreFoundation_LIBRARIES}
316
288
${CURL_LIBRARIES}
317
289
${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY}
318
290
${LIBXML2_LIBRARIES}
319
291
${libdispatch_ldflags}
320
- -L${CMAKE_CURRENT_BINARY_DIR}
321
- -luuid
292
+ $< TARGET_FILE:uuid>
322
293
${Foundation_RPATH}
323
- ${CoreFoundation_INTERFACE_LIBRARIES}
324
294
${WORKAROUND_SR9138}
325
295
${WORKAROUND_SR9995}
296
+ $< $< PLATFORM_ID:Windows> :-lDbgHelp>
297
+ $< $< PLATFORM_ID:Windows> :-lOle32>
298
+ $< $< PLATFORM_ID:Windows> :-lShLwApi>
299
+ $< $< PLATFORM_ID:Windows> :-lShell32>
300
+ $< $< PLATFORM_ID:Windows> :-lWS2_32>
301
+ $< $< PLATFORM_ID:Windows> :-liphlpapi>
302
+ $< $< PLATFORM_ID:Windows> :-lpathcch>
326
303
SWIFT_FLAGS
327
304
-DDEPLOYMENT_RUNTIME_SWIFT
328
305
${deployment_enable_libdispatch}
@@ -352,7 +329,7 @@ add_swift_executable(plutil
352
329
CFLAGS
353
330
${deployment_target}
354
331
${deployment_enable_libdispatch}
355
- -F${install_dir}/System/Library/Frameworks
332
+ -F${CMAKE_CURRENT_BINARY_DIR}
356
333
LINK_FLAGS
357
334
${libdispatch_ldflags}
358
335
-L${CMAKE_CURRENT_BINARY_DIR}
@@ -378,7 +355,7 @@ if(ENABLE_TESTING)
378
355
CFLAGS
379
356
${deployment_target}
380
357
${deployment_enable_libdispatch}
381
- -F${install_dir}/System/Library/Frameworks
358
+ -F${CMAKE_CURRENT_BINARY_DIR}
382
359
LINK_FLAGS
383
360
${libdispatch_ldflags}
384
361
-L${CMAKE_CURRENT_BINARY_DIR}
@@ -490,7 +467,7 @@ if(ENABLE_TESTING)
490
467
CFLAGS
491
468
${deployment_target}
492
469
${deployment_enable_libdispatch}
493
- -F${install_dir}/System/Library/Frameworks
470
+ -F${CMAKE_CURRENT_BINARY_DIR}
494
471
LINK_FLAGS
495
472
${libdispatch_ldflags}
496
473
-L${CMAKE_CURRENT_BINARY_DIR}
@@ -576,7 +553,7 @@ else()
576
553
endif ()
577
554
# TODO(compnerd) install as a Framework as that is how swift actually is built
578
555
install (DIRECTORY
579
- ${install_dir} /System/Library/Frameworks /CoreFoundation.framework/Headers/
556
+ ${CMAKE_CURRENT_BINARY_DIR} /CoreFoundation.framework/Headers/
580
557
DESTINATION
581
558
lib/swift/CoreFoundation
582
559
FILES_MATCHING PATTERN "*.h" )
0 commit comments