Skip to content

Commit 9b8310c

Browse files
committed
build: extract compiler swap into a helper
This is needed as SwiftSyntaxParser also needs to be built with clang as it uses blocks unconditionally. However, building with cl provides much better diagnostics and debugging as well as a significantly faster build (~15-20% faster) as well as a faster compiler.
1 parent e622ea6 commit 9b8310c

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

cmake/modules/SwiftWindowsSupport.cmake

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,28 @@ function(swift_windows_cache_VCVARS)
8080
set(UCRTVersion $ENV{UCRTVersion} CACHE STRING "")
8181
endfunction()
8282

83+
# NOTE(compnerd) we use a macro here as this modifies global variables
84+
macro(swift_swap_compiler_if_needed target)
85+
if(NOT CMAKE_C_COMPILER_ID MATCHES Clang)
86+
if(CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME)
87+
get_target_property(CLANG_LOCATION clang LOCATION)
88+
get_filename_component(CLANG_LOCATION ${CLANG_LOCATION} DIRECTORY)
89+
90+
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC" OR
91+
"${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
92+
set(CMAKE_C_COMPILER
93+
${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
94+
set(CMAKE_CXX_COMPILER
95+
${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
96+
else()
97+
set(CMAKE_C_COMPILER
98+
${CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
99+
set(CMAKE_CXX_COMPILER
100+
${CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
101+
endif()
102+
else()
103+
message(SEND_ERROR "${target} requires a clang based compiler")
104+
endif()
105+
endif()
106+
endmacro()
107+

tools/SourceKit/CMakeLists.txt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,8 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
88
message(SEND_ERROR "SourceKit cannot be built standalone")
99
endif()
1010

11-
if(NOT CMAKE_C_COMPILER_ID MATCHES Clang)
12-
if(CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME)
13-
get_target_property(CLANG_LOCATION clang LOCATION)
14-
get_filename_component(CLANG_LOCATION ${CLANG_LOCATION} DIRECTORY)
15-
16-
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC" OR
17-
"${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
18-
set(CMAKE_C_COMPILER
19-
${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
20-
set(CMAKE_CXX_COMPILER
21-
${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
22-
else()
23-
set(CMAKE_C_COMPILER
24-
${CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
25-
set(CMAKE_CXX_COMPILER
26-
${CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
27-
endif()
28-
else()
29-
message(SEND_ERROR "SourceKit requires a clang based compiler")
30-
endif()
31-
endif()
11+
include(SwiftWindowsSupport)
12+
swift_swap_compiler_if_needed("SourceKit")
3213

3314
if (DARWIN_TOOLCHAIN_VERSION)
3415
set(SOURCEKIT_VERSION_STRING "${DARWIN_TOOLCHAIN_VERSION}")

0 commit comments

Comments
 (0)