Skip to content

Commit aa33be5

Browse files
authored
Merge pull request #68882 from rintaro/5.10-fetch-content
[5.10][CMake] Replace early swift-syntax with FetchContent
2 parents b5d47b7 + ad889b3 commit aa33be5

39 files changed

+273
-461
lines changed

CMakeLists.txt

+47-26
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ include(CMakeDependentOption)
9494
include(CheckLanguage)
9595
include(GNUInstallDirs)
9696
include(SwiftImplicitImport)
97+
include(FetchContent)
9798

9899
# Enable Swift for the host compiler build if we have the language. It is
99100
# optional until we have a bootstrap story.
@@ -691,10 +692,9 @@ if(CMAKE_C_COMPILER_ID MATCHES Clang)
691692
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Werror=c++98-compat-extra-semi>)
692693
endif()
693694

694-
# Make sure we know where swift-syntax is because we need it to build the parser.
695-
if(NOT EXISTS "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}")
696-
message(SEND_ERROR "swift-syntax is required to build the Swift compiler. Please run update-checkout or specify SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE")
697-
endif()
695+
option(SWIFT_BUILD_SWIFT_SYNTAX
696+
"Enable building swift syntax"
697+
FALSE)
698698

699699
set(SWIFT_BUILD_HOST_DISPATCH FALSE)
700700
if(SWIFT_ENABLE_DISPATCH AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
@@ -794,7 +794,6 @@ include(SwiftConfigureSDK)
794794
include(SwiftComponents)
795795
include(SwiftList)
796796
include(AddPureSwift)
797-
include(SetRPATH)
798797

799798
# Configure swift include, install, build components.
800799
swift_configure_components()
@@ -830,14 +829,22 @@ elseif(BOOTSTRAPPING_MODE MATCHES "BOOTSTRAPPING.*")
830829
else()
831830
set(BOOTSTRAPPING_MODE "HOSTTOOLS")
832831
endif()
833-
elseif(BOOTSTRAPPING_MODE STREQUAL "HOSTTOOLS" OR SWIFT_SWIFT_PARSER)
832+
elseif(BOOTSTRAPPING_MODE STREQUAL "HOSTTOOLS" OR SWIFT_BUILD_SWIFT_SYNTAX)
834833
# We are building using a pre-installed host toolchain but not bootstrapping
835834
# the Swift modules. This happens when building using 'build-tooling-libs'
836835
# where we haven't built a new Swift compiler. Use the Swift compiler from the
837836
# pre-installed host toolchain to build the Swift modules.
838837
set(SWIFT_EXEC_FOR_SWIFT_MODULES "${CMAKE_Swift_COMPILER}")
839838
endif()
840839

840+
if(SWIFT_BUILD_SWIFT_SYNTAX)
841+
# Only "HOSTTOOLS" is supported in Linux when Swift parser integration is enabled.
842+
if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD" AND NOT BOOTSTRAPPING_MODE STREQUAL "HOSTTOOLS")
843+
message(WARNING "Force setting BOOTSTRAPPING=HOSTTOOLS because Swift parser integration is enabled")
844+
set(BOOTSTRAPPING_MODE "HOSTTOOLS")
845+
endif()
846+
endif()
847+
841848
if(BOOTSTRAPPING_MODE MATCHES "HOSTTOOLS|.*-WITH-HOSTLIBS")
842849
if(SWIFT_ENABLE_ARRAY_COW_CHECKS)
843850
message(STATUS "array COW checks disabled when building the swift modules with host libraries")
@@ -944,25 +951,6 @@ if(XCODE)
944951
set(SWIFT_SDKS "OSX")
945952
endif()
946953

947-
# When we have the early SwiftSyntax build, we can include its parser.
948-
if(SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR)
949-
set(SWIFT_PATH_TO_EARLYSWIFTSYNTAX_TARGETS
950-
${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/cmake/SwiftSyntaxTargets.cmake)
951-
if(NOT EXISTS "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_TARGETS}")
952-
message(STATUS "Skipping Swift Swift parser integration due to missing early SwiftSyntax")
953-
else()
954-
set(SWIFT_SWIFT_PARSER TRUE)
955-
include(${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_TARGETS})
956-
957-
if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD" AND NOT BOOTSTRAPPING_MODE STREQUAL "HOSTTOOLS")
958-
# Only "HOSTTOOLS" is supported in Linux when Swift parser integration is enabled.
959-
message(WARNING "Force setting BOOTSTRAPPING=HOSTTOOLS because Swift parser integration is enabled")
960-
set(BOOTSTRAPPING_MODE "HOSTTOOLS")
961-
endif()
962-
endif()
963-
endif()
964-
965-
966954
# FIXME: the parameters we specify in SWIFT_SDKS are lacking architecture specifics,
967955
# so we need to hard-code it. For example, the SDK for Android is just 'ANDROID',
968956
# and we have to specify SWIFT_SDK_ANDROID_ARCHITECTURES separately.
@@ -1171,13 +1159,17 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND NOT CMAKE_CROSSCOMPILING)
11711159
set(CMAKE_OSX_DEPLOYMENT_TARGET "")
11721160
endif()
11731161

1162+
swift_get_host_triple(SWIFT_HOST_TRIPLE)
1163+
set(SWIFT_HOST_MODULE_TRIPLE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_MODULE}")
1164+
set(SWIFT_HOST_LIBRARIES_DEST_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/swift/host")
1165+
11741166
if(SWIFT_INCLUDE_TOOLS)
11751167
message(STATUS "Building host Swift tools for ${SWIFT_HOST_VARIANT_SDK} ${SWIFT_HOST_VARIANT_ARCH}")
11761168
message(STATUS " Build type: ${CMAKE_BUILD_TYPE}")
11771169
message(STATUS " Assertions: ${LLVM_ENABLE_ASSERTIONS}")
11781170
message(STATUS " LTO: ${SWIFT_TOOLS_ENABLE_LTO}")
11791171
message(STATUS " Bootstrapping: ${BOOTSTRAPPING_MODE}")
1180-
message(STATUS " Swift parser: ${SWIFT_SWIFT_PARSER}")
1172+
message(STATUS " Swift parser: ${SWIFT_BUILD_SWIFT_SYNTAX}")
11811173
message(STATUS "")
11821174
else()
11831175
message(STATUS "Not building host Swift tools")
@@ -1323,6 +1315,35 @@ endif()
13231315
add_subdirectory(include)
13241316

13251317
if(SWIFT_INCLUDE_TOOLS)
1318+
# Include 'swift-syntax'.
1319+
# This is a function because we want to set some 'CMAKE_*' variables temporarily.'
1320+
# TODO: Replace this with 'block()' after CMake 3.25
1321+
function(include_swift_syntax)
1322+
if(NOT SWIFT_BUILD_SWIFT_SYNTAX)
1323+
return()
1324+
endif()
1325+
if(NOT EXISTS "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}")
1326+
message(SEND_ERROR "swift-syntax is required to build the Swift compiler. Please run update-checkout or specify SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE")
1327+
return()
1328+
endif()
1329+
1330+
set(CMAKE_Swift_COMPILER_TARGET ${SWIFT_HOST_TRIPLE})
1331+
set(BUILD_SHARED_LIBS ON)
1332+
# All libraries in 'swift-syntax' goes to 'lib/swift/host'.
1333+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${SWIFT_HOST_LIBRARIES_DEST_DIR}")
1334+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${SWIFT_HOST_LIBRARIES_DEST_DIR}")
1335+
if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD")
1336+
set(SWIFT_HOST_LIBRARIES_RPATH "$ORIGIN;$ORIGIN/../${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
1337+
endif()
1338+
1339+
file(TO_CMAKE_PATH "${SWIFT_PATH_TO_SWIFT_SYNTAX_SOURCE}" swift_syntax_path)
1340+
FetchContent_Declare(SwiftSyntax
1341+
SOURCE_DIR "${swift_syntax_path}"
1342+
)
1343+
FetchContent_MakeAvailable(SwiftSyntax)
1344+
endfunction()
1345+
include_swift_syntax()
1346+
13261347
add_subdirectory(lib)
13271348

13281349
# SwiftCompilerSources must come before "tools".

cmake/modules/AddPureSwift.cmake

+28-28
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@ include(macCatalystUtils)
22

33
# Workaround a cmake bug, see the corresponding function in swift-syntax
44
function(force_target_link_libraries TARGET)
5-
cmake_parse_arguments(ARGS "" "" "PUBLIC" ${ARGN})
6-
7-
foreach(DEPENDENCY ${ARGS_PUBLIC})
8-
target_link_libraries(${TARGET} PRIVATE ${DEPENDENCY})
9-
add_dependencies(${TARGET} ${DEPENDENCY})
5+
target_link_libraries(${TARGET} ${ARGN})
106

7+
cmake_parse_arguments(ARGS "PUBLIC;PRIVATE;INTERFACE" "" "" ${ARGN})
8+
foreach(DEPENDENCY ${ARGS_UNPARSED_ARGUMENTS})
119
string(REGEX REPLACE [<>:\"/\\|?*] _ sanitized ${DEPENDENCY})
1210
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/forced-${sanitized}-dep.swift
1311
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/forced-${sanitized}-dep.swift
1412
DEPENDS ${DEPENDENCY}
15-
)
13+
)
1614
target_sources(${TARGET} PRIVATE
1715
${CMAKE_CURRENT_BINARY_DIR}/forced-${sanitized}-dep.swift
1816
)
@@ -46,21 +44,7 @@ function(_add_host_swift_compile_options name)
4644
$<$<COMPILE_LANGUAGE:Swift>:-runtime-compatibility-version>
4745
$<$<COMPILE_LANGUAGE:Swift>:none>)
4846

49-
# Set the appropriate target triple.
50-
# FIXME: This should be set by CMake.
51-
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS)
52-
set(DEPLOYMENT_VERSION "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_DEPLOYMENT_VERSION}")
53-
endif()
54-
55-
if(SWIFT_HOST_VARIANT_SDK STREQUAL "ANDROID")
56-
set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
57-
endif()
58-
59-
get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}"
60-
MACCATALYST_BUILD_FLAVOR ""
61-
DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION}")
62-
63-
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:Swift>:-target;${target}>)
47+
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:Swift>:-target;${SWIFT_HOST_TRIPLE}>)
6448
_add_host_variant_swift_sanitizer_flags(${name})
6549
endfunction()
6650

