@@ -558,16 +558,24 @@ function(add_swift_host_library name)
558558
559559 if (NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC )
560560 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 ()
571579 endif ()
572580
573581 set_target_properties (${name} PROPERTIES
@@ -978,9 +986,12 @@ function(add_swift_host_tool executable)
978986 target_include_directories (${executable} SYSTEM PRIVATE
979987 ${${SWIFT_HOST_VARIANT_ARCH} _INCLUDE})
980988
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" )
982993 # 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.
984995 target_compile_options (${executable} PRIVATE
985996 $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:"SHELL:-Xclang --dependent-lib=oldnames" >
986997 # TODO(compnerd) handle /MT, /MTd
0 commit comments