Skip to content

Commit 4b217bc

Browse files
authored
Merge pull request swiftlang#40882 from readdle/readdle/clang-cl-crosscompile
[cmake] Add support for external clang/clang-cl
2 parents bf4dfe6 + 4cc528d commit 4b217bc

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 10 additions & 4 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)

cmake/modules/SwiftWindowsSupport.cmake

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,29 +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_ID Clang)
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})
9697
set(CMAKE_C_SIMULATE_ID MSVC)
9798
set(CMAKE_C_COMPILER_FRONTEND_VARIANT MSVC)
98-
set(CMAKE_CXX_COMPILER_ID Clang)
9999
set(CMAKE_CXX_SIMULATE_ID MSVC)
100100
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MSVC)
101101
else()
102-
set(CMAKE_C_COMPILER ${CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
103-
set(CMAKE_CXX_COMPILER ${CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
104-
set(CMAKE_C_COMPILER_ID Clang)
105-
set(CMAKE_CXX_COMPILER_ID Clang)
102+
set(CMAKE_C_COMPILER ${SWIFT_CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
103+
set(CMAKE_CXX_COMPILER ${SWIFT_CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
106104
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}")
107108
else()
108-
message(SEND_ERROR "${target} requires a clang based compiler")
109+
message(SEND_ERROR "${target} requires a clang based compiler. Please set SWIFT_CLANG_LOCATION.")
109110
endif()
110111
endif()
111112
endmacro()

0 commit comments

Comments
 (0)