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