@@ -558,16 +558,24 @@ function(add_swift_host_library name)
558
558
559
559
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
560
560
swift_windows_get_sdk_vfs_overlay(ASHL_VFS_OVERLAY)
561
- target_compile_options(${name} PRIVATE
562
- $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY} ">)
563
-
564
- # MSVC doesn't support -Xclang. We don't need to manually specify
565
- # the dependent libraries as `cl` does so.
566
- target_compile_options(${name} PRIVATE
567
- $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=oldnames ">
568
- # TODO(compnerd) handle /MT, /MTd
569
- $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d> ">
570
- )
561
+ # Both clang and clang-cl on Windows set CMAKE_C_SIMULATE_ID to MSVC.
562
+ # We are using CMAKE_C_COMPILER_FRONTEND_VARIANT to detect the correct
563
+ # way to pass -Xclang arguments.
564
+ if (" ${CMAKE_C_COMPILER_FRONTEND_VARIANT} " STREQUAL " MSVC ")
565
+ target_compile_options(${name} PRIVATE
566
+ $<$<COMPILE_LANGUAGE:C,CXX>:SHELL:/clang:-Xclang /clang:-ivfsoverlay /clang:-Xclang /clang:${ASHL_VFS_OVERLAY} >)
567
+ else()
568
+ target_compile_options(${name} PRIVATE
569
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY} ">)
570
+
571
+ # MSVC doesn't support -Xclang. We don't need to manually specify
572
+ # the dependent libraries as `cl`/`clang-cl` does so.
573
+ target_compile_options(${name} PRIVATE
574
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=oldnames ">
575
+ # TODO(compnerd) handle /MT, /MTd
576
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d> ">
577
+ )
578
+ endif()
571
579
endif()
572
580
573
581
set_target_properties(${name} PROPERTIES
@@ -978,9 +986,12 @@ function(add_swift_host_tool executable)
978
986
target_include_directories(${executable} SYSTEM PRIVATE
979
987
${${SWIFT_HOST_VARIANT_ARCH} _INCLUDE})
980
988
981
- if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
989
+ # On Windows both clang-cl and clang simulate MSVC.
990
+ # We are using CMAKE_C_COMPILER_FRONTEND_VARIANT to distinguish
991
+ # clang from clang-cl.
992
+ if(NOT " ${CMAKE_C_COMPILER_ID} " STREQUAL " MSVC " AND NOT " ${CMAKE_C_COMPILER_FRONTEND_VARIANT} " STREQUAL " MSVC ")
982
993
# MSVC doesn't support -Xclang. We don't need to manually specify
983
- # the dependent libraries as `cl` does so.
994
+ # the dependent libraries as `cl`/`clang-cl` does so.
984
995
target_compile_options(${executable} PRIVATE
985
996
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=oldnames ">
986
997
# TODO(compnerd) handle /MT, /MTd
0 commit comments