@@ -4,11 +4,22 @@ cmake_minimum_required(VERSION 3.4.3)
4
4
list (APPEND CMAKE_MODULE_PATH
5
5
"${CMAKE_CURRENT_SOURCE_DIR} /cmake/modules" )
6
6
7
+ # NOTE(compnerd) enable CMP0091 - select MSVC runtime based on
8
+ # CMAKE_MSVC_RUNTIME_LIBRARY. Requires CMake 3.15 or newer
9
+ if (POLICY CMP0091 )
10
+ cmake_policy (CMP0091 NEW )
11
+ endif ()
12
+
7
13
project (Foundation
8
14
LANGUAGES
9
15
C )
10
16
enable_testing ()
11
17
18
+ # NOTE(compnerd) default to /MD or /MDd by default based on the configuration.
19
+ # Cache the variable to allow the user to alter the configuration.
20
+ set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL" CACHE
21
+ STRING "MSVC Runtime Library" )
22
+
12
23
option (BUILD_SHARED_LIBS "build shared libraries" ON )
13
24
14
25
option (FOUNDATION_ENABLE_LIBDISPATCH "Enable GCD Support" YES )
@@ -73,6 +84,12 @@ endif()
73
84
if (ENABLE_TESTING )
74
85
set (swift_enable_testing -enable-testing )
75
86
endif ()
87
+ if (CMAKE_SYSTEM_NAME STREQUAL Windows )
88
+ set (swift_libc_flags -libc;${CMAKE_MSVC_RUNTIME_LIBRARY} )
89
+ if (CMAKE_SYSTEM_NAME STREQUAL Debug )
90
+ list (APPEND swift_libc_flags -Xcc;-D_DEBUG )
91
+ endif ()
92
+ endif ()
76
93
77
94
set (deployment_enable_libdispatch )
78
95
set (libdispatch_cflags )
@@ -95,7 +112,6 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
95
112
elseif (CMAKE_SYSTEM_NAME STREQUAL Windows )
96
113
# FIXME(SR9138) Silence "locally defined symbol '…' imported in function '…'
97
114
set (WORKAROUND_SR9138 -Xlinker;-ignore:4049;-Xlinker;-ignore:4217 )
98
- set (WORKAROUND_SR9995 -Xlinker;-nodefaultlib:libcmt )
99
115
endif ()
100
116
101
117
# NOTE(compnerd) this is a horrible hack to work around the fact that we do not
@@ -111,35 +127,6 @@ foreach(library ${CoreFoundation_LINK_LIBRARIES})
111
127
endif ()
112
128
endforeach ()
113
129
114
- # Windows uses 4 different variants of the C library that are normally
115
- # controlled by options to the compiler:
116
- #
117
- # Option | Flags | Runtime
118
- # --------+-----------------------+------------
119
- # /MTd | -D_DEBUG -D_MT | libcmtd.lib
120
- # /MT | -D_MT | libcmt.lib
121
- # /MDd | -D_DEBUG -D_DLL -D_MT | msvcrtd.lib
122
- # /MD | -D_DLL -D_MT | msvcrt.lib
123
-
124
- if (CMAKE_SYSTEM_NAME STREQUAL Windows )
125
- set (MSVCRT_C_FLAGS )
126
- set (MSVCRT_LINK_FLAGS )
127
- if (CMAKE_BUILD_TYPE STREQUAL Debug )
128
- list (APPEND MSVCRT_C_FLAGS -D_DEBUG )
129
- endif ()
130
- # We currently do not support building in /MT or /MTd
131
- list (APPEND MSVCRT_C_FLAGS -D_MT )
132
- list (APPEND MSVCRT_C_FLAGS -D_DLL )
133
- # Ensure that we link against the correct CRT
134
- if (CMAKE_BUILD_TYPE STREQUAL Debug )
135
- list (APPEND MSVCRT_C_FLAGS -Xclang --dependent-lib=msvcrtd )
136
- list (APPEND MSVCRT_LINK_FLAGS -Xlinker -defaultlib:msvcrtd.lib )
137
- else ()
138
- list (APPEND MSVCRT_C_FLAGS -Xclang --dependent-lib=msvcrt )
139
- list (APPEND MSVCRT_LINK_FLAGS -Xlinker -defaultlib:msvcrt.lib )
140
- endif ()
141
- endif ()
142
-
143
130
add_swift_library (Foundation
144
131
MODULE_NAME
145
132
Foundation
@@ -316,12 +303,10 @@ add_swift_library(Foundation
316
303
TARGET
317
304
${CMAKE_C_COMPILER_TARGET}
318
305
CFLAGS
319
- ${MSVCRT_C_FLAGS}
320
306
${deployment_target}
321
307
${deployment_enable_libdispatch}
322
308
-F${CMAKE_CURRENT_BINARY_DIR}
323
309
LINK_FLAGS
324
- ${MSVCRT_LINK_FLAGS}
325
310
${CoreFoundation_LIBRARIES}
326
311
${CURL_LIBRARIES}
327
312
${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY}
@@ -330,7 +315,6 @@ add_swift_library(Foundation
330
315
$< TARGET_FILE:uuid>
331
316
${Foundation_RPATH}
332
317
${WORKAROUND_SR9138}
333
- ${WORKAROUND_SR9995}
334
318
$< $< PLATFORM_ID:Windows> :-lDbgHelp>
335
319
$< $< PLATFORM_ID:Windows> :-lOle32>
336
320
$< $< PLATFORM_ID:Windows> :-lShLwApi>
@@ -346,6 +330,7 @@ add_swift_library(Foundation
346
330
${libdispatch_cflags}
347
331
${swift_enable_testing}
348
332
${swift_optimization_flags}
333
+ ${swift_libc_flags}
349
334
DEPENDS
350
335
uuid
351
336
CoreFoundation
@@ -367,18 +352,15 @@ add_swift_executable(plutil
367
352
SOURCES
368
353
Tools/plutil/main.swift
369
354
CFLAGS
370
- ${MSVCRT_C_FLAGS}
371
355
${deployment_target}
372
356
${deployment_enable_libdispatch}
373
357
-F${CMAKE_CURRENT_BINARY_DIR}
374
358
LINK_FLAGS
375
- ${MSVCRT_LINK_FLAGS}
376
359
${libdispatch_ldflags}
377
360
-L${CMAKE_CURRENT_BINARY_DIR}
378
361
-lFoundation
379
362
${Foundation_INTERFACE_LIBRARIES}
380
363
${Foundation_RPATH}
381
- ${WORKAROUND_SR9995}
382
364
SWIFT_FLAGS
383
365
-DDEPLOYMENT_RUNTIME_SWIFT
384
366
${deployment_enable_libdispatch}
@@ -387,6 +369,7 @@ add_swift_executable(plutil
387
369
${libdispatch_cflags}
388
370
${swift_enable_testing}
389
371
${swift_optimization_flags}
372
+ ${swift_libc_flags}
390
373
DEPENDS
391
374
uuid
392
375
Foundation
@@ -395,17 +378,14 @@ add_swift_executable(plutil
395
378
if (ENABLE_TESTING )
396
379
add_swift_executable (xdgTestHelper
397
380
CFLAGS
398
- ${MSVCRT_C_FLAGS}
399
381
${deployment_target}
400
382
${deployment_enable_libdispatch}
401
383
-F${CMAKE_CURRENT_BINARY_DIR}
402
384
LINK_FLAGS
403
- ${MSVCRT_LINK_FLAGS}
404
385
${libdispatch_ldflags}
405
386
-L${CMAKE_CURRENT_BINARY_DIR}
406
387
-lFoundation
407
388
${Foundation_INTERFACE_LIBRARIES}
408
- ${WORKAROUND_SR9995}
409
389
${XDG_TEST_HELPER_RPATH}
410
390
SOURCES
411
391
TestFoundation/xdgTestHelper/main.swift
@@ -517,21 +497,17 @@ if(ENABLE_TESTING)
517
497
TestFoundation/TestXMLDocument.swift
518
498
TestFoundation/TestXMLParser.swift
519
499
CFLAGS
520
- ${MSVCRT_C_FLAGS}
521
500
${deployment_target}
522
501
${deployment_enable_libdispatch}
523
502
-F${CMAKE_CURRENT_BINARY_DIR}
524
- -D_DLL
525
503
LINK_FLAGS
526
- ${MSVCRT_LINK_FLAGS}
527
504
${libdispatch_ldflags}
528
505
-L${CMAKE_CURRENT_BINARY_DIR}
529
506
-lFoundation
530
507
${Foundation_INTERFACE_LIBRARIES}
531
508
-L${FOUNDATION_PATH_TO_XCTEST_BUILD}
532
509
-lXCTest
533
510
${WORKAROUND_SR9138}
534
- ${WORKAROUND_SR9995}
535
511
$< $< PLATFORM_ID:Windows> :-lWS2_32>
536
512
RESOURCES
537
513
${CMAKE_SOURCE_DIR} /TestFoundation/Resources/Info.plist
@@ -565,6 +541,7 @@ if(ENABLE_TESTING)
565
541
-I;${ICU_INCLUDE_DIR}
566
542
${libdispatch_cflags}
567
543
${swift_optimization_flags}
544
+ ${swift_libc_flags}
568
545
DEPENDS
569
546
Foundation
570
547
CoreFoundation
0 commit comments