From 5f545b43f9eba29f6a869d9ba70ce0eabc251c7d Mon Sep 17 00:00:00 2001 From: Eric Miotto <1094986+edymtt@users.noreply.github.com> Date: Thu, 25 Apr 2024 07:51:17 -0700 Subject: [PATCH] CMake: add option to link Swift content from Darwin toolchain This is needed in specific Apple internal configurations -- as a result of the limited applicability, this option is not exposed through `build-script` on purpose. Addresses rdar://127014753 --- CMakeLists.txt | 6 ++++++ cmake/modules/AddSwift.cmake | 5 +++++ tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2cfb26c7b00c..c76d78620d40b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -532,6 +532,12 @@ set(SWIFT_DARWIN_STDLIB_INSTALL_NAME_DIR "/usr/lib/swift" CACHE STRING set(SWIFT_DARWIN_STDLIB_PRIVATE_INSTALL_NAME_DIR "@rpath" CACHE STRING "The directory of the install_name for the private standard library dylibs") +option(SWIFT_ALLOW_LINKING_SWIFT_CONTENT_IN_DARWIN_TOOLCHAIN + "Adds search paths for libraries in the toolchain + when building Swift programs. + This is needed to support Apple internal configurations." + FALSE) + set(SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX "10.13" CACHE STRING "Minimum deployment target version for OS X") diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index 534110c80202c..266ed77d46214 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -611,6 +611,11 @@ function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping) endif() endif() endif() + if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS AND SWIFT_ALLOW_LINKING_SWIFT_CONTENT_IN_DARWIN_TOOLCHAIN) + get_filename_component(TOOLCHAIN_BIN_DIR ${SWIFT_EXEC_FOR_SWIFT_MODULES} DIRECTORY) + get_filename_component(TOOLCHAIN_LIB_DIR "${TOOLCHAIN_BIN_DIR}/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}" ABSOLUTE) + target_link_directories(${target} BEFORE PUBLIC ${TOOLCHAIN_LIB_DIR}) + endif() if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD" AND SWIFT_USE_LINKER STREQUAL "lld") target_link_options(${target} PRIVATE "SHELL:-Xlinker -z -Xlinker nostart-stop-gc") endif() diff --git a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake index 328de29ebb2d8..58baab5b58122 100644 --- a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +++ b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake @@ -173,6 +173,12 @@ function(add_sourcekit_swift_runtime_link_flags target path HAS_SWIFT_MODULES) target_link_directories(${target} PUBLIC ${TOOLCHAIN_LIB_DIR}) endif() endif() + + if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS AND SWIFT_ALLOW_LINKING_SWIFT_CONTENT_IN_DARWIN_TOOLCHAIN) + get_filename_component(TOOLCHAIN_BIN_DIR ${SWIFT_EXEC_FOR_SWIFT_MODULES} DIRECTORY) + get_filename_component(TOOLCHAIN_LIB_DIR "${TOOLCHAIN_BIN_DIR}/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}" ABSOLUTE) + target_link_directories(${target} BEFORE PUBLIC ${TOOLCHAIN_LIB_DIR}) + endif() endif() set(RPATH_LIST ${RPATH_LIST} PARENT_SCOPE)