Skip to content

Commit a1c9719

Browse files
committed
build: repair the Windows build
This should repair the Windows build after swiftlang#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 423bcdf commit a1c9719

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)
@@ -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)