Skip to content

Commit 2012b91

Browse files
Merge pull request #4404 from swiftwasm/release/5.6
[pull] swiftwasm-release/5.6 from release/5.6
2 parents cebaa2d + e6df6b4 commit 2012b91

File tree

3 files changed

+51
-27
lines changed

3 files changed

+51
-27
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,19 @@ function(_add_host_variant_c_compile_link_flags name)
118118
set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
119119
endif()
120120

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")
123124
get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}"
124125
MACCATALYST_BUILD_FLAVOR ""
125126
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()
128134
endif()
129135

130136
if (CMAKE_Swift_COMPILER)
@@ -560,16 +566,24 @@ function(add_swift_host_library name)
560566
561567
if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL MSVC)
562568
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()
573587
endif()
574588
575589
set_target_properties(${name} PROPERTIES
@@ -980,9 +994,12 @@ function(add_swift_host_tool executable)
980994
target_include_directories(${executable} SYSTEM PRIVATE
981995
${${SWIFT_HOST_VARIANT_ARCH}_INCLUDE})
982996
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")
9841001
# 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.
9861003
target_compile_options(${executable} PRIVATE
9871004
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:"SHELL:-Xclang --dependent-lib=oldnames">
9881005
# TODO(compnerd) handle /MT, /MTd

cmake/modules/SwiftWindowsSupport.cmake

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,21 +83,30 @@ macro(swift_swap_compiler_if_needed target)
8383
if(NOT CMAKE_C_COMPILER_ID MATCHES Clang)
8484
if(CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME AND CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR)
8585
if(SWIFT_BUILT_STANDALONE)
86-
get_target_property(CLANG_LOCATION clang LOCATION)
87-
get_filename_component(CLANG_LOCATION ${CLANG_LOCATION} DIRECTORY)
86+
get_target_property(SWIFT_CLANG_LOCATION clang LOCATION)
87+
get_filename_component(SWIFT_CLANG_LOCATION ${SWIFT_CLANG_LOCATION} DIRECTORY)
8888
else()
89-
set(CLANG_LOCATION ${LLVM_RUNTIME_OUTPUT_INTDIR})
89+
set(SWIFT_CLANG_LOCATION ${LLVM_RUNTIME_OUTPUT_INTDIR})
9090
endif()
91+
endif()
9192

93+
if (DEFINED SWIFT_CLANG_LOCATION)
9294
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
93-
set(CMAKE_C_COMPILER ${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
94-
set(CMAKE_CXX_COMPILER ${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
95+
set(CMAKE_C_COMPILER ${SWIFT_CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
96+
set(CMAKE_CXX_COMPILER ${SWIFT_CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
97+
set(CMAKE_C_SIMULATE_ID MSVC)
98+
set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC)
99+
set(CMAKE_CXX_SIMULATE_ID MSVC)
100+
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC)
95101
else()
96-
set(CMAKE_C_COMPILER ${CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
97-
set(CMAKE_CXX_COMPILER ${CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
102+
set(CMAKE_C_COMPILER ${SWIFT_CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
103+
set(CMAKE_CXX_COMPILER ${SWIFT_CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
98104
endif()
105+
set(CMAKE_C_COMPILER_ID Clang)
106+
set(CMAKE_CXX_COMPILER_ID Clang)
107+
message(STATUS "C/C++ compiler for ${target} is set to: ${CMAKE_C_COMPILER}")
99108
else()
100-
message(SEND_ERROR "${target} requires a clang based compiler")
109+
message(SEND_ERROR "${target} requires a clang based compiler. Please set SWIFT_CLANG_LOCATION.")
101110
endif()
102111
endif()
103112
endmacro()

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,7 @@ function(_add_target_variant_c_compile_flags)
215215
list(APPEND result "-DLLVM_ON_WIN32")
216216
list(APPEND result "-D_CRT_SECURE_NO_WARNINGS")
217217
list(APPEND result "-D_CRT_NONSTDC_NO_WARNINGS")
218-
if(NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
219-
list(APPEND result "-D_CRT_USE_BUILTIN_OFFSETOF")
220-
endif()
218+
list(APPEND result "-D_CRT_USE_BUILTIN_OFFSETOF")
221219
# TODO(compnerd) permit building for different families
222220
list(APPEND result "-D_CRT_USE_WINAPI_FAMILY_DESKTOP_APP")
223221
if("${CFLAGS_ARCH}" MATCHES arm)

0 commit comments

Comments
 (0)