@@ -118,13 +118,19 @@ function(_add_host_variant_c_compile_link_flags name)
118
118
set (DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL} )
119
119
endif ()
120
120
121
- # MSVC, clang-cl, gcc don't understand -target.
122
- if (CMAKE_C_COMPILER_ID MATCHES "Clang" AND NOT SWIFT_COMPILER_IS_MSVC_LIKE )
121
+ # MSVC and gcc don't understand -target.
122
+ # clang-cl understands --target.
123
+ if (CMAKE_C_COMPILER_ID MATCHES "Clang" )
123
124
get_target_triple (target target_variant "${SWIFT_HOST_VARIANT_SDK} " "${SWIFT_HOST_VARIANT_ARCH} "
124
125
MACCATALYST_BUILD_FLAVOR ""
125
126
DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION} " )
126
- target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :-target;${target} > )
127
- target_link_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :-target;${target} > )
127
+ if ("${CMAKE_C_COMPILER_FRONTEND_VARIANT} " STREQUAL "MSVC" ) # clang-cl options
128
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :--target=${target} > )
129
+ target_link_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :--target=${target} > )
130
+ else ()
131
+ target_compile_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :-target;${target} > )
132
+ target_link_options (${name} PRIVATE $< $< COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX> :-target;${target} > )
133
+ endif ()
128
134
endif ()
129
135
130
136
if (CMAKE_Swift_COMPILER )
@@ -560,16 +566,24 @@ function(add_swift_host_library name)
560
566
561
567
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
562
568
swift_windows_get_sdk_vfs_overlay(ASHL_VFS_OVERLAY)
563
- target_compile_options(${name} PRIVATE
564
- $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY} ">)
565
-
566
- # MSVC doesn't support -Xclang. We don't need to manually specify
567
- # the dependent libraries as `cl` does so.
568
- target_compile_options(${name} PRIVATE
569
- $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=oldnames ">
570
- # TODO(compnerd) handle /MT, /MTd
571
- $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d> ">
572
- )
569
+ # Both clang and clang-cl on Windows set CMAKE_C_SIMULATE_ID to MSVC.
570
+ # We are using CMAKE_C_COMPILER_FRONTEND_VARIANT to detect the correct
571
+ # way to pass -Xclang arguments.
572
+ if (" ${CMAKE_C_COMPILER_FRONTEND_VARIANT} " STREQUAL " MSVC ")
573
+ target_compile_options(${name} PRIVATE
574
+ $<$<COMPILE_LANGUAGE:C,CXX>:SHELL:/clang:-Xclang /clang:-ivfsoverlay /clang:-Xclang /clang:${ASHL_VFS_OVERLAY} >)
575
+ else()
576
+ target_compile_options(${name} PRIVATE
577
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang -ivfsoverlay -Xclang ${ASHL_VFS_OVERLAY} ">)
578
+
579
+ # MSVC doesn't support -Xclang. We don't need to manually specify
580
+ # the dependent libraries as `cl`/`clang-cl` does so.
581
+ target_compile_options(${name} PRIVATE
582
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=oldnames ">
583
+ # TODO(compnerd) handle /MT, /MTd
584
+ $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=msvcrt$<$<CONFIG:Debug>:d> ">
585
+ )
586
+ endif()
573
587
endif()
574
588
575
589
set_target_properties(${name} PROPERTIES
@@ -980,9 +994,12 @@ function(add_swift_host_tool executable)
980
994
target_include_directories(${executable} SYSTEM PRIVATE
981
995
${${SWIFT_HOST_VARIANT_ARCH} _INCLUDE})
982
996
983
- if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
997
+ # On Windows both clang-cl and clang simulate MSVC.
998
+ # We are using CMAKE_C_COMPILER_FRONTEND_VARIANT to distinguish
999
+ # clang from clang-cl.
1000
+ if(NOT " ${CMAKE_C_COMPILER_ID} " STREQUAL " MSVC " AND NOT " ${CMAKE_C_COMPILER_FRONTEND_VARIANT} " STREQUAL " MSVC ")
984
1001
# MSVC doesn't support -Xclang. We don't need to manually specify
985
- # the dependent libraries as `cl` does so.
1002
+ # the dependent libraries as `cl`/`clang-cl` does so.
986
1003
target_compile_options(${executable} PRIVATE
987
1004
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:" SHELL:-Xclang --dependent-lib=oldnames ">
988
1005
# TODO(compnerd) handle /MT, /MTd
0 commit comments