Skip to content

Commit c11443c

Browse files
committed
build: repair the Windows build
This should repair the Windows build after #29451. The quoting behaviour was incorrect and was constructing an invalid compiler invocation. Solve the issue by using `target_include_directories` instead. However, since this needs the target, hoist the flag computation to the local sites. This replicates more logic because of the custom build trying to replicate the CMake build logic in CMake.
1 parent 58c259f commit c11443c

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 -isystem;${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)
@@ -921,11 +904,9 @@ function(_add_swift_library_single target name)
921904

922905
if("${SWIFTLIB_SINGLE_SDK}" STREQUAL "WINDOWS")
923906
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
924-
swift_windows_generate_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY_FLAGS)
925-
foreach(flag ${SWIFTLIB_SINGLE_VFS_OVERLAY_FLAGS})
926-
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS -Xcc;${flag})
927-
list(APPEND SWIFTLIB_SINGLE_C_COMPILE_FLAGS ${flag})
928-
endforeach()
907+
swift_windows_get_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY)
908+
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS
909+
-Xcc;-Xclang;-Xcc;-ivfsoverlay;-Xcc;-Xclang;-Xcc;${SWIFTLIB_SINGLE_VFS_OVERLAY})
929910
endif()
930911
swift_windows_include_for_arch(${SWIFTLIB_SINGLE_ARCHITECTURE} SWIFTLIB_INCLUDE)
931912
foreach(directory ${SWIFTLIB_INCLUDE})
@@ -1423,6 +1404,25 @@ function(_add_swift_library_single target name)
14231404
endif()
14241405

14251406
# Set compilation and link flags.
1407+
if(SWIFTLIB_SINGLE_SDK STREQUAL WINDOWS)
1408+
swift_windows_include_for_arch(${SWIFTLIB_SINGLE_ARCHITECTURE}
1409+
${SWIFTLIB_SINGLE_ARCHITECTURE}_INCLUDE)
1410+
target_include_directories(${target} SYSTEM PRIVATE
1411+
${${SWIFTLIB_SINGLE_ARCHITECTURE}_INCLUDE})
1412+
1413+
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
1414+
swift_windows_get_sdk_vfs_overlay(SWIFTLIB_SINGLE_VFS_OVERLAY)
1415+
target_compile_options(${target} PRIVATE
1416+
"SHELL:-Xclang -ivfsoverlay -Xclang ${SWIFTLIB_SINGLE_VFS_OVERLAY}")
1417+
1418+
# MSVC doesn't support -Xclang. We don't need to manually specify
1419+
# the dependent libraries as `cl` does so.
1420+
target_compile_options(${target} PRIVATE
1421+
"SHELL:-Xclang --dependent-lib=oldnames"
1422+
# TODO(compnerd) handle /MT, /MTd
1423+
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>")
1424+
endif()
1425+
endif()
14261426
target_include_directories(${target} SYSTEM PRIVATE
14271427
${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_UC_INCLUDE}
14281428
${SWIFT_${SWIFTLIB_SINGLE_SDK}_${SWIFTLIB_SINGLE_ARCHITECTURE}_ICU_I18N_INCLUDE})
@@ -2625,6 +2625,21 @@ function(_add_swift_executable_single name)
26252625
${SWIFTEXE_SINGLE_DEPENDS})
26262626
llvm_update_compile_flags("${name}")
26272627

2628+
if(SWIFTEXE_SINGLE_SDK STREQUAL WINDOWS)
2629+
swift_windows_include_for_arch(${SWIFTEXE_SINGLE_ARCHITECTURE}
2630+
${SWIFTEXE_SINGLE_ARCHITECTURE}_INCLUDE)
2631+
target_include_directories(${name} SYSTEM PRIVATE
2632+
${${SWIFTEXE_SINGLE_ARCHITECTURE}_INCLUDE})
2633+
2634+
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
2635+
# MSVC doesn't support -Xclang. We don't need to manually specify
2636+
# the dependent libraries as `cl` does so.
2637+
target_compile_options(${name} PRIVATE
2638+
"SHELL:-Xclang --dependent-lib=oldnames"
2639+
# TODO(compnerd) handle /MT, /MTd
2640+
"SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d>")
2641+
endif()
2642+
endif()
26282643
target_compile_options(${name} PRIVATE
26292644
${c_compile_flags})
26302645
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
@@ -82,6 +82,12 @@ function(add_sourcekit_default_compiler_flags target)
8282
endif()
8383

8484
# Set compilation and link flags.
85+
if(${SWIFT_HOST_VARIANT_SDK} STREQUAL WINDOWS)
86+
swift_windows_include_for_arch(${SWIFT_HOST_VARIANT_ARCH}
87+
${SWIFT_HOST_VARIANT_ARCH}_INCLUDE)
88+
target_include_directories(${target} SYSTEM PRIVATE
89+
${${SWIFT_HOST_VARIANT_ARCH}_INCLUDE})
90+
endif()
8591
target_compile_options(${target} PRIVATE
8692
-fblocks)
8793
target_link_options(${target} PRIVATE

0 commit comments

Comments
 (0)