Skip to content

Commit d2302fd

Browse files
committed
build: allow unified builds on Windows
We cannot query the location of the clang target when clang is built in a unified build. Use a generator expression instead.
1 parent 14d9011 commit d2302fd

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

CMakeLists.txt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -968,17 +968,14 @@ if(SWIFT_NEED_EXPLICIT_LIBDISPATCH)
968968
set(SWIFT_LIBDISPATCH_C_COMPILER ${CMAKE_C_COMPILER})
969969
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CMAKE_CXX_COMPILER})
970970
elseif(${CMAKE_SYSTEM_NAME} STREQUAL ${CMAKE_HOST_SYSTEM_NAME})
971-
get_target_property(CLANG_LOCATION clang LOCATION)
972-
get_filename_component(CLANG_LOCATION ${CLANG_LOCATION} DIRECTORY)
973-
974971
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
975972
set(SWIFT_LIBDISPATCH_C_COMPILER
976-
${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
973+
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
977974
set(SWIFT_LIBDISPATCH_CXX_COMPILER
978-
${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
975+
$<TARGET_FILE_DIR:clang>/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
979976
else()
980-
set(SWIFT_LIBDISPATCH_C_COMPILER ${CLANG_LOCATION}/clang)
981-
set(SWIFT_LIBDISPATCH_CXX_COMPILER ${CLANG_LOCATION}/clang++)
977+
set(SWIFT_LIBDISPATCH_C_COMPILER $<TARGET_FILE_DIR:clang>/clang)
978+
set(SWIFT_LIBDISPATCH_CXX_COMPILER $<TARGET_FILE_DIR:clang>/clang++)
982979
endif()
983980
else()
984981
message(SEND_ERROR "libdispatch requires a newer clang compiler (${CMAKE_C_COMPILER_VERSION} < 3.9)")

cmake/modules/SwiftWindowsSupport.cmake

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,20 +84,19 @@ endfunction()
8484
macro(swift_swap_compiler_if_needed target)
8585
if(NOT CMAKE_C_COMPILER_ID MATCHES Clang)
8686
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})
87+
get_target_property(IMPORTED clang IMPORTED)
88+
if(IMPORTED)
89+
set(CLANG_LOCATION $<TARGET_FILE_DIR:clang>)
9690
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})
91+
set(CLANG_LOCATION ${LLVM_RUNTIME_OUTPUT_INTDIR})
92+
endif()
93+
94+
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC")
95+
set(CMAKE_C_COMPILER ${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
96+
set(CMAKE_CXX_COMPILER ${CLANG_LOCATION}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
97+
else()
98+
set(CMAKE_C_COMPILER ${CLANG_LOCATION}/clang${CMAKE_EXECUTABLE_SUFFIX})
99+
set(CMAKE_CXX_COMPILER ${CLANG_LOCATION}/clang++${CMAKE_EXECUTABLE_SUFFIX})
101100
endif()
102101
else()
103102
message(SEND_ERROR "${target} requires a clang based compiler")

0 commit comments

Comments
 (0)