@@ -121,7 +105,7 @@ endfunction()
121105
# source1 ...
122106
# Sources to add into this library.
123107
function(add_pure_swift_host_library name)
124-
if (NOT SWIFT_SWIFT_PARSER)
108+
if (NOT SWIFT_BUILD_SWIFT_SYNTAX)
125109
message(STATUS "Not building ${name} because swift-syntax is not available")
126110
return()
127111
endif()
@@ -196,13 +180,15 @@ function(add_pure_swift_host_library name)
196180

197181
# Make sure we can use the host libraries.
198182
target_include_directories(${name} PUBLIC
199-
${SWIFT_HOST_LIBRARIES_DEST_DIR})
183+
"${SWIFT_HOST_LIBRARIES_DEST_DIR}")
184+
target_link_directories(${name} PUBLIC
185+
"${SWIFT_HOST_LIBRARIES_DEST_DIR}")
200186

201187
if(APSHL_EMIT_MODULE)
202188
# Determine where Swift modules will be built and installed.
203189

204-
set(module_triple ${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_MODULE})
205-
set(module_dir ${SWIFT_HOST_LIBRARIES_DEST_DIR})
190+
set(module_triple "${SWIFT_HOST_MODULE_TRIPLE}")
191+
set(module_dir "${SWIFT_HOST_LIBRARIES_DEST_DIR}")
206192
set(module_base "${module_dir}/${name}.swiftmodule")
207193
set(module_file "${module_base}/${module_triple}.swiftmodule")
208194
set(module_interface_file "${module_base}/${module_triple}.swiftinterface")
@@ -234,14 +220,20 @@ function(add_pure_swift_host_library name)
234220
>)
235221
endif()
236222

