@@ -467,6 +467,17 @@ function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping)
467
467
468
468
set(sdk_dir " ${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH}/usr/lib/swift ")
469
469
470
+ # HostCompatibilityLibs is defined as an interface library that
471
+ # does not generate any concrete build target
472
+ # (https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries)
473
+ # In order to specify a dependency to it using `add_dependencies`
474
+ # we need to manually " expand " its underlying targets
475
+ get_property(compatibility_libs
476
+ TARGET HostCompatibilityLibs
477
+ PROPERTY INTERFACE_LINK_LIBRARIES)
478
+ set(compatibility_libs_path
479
+ " ${SWIFTLIB_DIR} /${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}/${SWIFT_HOST_VARIANT_ARCH} ")
480
+
470
481
# If we found a swift compiler and are going to use swift code in swift
471
482
# host side tools but link with clang, add the appropriate -L paths so we
472
483
# find all of the necessary swift libraries on Darwin.
@@ -505,8 +516,11 @@ function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping)
505
516
target_link_directories(${target} PRIVATE " ${sdk_dir} ")
506
517
507
518
# A backup in case the toolchain doesn't have one of the compatibility libraries.
508
- target_link_directories(${target} PRIVATE
509
- " ${SWIFTLIB_DIR} /${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR} ")
519
+ # We are using on purpose `add_dependencies` instead of `target_link_libraries`,
520
+ # since we want to ensure the linker is pulling the matching archives
521
+ # only if needed
522
+ target_link_directories(${target} PRIVATE " ${compatibility_libs_path} ")
523
+ add_dependencies(${target} ${compatibility_libs} )
510
524
511
525
# Include the abi stable system stdlib in our rpath.
512
526
set(swift_runtime_rpath " /usr/lib/swift ")
@@ -518,8 +532,11 @@ function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping)
518
532
target_link_directories(${target} PRIVATE ${bs_lib_dir} )
519
533
520
534
# Required to pick up the built libswiftCompatibility<n>.a libraries
521
- target_link_directories(${target} PRIVATE
522
- " ${SWIFTLIB_DIR} /${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR} ")
535
+ # We are using on purpose `add_dependencies` instead of `target_link_libraries`,
536
+ # since we want to ensure the linker is pulling the matching archives
537
+ # only if needed
538
+ target_link_directories(${target} PRIVATE " ${compatibility_libs_path} ")
539
+ add_dependencies(${target} ${compatibility_libs} )
523
540
524
541
# At runtime link against the built swift libraries from the current
525
542
# bootstrapping stage.
0 commit comments