Skip to content

Commit 02b6161

Browse files
authored
Merge pull request swiftlang#29483 from compnerd/duplication-is-good-for-you
build: repair the Windows build
2 parents 8777a87 + a1c9719 commit 02b6161

File tree

3 files changed

+46
-27
lines changed

3 files changed

+46
-27
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -264,18 +264,6 @@ function(_add_variant_c_compile_flags)
264264
endif()
265265

266266
if("${CFLAGS_SDK}" STREQUAL "WINDOWS")
267-
# MSVC doesn't support -Xclang. We don't need to manually specify
268-
# the dependent libraries as `cl` does so.
269-
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
270-
list(APPEND result -Xclang;--dependent-lib=oldnames)
271-
# TODO(compnerd) handle /MT, /MTd
272-
if("${CFLAGS_BUILD_TYPE}" STREQUAL "Debug")
273-
list(APPEND result -Xclang;--dependent-lib=msvcrtd)
274-
else()
275-
list(APPEND result -Xclang;--dependent-lib=msvcrt)
276-
endif()
277-
endif()
278-
279267
# MSVC/clang-cl don't support -fno-pic or -fms-compatibility-version.
280268
if(NOT SWIFT_COMPILER_IS_MSVC_LIKE)
281269
list(APPEND result -fno-pic)
@@ -366,11 +354,6 @@ function(_add_variant_c_compile_flags)
366354
list(APPEND result "SHELL:${CMAKE_INCLUDE_SYSTEM_FLAG_C}${path}")
367355
endforeach()
368356
list(APPEND result "-D__ANDROID_API__=${SWIFT_ANDROID_API_LEVEL}")
369-
elseif(CFLAGS_SDK STREQUAL WINDOWS)
370-
swift_windows_include_for_arch(${CFLAGS_ARCH} ${CFLAGS_ARCH}_INCLUDE)
371-
foreach(path ${${CFLAGS_ARCH}_INCLUDE})
372-
list(APPEND result "\"${CMAKE_INCLUDE_FLAG_C}${path}\"")
373-
endforeach()
374357
endif()
375358

376359
set("${CFLAGS_RESULT_VAR_NAME}" "${result}" PARENT_SCOPE)
@@ -910,11 +893,9 @@ function(_add_swift_library_single target name)
910893

911894
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "WINDOWS")
912895
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
913-
swift_windows_generate_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY_FLAGS)
914-
foreach(flag ${SWIFTLIB_SINGLE_VFS_OVERLAY_FLAGS})
915-
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS -Xcc;${flag})
916-
list(APPEND SWIFTLIB_SINGLE_C_COMPILE_FLAGS ${flag})
917-
endforeach()
896+
swift_windows_get_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY)
897+
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS
898+
-Xcc;-Xclang;-Xcc;-ivfsoverlay;-Xcc;-Xclang;-Xcc;${SWIFTLIB_SINGLE_VFS_OVERLAY})
918899
endif()
919900
swift_windows_include_for_arch(${SWIFTLIB_SINGLE_ARCHITECTURE} SWIFTLIB_INCLUDE)
920901
foreach(directory ${SWIFTLIB_INCLUDE})
@@ -1390,6 +1371,25 @@ function(_add_swift_library_single target name)
13901371
endif()
13911372

13921373
# Set compilation and link flags.
1374+
if(SWIFTLIB_SINGLE_SDK STREQUAL WINDOWS)
1375+
swift_windows_include_for_arch(${SWIFTLIB_SINGLE_ARCHITECTURE}
1376+
${SWIFTLIB_SINGLE_ARCHITECTURE}_INCLUDE)
1377+
target_include_directories(${target} SYSTEM PRIVATE
1378+
${${SWIFTLIB_SINGLE_ARCHITECTURE}_INCLUDE})
1379+
1380+
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
1381+
swift_windows_get_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY)
1382+
target_compile_options(${target} PRIVATE
1383+
"SHELL:-Xclang -ivfsoverlay -Xclang ${SWIFTLIB_SINGLE_VFS_OVERLAY}")
1384+
1385+
# MSVC doesn't support -Xclang. We don't need to manually specify
1386+
# the dependent libraries as `cl` does so.
1387+
target_compile_options(${target} PRIVATE
1388+
"SHELL:-Xclang --dependent-lib=oldnames"
1389+
# TODO(compnerd) handle /MT, /MTd
1390+
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>")
1391+
endif()
1392+
endif()
13931393
target_include_directories(${target} SYSTEM PRIVATE
13941394
${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}
13951395
${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE})
@@ -2575,6 +2575,21 @@ function(_add_swift_executable_single name)
25752575
${SWIFTEXE_SINGLE_DEPENDS})
25762576
llvm_update_compile_flags("${name}")
25772577

2578+
if(SWIFTEXE_SINGLE_SDK STREQUAL WINDOWS)
2579+
swift_windows_include_for_arch(${SWIFTEXE_SINGLE_ARCHITECTURE}
2580+
${SWIFTEXE_SINGLE_ARCHITECTURE}_INCLUDE)
2581+
target_include_directories(${name} SYSTEM PRIVATE
2582+
${${SWIFTEXE_SINGLE_ARCHITECTURE}_INCLUDE})
2583+
2584+
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
2585+
# MSVC doesn't support -Xclang. We don't need to manually specify
2586+
# the dependent libraries as `cl` does so.
2587+
target_compile_options(${name} PRIVATE
2588+
"SHELL:-Xclang --dependent-lib=oldnames"
2589+
# TODO(compnerd) handle /MT, /MTd
2590+
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>")
2591+
endif()
2592+
endif()
25782593
target_compile_options(${name} PRIVATE
25792594
${c_compile_flags})
25802595
target_link_directories(${name} PRIVATE

cmake/modules/SwiftWindowsSupport.cmake

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ function(swift_windows_lib_for_arch arch var)
4949
set(${var} ${paths} PARENT_SCOPE)
5050
endfunction()
5151

52-
function(swift_windows_generate_sdk_vfs_overlay flags)
52+
function(swift_windows_get_sdk_vfs_overlay overlay)
5353
get_filename_component(VCToolsInstallDir ${VCToolsInstallDir} ABSOLUTE)
5454
get_filename_component(UniversalCRTSdkDir ${UniversalCRTSdkDir} ABSOLUTE)
5555
set(UCRTVersion ${UCRTVersion})
@@ -58,10 +58,8 @@ function(swift_windows_generate_sdk_vfs_overlay flags)
5858
configure_file("${SWIFT_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
5959
"${CMAKE_CURRENT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
6060
@ONLY)
61-
62-
set(${flags}
63-
-Xclang;-ivfsoverlay;-Xclang;"${CMAKE_CURRENT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
64-
PARENT_SCOPE)
61+
set(${overlay} ${CMAKE_CURRENT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml
62+
PARENT_SCOPE)
6563
endfunction()
6664

6765
function(swift_verify_windows_VCVAR var)

tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ function(add_sourcekit_default_compiler_flags target)
7171
LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories)
7272

7373
# Set compilation and link flags.
74+
if(${SWIFT_HOST_VARIANT_SDK} STREQUAL WINDOWS)
75+
swift_windows_include_for_arch(${SWIFT_HOST_VARIANT_ARCH}
76+
${SWIFT_HOST_VARIANT_ARCH}_INCLUDE)
77+
target_include_directories(${target} SYSTEM PRIVATE
78+
${${SWIFT_HOST_VARIANT_ARCH}_INCLUDE})
79+
endif()
7480
target_compile_options(${target} PRIVATE
7581
-fblocks)
7682
target_link_options(${target} PRIVATE

0 commit comments

Comments
 (0)