223+
if(LLVM_USE_LINKER)
224+
target_link_options(${name} PRIVATE
225+
"-use-ld=${LLVM_USE_LINKER}"
226+
)
227+
endif()
228+
237229
# Export this target.
238230
set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS ${name})
239231
endfunction()
240232

241233
# Add a new "pure" Swift host tool.
242234
#
243235
# "Pure" Swift host tools can only contain Swift code, and will be built
244-
# with the host compiler.
236+
# with the host compiler.
245237
#
246238
# Usage:
247239
# add_pure_swift_host_tool(name
@@ -262,7 +254,7 @@ endfunction()
262254
# source1 ...
263255
# Sources to add into this tool.
264256
function(add_pure_swift_host_tool name)
265-
if (NOT SWIFT_SWIFT_PARSER)
257+
if (NOT SWIFT_BUILD_SWIFT_SYNTAX)
266258
message(STATUS "Not building ${name} because swift-syntax is not available")
267259
return()
268260
endif()
@@ -322,7 +314,15 @@ function(add_pure_swift_host_tool name)
322314

323315
# Make sure we can use the host libraries.
324316
target_include_directories(${name} PUBLIC
325-
${SWIFT_HOST_LIBRARIES_DEST_DIR})
317+
"${SWIFT_HOST_LIBRARIES_DEST_DIR}")
318+
target_link_directories(${name} PUBLIC
319+
"${SWIFT_HOST_LIBRARIES_DEST_DIR}")
320+
321+
if(LLVM_USE_LINKER)
322+
target_link_options(${name} PRIVATE
323+
"-use-ld=${LLVM_USE_LINKER}"
324+
)
325+
endif()
326326

327327
# Workaround to touch the library and its objects so that we don't
328328
# continually rebuild (again, see corresponding change in swift-syntax).

cmake/modules/AddSwift.cmake

+22-20
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,7 @@ function(_add_host_variant_swift_sanitizer_flags target)
112112
endif()
113113
endfunction()
114114

115-
# Usage:
116-
# _add_host_variant_c_compile_link_flags(name)
117-
function(_add_host_variant_c_compile_link_flags name)
115+
function(swift_get_host_triple out_var)
118116
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS)
119117
set(DEPLOYMENT_VERSION "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_DEPLOYMENT_VERSION}")
120118
endif()
@@ -123,26 +121,30 @@ function(_add_host_variant_c_compile_link_flags name)
123121
set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
124122
endif()
125123

124+
get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}"
125+
MACCATALYST_BUILD_FLAVOR ""
126+
DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION}")
127+
128+
set(${out_var} "${target}" PARENT_SCOPE)
129+
endfunction()
130+
131+
# Usage:
132+
# _add_host_variant_c_compile_link_flags(name)
133+
function(_add_host_variant_c_compile_link_flags name)
126134
# MSVC and gcc don't understand -target.
127135
# clang-cl understands --target.
128136
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
129-
get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}"
130-
MACCATALYST_BUILD_FLAVOR ""
131-
DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION}")
132137
if("${CMAKE_C_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC") # clang-cl options
133-
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${target}>)
134-
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${target}>)
138+
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
139+
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:--target=${SWIFT_HOST_TRIPLE}>)
135140
else()
136-
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${target}>)
137-
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${target}>)
141+
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${SWIFT_HOST_TRIPLE}>)
142+
target_link_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-target;${SWIFT_HOST_TRIPLE}>)
138143
endif()
139144
endif()
140145

141146
if (CMAKE_Swift_COMPILER)
142-
get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}"
143-
MACCATALYST_BUILD_FLAVOR ""
144-
DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION}")
145-
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:Swift>:-target;${target}>)
147+
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:Swift>:-target;${SWIFT_HOST_TRIPLE}>)
146148

147149
_add_host_variant_swift_sanitizer_flags(${name})
148150
endif()
@@ -442,7 +444,7 @@ endfunction()
442444

443445
function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping)
444446
if(NOT BOOTSTRAPPING_MODE)
445-
if (SWIFT_SWIFT_PARSER)
447+
if (SWIFT_BUILD_SWIFT_SYNTAX)
446448
set(ASRLF_BOOTSTRAPPING_MODE "HOSTTOOLS")
447449
else()
448450
return()
@@ -579,7 +581,7 @@ function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping)
579581
${SWIFT_PATH_TO_SWIFT_SDK}/usr/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}/${SWIFT_HOST_VARIANT_ARCH})
580582
endif()
581583

582-
if(SWIFT_SWIFT_PARSER)
584+
if(SWIFT_BUILD_SWIFT_SYNTAX)
583585
# For the "end step" of bootstrapping configurations, we need to be
584586
# able to fall back to the SDK directory for libswiftCore et al.
585587
if (BOOTSTRAPPING_MODE MATCHES "BOOTSTRAPPING.*")
@@ -657,7 +659,7 @@ function(add_swift_host_library name)
657659
translate_flags(ASHL "${options}")
658660

659661
# Once the new Swift parser is linked, everything has Swift modules.
660-
if (SWIFT_SWIFT_PARSER AND ASHL_SHARED)
662+
if (SWIFT_BUILD_SWIFT_SYNTAX AND ASHL_SHARED)
661663
set(ASHL_HAS_SWIFT_MODULES ON)
662664
endif()
663665

@@ -703,7 +705,7 @@ function(add_swift_host_library name)
703705

704706
add_library(${name} ${libkind} ${ASHL_SOURCES})
705707

706-
target_link_directories(${name} PUBLIC ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
708+
target_link_directories(${name} PUBLIC "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
707709

708710
# Respect LLVM_COMMON_DEPENDS if it is set.
709711
#
@@ -925,7 +927,7 @@ function(add_swift_host_tool executable)
925927
endif()
926928

927929
# Once the new Swift parser is linked in, every host tool has Swift modules.
928-
if (SWIFT_SWIFT_PARSER AND NOT ASHT_DOES_NOT_USE_SWIFT)
930+
if (SWIFT_BUILD_SWIFT_SYNTAX AND NOT ASHT_DOES_NOT_USE_SWIFT)
929931
set(ASHT_HAS_SWIFT_MODULES ON)
930932
endif()
931933

@@ -964,7 +966,7 @@ function(add_swift_host_tool executable)
964966
endif()
965967
endif()
966968

967-
if(SWIFT_SWIFT_PARSER)
969+
if(SWIFT_BUILD_SWIFT_SYNTAX)
968970
set(extra_relative_rpath "")
969971
if(NOT "${ASHT_BOOTSTRAPPING}" STREQUAL "")
970972
if(executable MATCHES "-bootstrapping")

cmake/modules/AddSwiftUnittests.cmake

+24-3
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,31 @@ function(add_swift_unittest test_dirname)
111111
endif()
112112
endif()
113113

114-
if (SWIFT_SWIFT_PARSER AND NOT ASU_IS_TARGET_TEST)
114+
file(RELATIVE_PATH relative_lib_path "${CMAKE_CURRENT_BINARY_DIR}" "${SWIFT_LIBRARY_OUTPUT_INTDIR}")
115+
116+
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS)
117+
set_property(
118+
TARGET ${test_dirname}
119+
APPEND PROPERTY INSTALL_RPATH "@executable_path/${relative_lib_path}")
120+
elseif(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD")
121+
set_property(
122+
TARGET ${test_dirname}
123+
APPEND PROPERTY INSTALL_RPATH "$ORIGIN/${relative_lib_path}")
124+
endif()
125+
126+
if (SWIFT_BUILD_SWIFT_SYNTAX AND NOT ASU_IS_TARGET_TEST)
115127
# Link to stdlib the compiler uses.
116-
_add_swift_runtime_link_flags(${test_dirname} "../../lib" "")
117-
set_property(TARGET ${test_dirname} PROPERTY BUILD_WITH_INSTALL_RPATH OFF)
128+
_add_swift_runtime_link_flags(${test_dirname} "${relative_lib_path}" "")
129+
130+
if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS)
131+
set_property(
132+
TARGET ${test_dirname}
133+
APPEND PROPERTY INSTALL_RPATH "@executable_path/${relative_lib_path}/swift/host")
134+
elseif(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD")
135+
set_property(
136+
TARGET ${test_dirname}
137+
APPEND PROPERTY INSTALL_RPATH "$ORIGIN/${relative_lib_path}/swift/host")
138+
endif()
118139
endif()
119140
endfunction()
120141

0 commit comments

Comments
 (0)